Universal Serial Bus:

Anuncio
Universal Serial Bus:
Elementos de un Controlador USB
La complejidad del protocolo USB implica que un
periférico USB debe tener inteligencia.
Todos los dispositivos USB tienen un controlador que
se encarga de atender los eventos que se
producen en el port USB, y mantenga en áreas de
memoria los datos correspondientes a las
transacciones en curso.
Una importante decisión al diseñar un dispositivo
USB es la selección del controlador apropiado.
Universal Serial Bus:
Criterios de Diseño de Dispositivos
La variedad de chips existentes en el mercado permiten
plantear tres alternativas para la resolución de un proyecto:
Tipo de
µControlador
Control del USB
Eléctrica
firmware
cualquiera
Diseñada de
acuerdo a la
especificación
eléctrica del USB
manejar
todo el
control del
Bus
cualquiera
Controlador USB conectado
como un periférico
con Controlador
USB embebido
Controlador USB embebido
como un periférico
Diseño
Global
Flexibilidad al
cambiar de
proyecto
Altísima
complejidad
Máxima en la libre
elección de CPU
Mínima
complejidad
Máxima en la libre
elección de CPU
Se mantiene know how
sobre el Controlador USB
Mínima
complejidad
Se cambia de CPU y
de Controlador USB
Universal Serial Bus:
Casos Prácticos
Intel:
Fue el primero. Presentó un microcontrolador de la familia
MCS 51 con un controlador USB embebido: el 80251.
Posteriormente junto con Cypress desarrolló el 8x930
(basado en el 8051 básico) y el 8x931 como evolución del
80251.
Cypress:
Hasta su sociedad con Intel desarrolló la línea de
microcontroladores con USB embebido CY7C63xxx. En
algunos puntos mas fuertes que los de Intel. Pero el valor de
la compatibilidad con la conocida MCS51 los hizo migrar a
la línea 8x93x. Finalmente desarrollaron el EZ-USB que une lo
mejor de los dos mundos. La potencia de los CY7C63xxx y la
compatibilidad con el 8051 básico.
Universal Serial Bus:
Casos Prácticos
Controladores Genéricos:
Se trata de Transceivers genéricos que interfacean con
cualquier microprocesador.
Ofrecen mas flexibilidad en el diseño de diferentes
soluciones.
Opciones:
National
USBN9603
Lucent
USS820/825
NetChip
Net2888
Philips
PDIUSBD11
PDIUSBD12
Fairchild
USB1T11A
Universal Serial Bus:
USBN9603 Diagrama en Bloques
•Formateo de paquetes
•Generación y Chequeo de CRC
•Detección de Direccionamiento de Endpoints
•Controla la devolución de NACK, ACK o Stall
•Circuito de clock Recovery
•Detector de glitch
•Circuitería de detección de EOP
•Lógica de Bit Stuffing
•Utiliza el código NRZI entrante para extraer el clock
de 12 MHz del frame entrante. Trabaja con un clock
de 48 Mhz. derivado de un cristal de 24 Mhz que
alimenta al chip, y un PLL doblador
•Cumple con el capítulo 7 de la especificación USB 1.1.
•Contiene un Receptor con entrada diferencial, un
receptor con terminación simple y regulador interno, y u
transmisor con fuente de corriente propia
•Le provee 3.3 V al Transceptor.
•Se puede utilizar para suministrar
alimentación al resistor de pull up de 1,5 KΩ
Universal Serial Bus:
USBN9603 Endpoint Pipe Controller
Universal Serial Bus:
USBN9603 Interfaz con el Microprocesador
Modo No Multiplexado
Universal Serial Bus:
USBN9603 Interfaz con el Microprocesador
Modo Multiplexado
Universal Serial Bus:
USBN9603 Interfaz con el Microprocesador
Modo Microwire/PLUS
Universal Serial Bus:
USBN9603 Operación de los Endpoints I
Cada Endpoint
tiene asociada
una memoria RAM
FIFO.
La memoria RAM
FIFO asociada al
Endpoint 0
bidireccional es de
8 bytes.
Luego cada uno
de los seis
Endpoints
unidireccionales
restantes tiene una
memoria de 64
bytes.
Universal Serial Bus:
USBN9603 Operación de los Endpoints II
Operación de RAM FIFO de Transmisión
TFxS: Tamaño total en bytes de
la memoria FIFO.
TXRP: Puntero de Lectura para
Transmisión. Se incrementa cada
vez que el Endpoint Controller
lee la memoria FIFO durante la
transmisión al BUS.
TXWP: Puntero de Escritura para
Transmisión. Se incrementa cada
vez que el Firmware escribe en la
memoria FIFO un dato para ser
transmitido.
TXFL: Indica cuantos bytes tiene
actualmente almacenados la
memoria FIFO
TCOUNT: Accesible por el
Firmware en el registro TxSx, este
valor indica cuantos bytes serán
escritos en la memoria FIFO de
Transmisión.
Universal Serial Bus:
USBN9603 Operación de los Endpoints III
Operación de RAM FIFO de Recepción
RFxS: Tamaño total en bytes de
la memoria FIFO.
RXWP: Puntero de Escritura por
Recepción. Se incrementa cada
vez que el Endpoint Controller
escribe la memoria FIFO por
recepción de un dato desde el
BUS.
RXRP: Puntero de Lectura para
Recepción. Se incrementa cada
vez que el Firmware lee desde la
memoria FIFO un dato.
RXFL: Indica cuantos bytes
pueden ser recibidos y
almacenados la memoria FIFO
antes de tener Overrun
RCOUNT: Accesible por el
Firmware en el registro RXSx, este
valor indica cuantos bytes serán
leídos desde la memoria FIFO de
Recepción.
Universal Serial Bus:
USBN9603 Modelo de Programación I
Jerarquía de Registros para reporte de Eventos
Universal Serial Bus:
USBN9603 Modelo de Programación II
Consideraciones Generales en la descripción de los
registros.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control I
Main Control Register (MCNTRL):
SRST:
Software Reset. Si es ‘1’ se resetea el controlador. Es idéntico al Reset por Hardware
excepto que no se altera el registro CCONF.
VGE:
Voltage Generator Enable: Si es ‘1’ se habilita el generador interno de 3,3 V.
NAT:
Node Attached: Si es ‘1’ indica que el nodo está listo para ser detectado como
attachado al USB.
INTOC:
Interrupt Output Control: Controla la salida de Interrupción a un procesador
00: Deshabilitado. 01 Activa baja open drain. 10:Activa alta push pull. 11 Activa baja push
pull.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control II
Clock Configuration Register (CCONF):
CLKDIV:
Divisor del Clock Externo. Luego de un reset divide por 11 lo que
significa que emite una señal de 4 MHz. por el pin CLKOUT.
CODIS:
Clock Output Disable. Si vale ‘1’ se deshabilita la salida de clock
mencionada en el punto anterior. CLKOUT permanecerá inactivo hasta
que se limpie este bit.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control III
Revision Identifier (RID):
REVID:
Indicador de revisión. Para esta revisión el 9603 contiene en este campo
0010b.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control IV
Node Functional State Register (NFSR):
NFS:
El firmware irá efectuando
transiciones de estado según los
valores de los bits de Estados del
Alternate Event Register (ALTEV).
De acuerdo a eso escribirá en
estos bits el estado en que se
encuentra el nodo funcional.
NFS
1
0
Estado del
Nodo
Descripción
0
0
NodeReset
Se recibió un Reset por HW, Sw, o por el
BUS. Todos los Endpoints deshabilitados.
0
1
NodeResume
1
0
Se generó señalización “K”. El Firmware
setea este modo para efectuar un
Wake Up remoto.Dura de 1 a 15 mseg.
NodeOperational Este es el estado Normal de operación.
1
1
NodeSuspend
Si el Firmware detecta un evento de
Suspensión, setea este estado. Los
transceivers operan en modo de bajo
consumo.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control V
Main Event Register (MAEV):
WARN: Se ha seteado uno de los bits en el registro FWEV (FIFO Warning Event). Volverá a ’0’ cuando se
lee FWEV.
ALT: Se ha seteado uno de los bites del registro ALTEV. Se limpiará cuando se lea ALTEV.
TX_EV: Se ha seteado alguno de los bits del Registro TXEV (TXFIFOx o TXUNDERNx). Indica que se ha
completado una transacción IN.
FRAME: Se setea cada vez que el Frame Counter se actualiza con un nuevo valor. Puede indicar la
recepción de un paquete SOF en el USB.
NAK: Negative Acknowledge se ha producido y uno de los bits del registro NAKEV indica en que
Endpoint. Se limpia cuando se lee NAKEV.
ULD: El timer de frames pasó de una condición Locked a una condición Unlocked. Esta situación se
indica con el bit UL seteado en el Fram Numbre Register. Se limpia al leer dicho registro.
RX_EV: Se ha seteado algúno de los bits del Registro RXEV. Esto indica que se ha completado una
transacción OUT o SETUP. Se limpia cuando se limpian los bits RX_LAST en el registro RXSx y los bits
RXOVRRN en el registro RXEV.
INTR: Master Interrupt Enable.Este bit se cablea a 0 en este registro. El correspondiente bit en el Main
Mask Register (MAMSK) es el Master Interrupt Enable.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control VI
Main Mask Register (MAMSK):
Con un 1se habilita la generación de interrupción al microprocesador
cuando el bit correspondiente del registro MAEV se activa. De lo
contrario la generación de interrupción de esa fuente permanece
deshabilitada.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control VII
Alternate Event Register (ALTEV):
WKUP: Este bit se pone en ‘1’ cuando se envía una interrupción por el pin INTR. Este bit es
Read Only y se limpia cuando se pone a cero el bit correspondiente (PNDUC o PNDUSB en
el Wake Up Register.
DMA: DEMA Event. Indica que alguno de los bits del DMA Event Register (DAMEV) se ha
seteado. Se limpia cuando se resetea el bit del DMAEV.
EOP: Indica la detección de una secuencia EOP en el USB. Se limpia con la operación de
lectura
SD3 y SD5: Se setean cuando se detectan que un port Upstream lleva 3 y 5 mseg.
respectivamente en estado Idle. SD3 indica que el dispositivo debe ser suspendido. SD5
indica que el dispositivo puede comenzar una operación de Wake Up remota si se le
solicita. Se limpia con la lectura.
RESET: Se setea cuando se detecta una condición de reset. Se limpia con la lectura
RESUME: Se enciende si el dispositivo está en estado Idle y recibe señalización en el USB.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control IX
Transmit Event Register (TXEV):
TXFIFO
Transmit FIFO. Son copia de los bits TX_DONE de los Transmit Status Register (TXSx)
correspondientes. Se setean cuando se completa una transacción IN en el
correspondiente Endpoint de transmisión. Se limpian cuando se lee el
correspondiente TXSx Register.
TXUDRRN
Transmit Underrun. Son copia de los respectivos bits TX_URUN de los
correspondientes TXSx registers. Cada vez que cualquiera de los Transmit FIFOs
se vacía, se setea el respectivo bit TXUDRRN. Estos bits se limpian en el momento
en que se lee el Transmit Status Register.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control X
Transmit Mask Register (TXMSK):
Cada bit trabaja como máscara del correspondiente bit TXEV del Transmition
Event Register. Si la máscara está en 1, cada vez que se active un bit en el
registro TXEV, dicha activación se translada al bit TX_EV en el registro MAEV.
Cuando la máscara esté inactiva (bit en cero) el bit TX_EV del Registro MAEV no
sigue las variaciones de los bits del registro TXEV.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control XI
Receive Event Register (RXEV):
RXFIFO.
Receive FIFO. Se setean en respuesta a un set en los bits RX_ERR o RX_LAST del respectivo Receive
Status (RXSx) Register. AL leerse el correspondiente RXSx Register estos bits se limpian automáticamente.
El USBN9603 descarta todos los packets para su Endpoint 0 que reciba con errores, a fin de asegurar
que se ha capturado una copia válida del paquete SETUP, en el caso de retransmisiones por errores en
el medio de transmisión. De otro modo la FIFO puede quedar enganchada manteniendo datos
corruptos, y quedar inhibida para retransmitir el mismo paquete (El bit RXFIFO0 no solo refleja el valor
del RX_LAST para el Endpoint 0).
Si se usa data streaming para los endpoints de recepción (EP2, EP4 y EP6) el firmware debe chequear el
bit RX_ERR respectivo para asegurar que los paquetes recibidos no están corruptos por errores.
RXOVRRN
Receive Overrun. Se setean con el evento de un FIFO overrun. Se limpian cuando se limpia el registro.
El firmware debe chequear el bit RX_ERR respectivo al recibir paquetes en los otros Endpoints de
Recepción(EP2, EP4 y EP6) que no estén corruptos por errores, mas cuando esos endpoints soportan
data streaming (paquetes que son mayores que el tamaño de la FIFO).
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control XII
Receive Mask Register (RXMSK):
Cada bit trabaja como máscara del correspondiente bit RXEV del Transmition
Event Register. Si la máscara está en 1, cada vez que se active un bit en el
registro RXEV, dicha activación se translada al bit RX_EV en el registro MAEV.
Cuando la máscara esté inactiva (bit en cero) el bit RX_EV del Registro MAEV no
sigue las variaciones de los bits del registro RXEV.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control XIII
Nack Event Register (NAKEV):
IN
Vale 1 cuando se genera un handshake NAK para una combinación
address/endpoint habilitada (se pone en uno el bit AD_EN en el Function
Address Register (FAR) y el EP_EN en el Endpoint Control Register (EPCx ) en
respuesta a un token IN. Se limpia cuando el registro es leído.
OUT
Vale 1 cuando se genera un handshake NAK para una combinación
address/endpoint habilitada (se pone en uno el bit AD_EN en el Function
Address Register (FAR) y el EP_EN en el Endpoint Control Register (EPCx ) en
respuesta a un token OUT. Este bit no se setea si NACK se genera a causa de
una condición de overrun. Se limpia cuando el registro es leído.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Control XIV
Nack Mask Register (NAKMSK):
Cada bit trabaja como máscara del correspondiente bit del NAKEV Register. Si
la máscara está en 1, cada vez que se active un bit en el registro NAKEV, dicha
activación se translada al bit NAK en el registro MAEV. Cuando la máscara esté
inactiva (bit en cero) el bit NAK del Registro MAEV no sigue las variaciones de los
bits del registro NAKEV.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia I
FIFO Warning Event Register (FWEV):
TXWARN
Transmit Warning. Vale 1 cuando la respectiva FIFO del Endpoint de transmisión alcanza su
límite de warning, según se especifica en los bits TFWL del Registro TXCx respectivo, y está
habilitada la transmisión desde el Endpoint respectivo . Se limpia junto con la condición de
warning al escribir datos en la FIFO cuando esta está flusheada, o cuando la transmisión
está finalizada, como se refleja en el bit TX_DONE bit en el TXSx Register.
RXWARN
Receive Warning. Vale 1 cuando la respectiva FIFO del Endpoint de transmisión alcanza su
límite de warning, según se especifica en los bits RFWL del Registro EPCx respectivo. Se
limpia junto con la condición de warning al leer datos en la FIFO o cuando ésta está
flusheada.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia II
FIFO Warning Mask Register (FWMSK):
Cada bit trabaja como máscara del correspondiente bit del FWEV Register. Si la
máscara está en 1, cada vez que se active un bit en el registro FWEV, dicha
activación se traslada al bit WARN en el registro MAEV. Cuando la máscara esté
inactiva (bit en cero) el bit WARN del Registro MAEV no sigue las variaciones de
los bits del registro NAKEV.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia III
Frame Number High Byte Register (FNH): Parte I
FN
Frame Number. Es el número de frame recibido en el último paquete SOF. Si no se recibe
un número de frame válido dentro de un tiempo de 12060 bits del cambio
previo(denominado Frame Length Maximum, FLMAX, con tolerancia), el número de frame
se incrementa artificialmente. Si dos frames sucesivos se pierden o resultan incorrectos, el
FN actual se congela y se carga el siguiente número de frame desde un paquete SOF
válido. Si el byte bajo del número de frame es leído por el firmware antes de leer el registro
FNH, el valor leído corresponde a un buffer del registro que mantiene el valor de los tres
bits mas significativos del número de frame válidos al momento de la lectura del registro.
Por lo tanto la secuencia correcta para leer el número de frame es FNL, FNH. Las lecturas
de FNH que no hayan sido precedidas por lecturas del registro FNL leen el valor actual de
los tres bits mas significativos del número de frame. Luego de un reset, FN vale 0.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia III
Frame Number High Byte Register (FNH): Parte II
RFC
Reset Frame Count. AL setear este bit se resetea el número de frame (=x000), y a
continuación este bit se resetea por si mismo. Si lo leemos el resultado siempre es 0.
UL
Unlock Flag. Este bit indica que se han recibido al menos dos frames sin el número de
frame esperado, o que no se ha recibido un SOF válido dentro de 12060 tiempos de bit. Si
este bit está seteado, se carga en FN el número de frame del próximo paquete SOF
válido. Luego de un reset este bit vale 1.
MF
Missed SOF Flag. Este flag se setea cuando el número de frame en un SOF válido recibido,
no coincide con el valor esperado, o cuando no se ha recibido un SOF dentro de los
12060 tiempos de bit. Luego de un reset, este flag vale 1.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia IV
Frame Number Low Byte Register (FNL):
Mantiene el byte bajo del Número de Frame. Para asegurar consistencia, al leer
este registro el controlador lockea los tres bits mas significativos del Número de
Frame en el Registro FNH hasta que éste sea leído. La secuencia correcta para
leer el número de Frame es: FNL, FNH. Luego de un reset, FN vale 0.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia V
Function Address Register (FAR):
Este registro establece la dirección de función del dispositivo. Los diferentes
números de Endpoint se establecen para cada Endpoint individual en su
Endpoint Control Register.
AD
Address. Contiene la dirección de 7 bits de la función utilizada para transmitir y
recibir los tokens direccionados al dispositivo.
AD_EN
Address Enable. Cuando vale 1, los bits AD6-0 se utilizan para la comparación
de direcciones. Cusndo está en 0, el dispositivo no responde a ningún token
sobre el USB. Nota: Si el bit DEF en el registro Endpoint Control 0 está seteado, el
Endpoint 0 responde a la dirección default (Address 0).
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VI
DMA Control Register (DMACNTRL): Parte I
DSRC
DMA Source. El campo de bits DMA source
contiene el valor codificado en binario que
especifica cuales de los Endpoints 1 a 6 tienen
habilitado soporte DMA. Estos bits valen 0 luego
de un reset. La Tabla que tenemos a la derecha
presenta los valores posibles del campo de bits
DSRC.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VI
DMA Control Register (DMACNTRL): Parte II
DMOD
DMA Mode. Este bit especifica cuando se ha enviado un requerimiento DMA. Si está en ‘0’, se
envía un requerimiento DMA al completarse una transferencia. Para los Endpoints de transmisión
EP1, EP3 y EP5, el dato se transfiere completamente y se setea el bit TX_DONE (para llenar la
FIFO con nuevos datos a transmitir). Para los Endpoints de recepción EP2, EP4 y EP6, se indica
mediante el bit RX_LAST. Cuando el bit DMOD está en ‘1’, se envía un requerimiento DMA para
advertir que el respectivo bit está seteado. El bit DMOD está en ‘0’ luego de un reset
Un requerimiento DMA desde un Endpoint de transmisión se activa cuando se limpia la condición
del requerimiento. Si DMOD está a 0, se envían los requerimientos DMA una vez que le firmware
lee el registro Transmit Status (TXSx) respectivo, reseteando de este modo el bit TX_DONE, o si el
bit TX_LAST del registro Transmit Command (TXCx) se setea por firmware. Si DMOD está a ‘1’, se
envía un requerimiento de DMA cuando se limpia la condición de la FIFO, debido a que ya se han
transferido la cantidad suficiente de bytes al Endpoint, o si el bit TX_DONE está seteado debido a
una transmisión.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VI
DMA Control Register (DMACNTRL): Parte III
DMOD (continuación)
Los requerimientos de DMA desde un Endpoint de recepción se activan cuando la condición del
requerimiento se limpia. Si DMOD está a ‘0’, se envían requerimientos de DMA una vez que el
firmware lea el registro Receive Status (RXSx) respectivo, reseteando de este modo el bit
RX_LAST, o si la FIFO del Endpoint se vacía lo suficiente debido a las lecturas sucesivas. Si
DMOD vale ‘1’, Los requerimientos de DMA se envían una vez que la condición de warning de la
FIFO se limpie, o si la FIFO del Endpoint se vacía lo suficiente debido a las lecturas sucesivas.
Si DMOD vale ‘0’ y el Endpoint y el DMA están habilitados, se envían requerimientos de DMA una
vez que el firmware lee los registros TXSx or RXSx respectivos, reseteando de este modo el bit
TX_DONE/RX_LAST. Si DMOD vale ‘1’ y el Endpoint y el DMA están habilitados, se enviarán
requerimientos de DMA cada vez que se limpie la condición de la FIFO.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VI
DMA Control Register (DMACNTRL): Parte IV
ADMA
Automatic DMA. Al setear este bit se habilita el Endpoint seleccionado para recibir o transmitir. Antes que se haya
habilitado el modo ADMA, debe estar en ‘0’ el bit DEN en el registro DMA Control (DMACNTRL). El Modo ADMA
funciona hasta que se setee cualquier bit en el registro DMA Event (DMAEV), excepto para NTGL. Para iniciar el
modo ADMA, deben estar en ‘0’ todos los bits del registro DMAEV, excepto NTGL.
Para operaciones de recepción, se habilita automáticamente el receptor; y cuando se recibe el paquete se lo
transfiere vía DMA a la memoria. Para operaciones de transmisión, el paquete de datos se transfiere desde
memoria vía DMA; luego el transmisor se habilita automáticamente.
Para operaciones ADMA, se ignora el bit DMOD. Todas las operaciones tienen lugar como si el bit DMOD
estuviese en ‘0’.
Cuando un dispositivo entra al modo ADMA, puede perderse el estado existente en cualquiera de los endpoints.
Si aún hay datos en la FIFO, se flushean. También puede cambiar el estado existente de RX_EN o TX_EN.
Limpiando ADMA se sale del modo ADMA. Puede limpiarse DEN en ese momento o a posteriori. Si se lo hace al
mismo tiempo, todas las operaciones de DMA se cancelarán de inmediato y el firmware deberá transferir
cualquier dato remanente. Si se lo hace a posteriori, el USBN9603 completará cualquier transferencia DMA antes
de abandonar el modo ADMA (ver la descripción del bit DSHLT en el registro DMAEV).
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VI
DMA Control Register (DMACNTRL): Parte IV
DTGL
DMA Toggle. Este bit se usa para determinar el estado inicial de las operaciones ADMA. El Firmware setea
inicialmente este bit a 1 si comenzará con una operación DATA1, y a 0 si comenzará con una operación DATA0.
Las escritura en este bits también actualizan el bit NTGL en el registro DMAEV.
IGNRXTGL
Ignore RX Toggle. Si se setea este bit, no se efectúa la comparación entre los bits NTGL del registro DMAEV y
TOGGLE de los respectivos registros RXSx durante las operaciones de recepción. En este caso, no se detendrá
la operación de ADMA aunque no se correspondan los estados de estos bits durante una recepción. Si este bit
vale ‘0’, se detendrá el ADMA cuando no se correspondan los estados de estos bits. Luego de un reset este bit
vale ‘0’.
DEN
DMA Enable. Este bit habilita el modo DMA cuando se lo pone en ‘1’. If se resetea este bit y el ciclo de DMA
actual se ha completado (o no fue aún enviado) se finaliza la transferencia de DMA. Cuando el USBN9603 opera
en el modo de interfaz serie (el pin MODE1 está conectado a Vcc) el modo DMA no puede habilitarse, y setear
este bit no tiene efecto. Este bit se limpia luego del reset.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VII
DMA Event Register (DMAEV): Parte I
Todos los bits de este registro se usan con el modo ADMA. Los bits 0 a 3 pueden ocasionar una interrupción si
no se los limpia, aún si el dispositivo no está configurado en el modo ADMA. Hasta que no estén limpios todos
estos bits no puede iniciarse el modo ADM. Inversamente, el modo ADMA finaliza automáticamente cuando se
setean todos estos bits.
DSHLT
DMA Software Halt. Este bit se setea cuando las operaciones de ADMA se haltean por firmware. Este bit se setea
solo luego que el motor de DMA completó cualquier operación de limpieza y retornó al estado idle. Las siguientes
condiciones aplican en esta condición:
• Si el bit ADMA vale ‘0’ (pero DEN permanece seteado), se completa la operación en curso(si la hubiere). Esto
significa que cualquier dato presente en la FIFO se transferirá a memoria por DMA (si se estaba recibiendo). El
bit DSHLT bit está seteado solo si esto ha ocurrido. Al quedar seteado DEN es necesario limpiarlo mas adelante.
Normalmente esto se hace dentro del handler de interrupción de DSHLT.
• Si el bit DEN está a ‘0’ (ADMA puede permanecer seteado, o puede ponerse a ‘0’0 al mismo tiempo), finalizan
todas las operaciones de DMA y se setea de inmediato el bit DSHLT. Si hay datos en la FIFOs, éstos se retienen,
no se transmiten.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VII
DMA Event Register (DMAEV): Parte II
DSHLT (Continuación)
• Si el firmware intenta leer la FIFO (si se está recibiendo) o escribir en la FIFO (si se está transmitiendo), se
cancelan todas las operaciones de DMA y se seta de inmediato el bit DSHLT. La lectura o escritura no puede
considerarse exitosa ya que esta operación equivale a corromper la FIFO pudiendose perder algunos datos..
• Si el firmware leer o escribir desdehacia loe registros EPCx, TXCx, RXCx, TXSx, or RXSx correspondientes
(cuando DEN y ADMA están seteados en el registro DMACNTRL), se haltean todas las operaciones de DMA e
inmediatamente se setea el bit DSHLT. La operación de lectura o escritura no es afectada.
DERR
DMA Error. Este bit se setea para indicar que un paquete no ha sido recibido o transmitido correctamente.
También se setea si el bit TOGGLE del registro RXSx/TXSx no es igual al bit NTGLen el registro DMAEV luego
de la recepción/transmisión de un paquete. (Note que esta comparación se efectúa antes de que el bit NTGL
cambien de estado debido a una transferencia de paquete). En recepción, DERR es equivalente a RX_ERR. En
transmisión, es equivalente a TX_DONE (seteado) y a ACK_STAT (limpio).
Si está seteado el bit AEH en el registro DMA Error Count (DMAERR), DERR no se setea hasta que MAERRCNT
en el registro DMAERR esté limpio, y se detecte otro error. Los errores se manejan de acuerdo a lo especificado
en el registro DMAERR.
DCNT
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VII
DMA Event Register (DMAEV): Parte III
DCNT
DMA Count. Este bit se setea cuando el registro DMA Count (DMACNT) register está a ‘0’ (ver registro
DMACNT).
DSIZ
DMA Size. Este bit es significativo solo para operaciones de DMA de recepción. Indica la recepción de un
paquete cuya longitud es menor que la longitud completa de la FIFO. Esto normalmente indica el final de una
transferencia multipaquete.
NTGL
Next Toggle. Este bit determina el estado de toggle state del próximo paquete de datos a enviar (si se está
transmitiendo), o el estado de toggle experado del próximo paquete de datos (si se está recibiendo). Este bit se
inicializa escribiendo en el bit DTGL del registro DMACNTRL. Luego cambia de estado con cada paquete enviado
o recibido sobre el Endpoint actualmente seleccionado por DSRC2-0. Si se escribe DTGL al mismo tiempo en
que se está actualizando, la precedencia corresponde a la escritura. Si se está transmitiendo, mientras hay
operaciones ADMA en curso, el bit DTGL sobreescribe el correspondiente bit TOGGLE en el registro TXCx. De
esta forma el toggle alternativo de datos se produce correctamente sobre el USB. Note que no hay un bit de
máscara correspondiente a este evento ya que no se utiliza para generar interrupciones.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia VIII
DMA Mask Register (DMAMSK)
Cualquier bit de este registro que se setea habilita el seteo automático del bit de DMA
en el registro ALTEV cuando ocurre un evento respectivo en el registro DMAEV. De otro
modo, está deshabilitado el seteo del bit DMA. Los bits 0 a 3, se describen en el registro
DMAEV.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XI
Mirror Register (MIR):
Es un registro de solo lectura. Ya que su lectura no altera el estado de los registros
TXSx or RXSx al que apunta, el firmware puede chequear libremente el estado del
canal.
STAT
Status. Este campo es una réplica de los bits de estado del transmisor o receptor
seleccionado por el campo DSRC2-0 del registro DMACNTRL (no se requiere tener el
DMA activo o habilitado). Corresponde a TXSx o RXSx, respectivamente.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia X
DMA Count Register (DMACNT):
Este registro permite especificar la cuenta máxima de operaciones ADMA.
DCOUNT
DMA Count. Este campo se decrementa al completarse una operación de DMA hasta llegara 0.
Entonces se setea el bit DCNT del registro DMA Event, solo cuando se completa con éxito la
siguiente operación DMA. Este registro se detiene en cero (no hace underflow).
Para operaciones de recepción, esta cuenta se decrementa cuando el paquete se recibe
correctamente, y luego se transfiere a memoria vía DMA.
Para operaciones de transmisión, esta cuenta se decrementa se transfiere un paquete desde
memoria vía DMA, y luego de transmitido con éxito.
DCOUNT debe setearse del siguiente modo: DCOUNT = (Nº de paquetes a transferir) – 1. Si una
operación de escritura de DMACNT se superpone con un decremento automático por parte de la
lógica descripta, la escritura tiene mas precedencia.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XI
DMA Error Register (DMAERR): Parte I
DMAERRCNT
DMA Error Counter. Junto con la función de manejo automático de errores, este contador define el
número máximo de errores de bus consecutivos luego de los cuales se detiene el modo ADMA. El
Firmware puede asignar al bit 7 del contador un valor preestablecido. Una vez que arranque
ADMA, el contador se decrementa a partir de este valor preestablecido cada vez que se detecta un
error en el bus. Cada transacción correcta restablece el contador a su valor preestablecido.
Cuando el modo ADMA se detiene, también se restablece el contador a su valor preestablecido.
Si el contador llega a 0 y se detecta error en otro paquete, se setea el bit DERR del registro DMA
Event. Este registro no realiza underrun, es decir una vez que llega a cero, simplemente se
detiene.
DMAERRCNT se setea del siguiente modo: DMAERRCNT = 3D (Máximo . Nº de intentos de
transferencia permitidos) – 1.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XI
DMA Error Register (DMAERR): Parte II
AEH
Automatic Error Handling. Dependiendo del modo de transferencia actual este bit tiene dos osignificados
diferentes:
* Modo no Isocrono. Se utiliza para transferencias bulk, interrupción y control. Poner AEH en ‘1’ en este modo
habilita el manejo automático de paquetes con error de CRC o bit-stuffing. Si este bit es ‘1’ durante operaciones
de transmisión, el USBN9603 recarga automáticamente la FIFO y reprograma el paquete del cual el host no
retornó ACK. Si este bit es ‘0’ se detiene el manejo de errores. Si este bit es ‘1’ durante operaciones de
recepción, se flushea todo paquete recibido con error, directamente de la FIFO en uso (de acuerdo a lo
especificado en la descripción del bit DERR en el registro DMAEV) de modo de recibirlo nuevamente. Si este bit
es ‘0’ se detiene el manejo automático de errores.
* Isochronous mode Cuando este bit está en ‘1’ el USBN9603 ignorará paquetes recibidos con errores (tal como
se especifica en la descripción del bit DERR del registro DMAMSK). Si AEH es ‘1’ durante una operación de
recepción, el USBN9603 flushea y limpia la FIFO de recepción para recibir el siguiente paquete. Los paquetes
erróneos se ignoran y no son transferidos vía DMA. Si se limpia AEHse detiene el manejo automático de errores.
Solo se puede escribir este registro cuando el DMA está inactivo. De otro modo se ignora la escritura. Una lectura
a este registro mientras ADMA está activo retorna el valor actual del contador, y con ADMA inactivo retorna el
valor preestablecido. El contador solo se decrementa si AEH es ‘1’ (Detección de errores automática activada).
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XII
Wake-Up Register (WKUP): Parte I
PNDUSB
Pending USB Wake-Up. Este bit indica que el dispositivo ha sido despertado por actividad en el
USB. También señala un requerimiento de interrupción de wake-up pendiente. El host debe limpiar
el bit PNDUSB escribiendo ‘0’ en esta dirección. Un reset de hardware pone este bit a ‘1’.
PNDUC
Pending Microcontroller Wake-Up. Indica que el dispositivo ha sido despertado por un acceso
desde el microcontrolador. También indica un requerimiento de interrupción wake-up pendiente. El
host limpia el bit PNDUC escribiendo ‘0’ en esta dirección. Un hardware reset pone a ‘1’ este bit.
ENUSB
Enable USB. Cuando está a ‘1’, este bit habilita el wake-up del dispositivo por actividad en el USB.
ENUC
Enable Microcontroller. Cuando está a ‘1’, este bit habilita el wake-up del dispositivo por acceso
desde el microcontrolador.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XII
Wake-Up Register (WKUP): Parte II
WKMODE
Wake-Up Mode. Este bit selecciona el intervalo luego del cual el dispositivo generará una
interrupción wake-up (si está habilitada) cuando ocurra un evento wake-up válido, ya sea:
1 Immediately
2 Luego de un wake-up delay.
HOS
Halt On Suspend. Cuando este bit está seteado, el dispositivo entra en el modo Halt ni bien se lo
setea en estado Suspendido. Una vez que el nodo entra en este estado las escrituras en este bit
se ignoran.
FHT
Force Halt. Cuando el nodo no está attachado (NAT en ‘0’ en el registro MCNTRL), un ‘1’ en este
bit fuerza al nodo en el modo Halt. Cuando el nodo se attacha al USB (NAT se pone en ‘1’), se
ignora cualquier escritura a ‘1’ de este bit.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XIII
Endpoint Control 0 Register (EPC0): Parte I
EP
Endpoint. Este campo mantiene los 4 bits del número de Endpoint. Para el Endpoint 0, estos bits están cableados
a 0000b.
DEF
Default Address. Cuando está en ‘1’, el dispositivo responde a los requerimientos que se hagan por la Dirección
de port 0, independientemente del valor que contengan los campos FAR6-0/EP03-0.
Cuando se transmite un paquete IN para el Endpoint, el bit DEF se limpia automáticamente. Este bit aporta en la
transición de la dirección default (00000000000b) a la dirección asignada durante la secuencia de enumeración
del dispositivo por parte del Host. Esta transición no puede ocurrir en medio de una secuencia de control
SET_ADDRESS. Es necesario completar la secuencia de control. Sin embargo, la dirección debe cambiar
inmediatamente finalizada dicha secuencia a fin de evitar errores cuando otra secuencia de control siga
inmediatamente al comando SET_ADDRESS.
Luego de un reset del USB, el firmware tiene 10 mseg. para el set-up, y debe escribir 80h al registro FAR y 00h al
registro EPC0.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XIII
Endpoint Control 0 Register (EPC0): Parte II
DEF (Continuación)
Al recibir un comando SET_ADDRESS, el firmware debe escribir 40h al registro EPC0 y 80h
<assigned_function_address> al registro FAR. Luego debe encolar un paquete IN de longitud cero para
completar la fase de estadosde la secuencia de control SET_ADDRESS.
STALL
AL setear este bit el chip genera un handshake STALL bajo las siguientes condiciones:
1. Se habilita la FIFO de transmisión y se recibe un token IN.
2. Está habilitada la FIFO de recepción y se recibe un token OUT.
Note: Un token SETUP no causa la generación de un handshake STALL cuando este bit es ‘1’.
Al transmitir el handshake STALL, los bits RX_LAST y TX_DONE de los registros Receive/Transmit Status
respectivamente están seteados.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XIV
Transmit Status 0 Register (TXS0):
TCOUNT
Transmission Count. Indica la cuenta de bytes vacíos disponibles en la FIFO. Este campo nunca
es mayor que 8 en el Endpoint 0.
TX_DONE
Transmission Done. Cuando está seteado, este bit indica que un paquete completó su transmisión.
Se limpia con la lectura del dispositivo.
ACK_STAT
Acknowledge Status. Indica el estado, del paquete ACK previamente enviado. Este bit será
interpretado cuando TX_DONE está seteado a 1. Está seteado cuando se recibe ACK; de otro
modo permanece en ‘0’. Este bit también se limpia cuando se lee el registro.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XV
Transmit Command 0 Register (TXC0):
TX_EN
Transmission Enable. Habilita la transmisión de datos desde la FIFO. El chip lo limpia cada vez que termina de
transmitir un paquete simple, o un handshake STALL, en respuesta a un token IN. Para arrancar la transmisión
de un paquete, el firmware necesita setear este bit. El bit RX_EN del registro Receive Command 0 (RXC0) tiene
precedencia sobre este bit, es decir, si RX_EN está seteado, se ignora el bit TX_EN hasta que se resetee
RX_EN. Los paquetes de longitud cero se indican seteando este bit sin escribir nada en la FIFO.
TOGGLE
Especifica el PID utilizado para transmitir el paquete. Un valor 0 ocasiona que se genere un DATA0 PID, mientras
que un valor ‘1’ origina la generación de un DATA1 PID. Este bit no es alterado por el hardware.
FLUSH
Un ‘1’ en este bit flushea todos los datos de las FIFO de los Endpoint de control, resetea los Endpoints al estado
Idle, limpia los punteros de lectura y escritura de las FIFO, y finalmente se limpia a sí mismo. Si el Endpoint está
usando corrientemente la FIFO0 para transferir datos sobre el USB, la operación de flushing se demora hasta que
la transferencia se complete. Este bit se limpia en el reset. Es equivalente al bit FLUSH del registro RXC0.
IGN_IN
Ignore IN tokens. Sieste bit es ‘1’, el Endpoint ignorará cualquier token IN dirigido a su dirección configurada.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XVI
Transmit Data 0 Register (TXD0):
TXFD
Transmit FIFO Data Byte. El firmware escribe aquí solamente el payload
de datos del paquete. El PID y CRC16 se crean automáticamente.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XVII
Receive Status 0 Register (RXS0):
Registro de Estado de Recepción para el Endpoint de Control 0. Para recibir un paquete SETUP luego de recibir
un paquete OUT/SETUP de longitud cero, hay dos copias de este registro en el hardware. Una mantiene el
estado de recepción de un paquete de longitud cero, y la otra el estado del siguiente paquete SETUP con datos.
Si un paquete de longitud cero es seguido por un paquete SETUP, la primer lectura de este registro indica el
estado del paquete de longitud cero (con RX_LAST en ‘1’ y RCOUNT en ‘0’), y la segunda el del paquete SETUP.
RCOUNT
Receive Count. Indica la cuenta de bytes presentes en la RX FIFO. Nunca es superior a 8 para el Endpoint 0.
RX_LAST
Receive Last Bytes. Indica que se envió un ACK al completarse una operación de recepción exitosa. Este bit no
cambia para paquetes de longitud cero. Se limpia cada vez que se lee este registro.
TOGGLE
Un ‘0’ indica que el PID del último paquete de datos recibido exitosamente fue DATA0. Un ‘1’ indica que fue
DATA1. Los paquetes de longitud cero no lo modifican y se limpia cuando se lee este registro.
SETUP
Indica la recepción de un paquete SETUP. Los paquetes de longitud cero no lo modifican y se limpia cuando se
lee este registro.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XVIII
Receive Command 0 Register (RXC0): Parte I
RX_EN
Receive Enable. La recepción de paquetes OUT se deshabilita después de que se recibe cada
paquete, o cuando se retorna un handshake STALL en respuesta a un token OUT. Se debe
escribir un “1” en este bit para rehabilitar la recepción de datos. La recepción de paquetes SETUP
siempre está habilitada. En el caso de paquetes SETUP back-to-back (para un Endpoint dado)
donde se recibe un paquete SETUP válido sin intervenir otro token no SETUP, el Endpoint
Controller descarta el nuevo paquete SETUP y retorna un handshake ACK. Por cualquier razón
que impida al Endpoint Controller aceptar un paquete SETUP, no se generará handshake. Esto
permite recuperarse de la situación de haber perdido por el host el ACK del primer token SETUP.
IGN_OUT
Ignore OUT tokens. Si es ‘1’ el Endpoint ignorará cualquier token OUT dirigido a su dirección
configurada.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XVIII
Receive Command 0 Register (RXC0): Parte II
IGN_SETUP
Ignore SETUP tokens. Si es ‘1’, el Endpoint ignora cualquier token SETUP dirigido a su dirección
configurada.
FLUSH
Si es ‘1’ flushea todos los datos de los Endpoint de control de las FIFOs, resetea el Endpoint al
estado Idle, limpia los punteros de lectura y escritura de la FIFO, y luego se limpia a sí mismo. Si el
Endpoint es utilizado actualmente por la FIFO0 para transferir datos sobre el USB, la operación de
flushing se pospone hasta completar la transferencia. Luego de un reset este bit está limpio. Es
equivalente a FLUSH del registro TXC0.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XIX
Receive Data 0 Register (RXD0):
RXFD
Receive FIFO Data Byte.
El firmware esperará leer solo el payload de datos del paquete. El PID y el
CRC16 se remueven del stream de datos de entrada automáticamente.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XX
Endpoint Control X Register (EPC1 a EPC6): Parte I
Cada Endpoint unidireccional tiene un registro EPCx con los bits siguientes.
EP
Endpoint. Este campo mantiene el número de Endpoint de 4 bits.
EP_EN
Endpoint Enable. Si es ‘1’, se usa en la comparación el campo EP3-0, junto con el campo
AD6-0 del registro FAR. Si es ‘0’, el Endpoint no responde a ningún token sobre el USB.
Note: AD_EN en el registro FAR es la dirección global de comparación habilitada para el
USBN9603. Si es ‘0’, el dispositivo no responde en ninguna dirección, a pesar del estado de
EP_EN.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XX
Endpoint Control X Register (EPC1 a EPC6): Parte II
ISO
Isochronous. Si es ‘1’, el endpoint es isócrono. Esto significa que no se están enviando NAK
si el endpoint no está ready sino habilitado;es decir, si se recibe un token IN y no hay datos
disponibles para transmitir en la FIFO, o si un token OUT y la FIFO es full ya que no
disponemos de handshake de USB para máquinas sincrónicas.
STALL
Si es ‘1’ el chip generará handshakes STALL bajo las siguientes condiciones:
1. La FIFO se habilita y se recibe algún token de recepción.
2. La FIFO de recepción está habilitada y se recibe OUT token.
Setear este bit no genera un handshake STALL en respuesta al SETUP token.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXI
Transmit Status X Register (TXS1, TXS2, TXS3): Parte I
Cada una de las tres FIFOs de Endpoints de transmisión tiene un registro de Estados de
Transmisióncon los bits que se detallan a continuación.
TCOUNT
Transmission Count. Indica la cuenta de bytes vacíos disponible en la FIFO. Si esta cuenta
es mayor de 31, este campo indicará 31.
TX_DONE
Transmission Done. Si es ‘1’ indica que el Endpoint respondió a un paquete USB. Un ‘1’ en
este bit responde a alguna de las siguientes tres condiciones:
1. Se completó la transmisión de un paquete de datos que responde a un token IN con
operación no-ISO.
2. El endpoint envió un handshake STALL en respuesta a un token IN.
3. Se descartó o se transmitió un frame ISO schedulada. Este bit se limpia cada vez que se
lee este registro.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXI
Transmit Status X Register (TXS1, TXS2, TXS3): Parte II
ACK_STAT
Acknowledge Status. Vale cuando TX_DONE es ‘1’. Su función difiere de acuerdo a si la
operación es ISO (bit ISO en ‘1’ en el registro EPCx) o no-ISO (bit ISO en ‘0’).
Para operación no-ISO, este bit indica el estado de ACK del host para el paquete enviado
previamente. Vale ‘1’ cuando se ha recibido un ACK; de otro modo, está en ‘0’.
Para operación ISO, este bit vale ‘1’ si coincide el LSB de un número de frame (ver bit
IGN_ISOMSK), y se han enviado datos en respuesta a un token IN De otro modo está en
‘0’, la FIFO se flushea y TX_DONE es ‘1’.
Este bit se limpia cada vez que se lee este registro.
TX_URUN
Transmit FIFO Underrun. Vale ‘1’ si la FIFO de transmisión se vacía durante una transmisión,
y no se escriben datos nuevos en la FIFO. Si es así, el Media Access Controller (MAC) fuerza
un error de bit stuff seguido de un EOP. Este bit se limpia cada vez que se lee este registro.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXII
Transmit Command X Register (TXC1, TXC2, TXC3): Parte I
TX_EN
Transmission Enable. Habilita la transmisión de datos desde la FIFO. Cada vez que transmite
un paquete o luego de un handshake STALL en respuesta a un token IN, el USBN9603 lo
limpia en forma automática. Para comenzar la transmisión de un paquete, el firmware lo
debe poner en ‘1’.
LAST
Si vale ‘1’ indica que se ha escrito en la FIFO el paquete entero. Esto se utiliza en streaming
de datos a la FIFO mientras tiene lugar la transmisión del paquete previo. Si durante una
transmisión el bit LAST no está seteado y se vacía la FIFO de transmisión, se fuerza en el bus
un error de stuff seguido de un EOP. Los paquetes de longitud cero se indican seteando
este bit pero sin escribir ningún dato en la FIFO.
La máquina de estados de transmisión, transmite el payload de datos, el CRC16 y la señal
EOP antes de limpiar este bit.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXII
Transmit Command X Register (TXC1, TXC2, TXC3): Parte II
TOGGLE
Su función difiere si se usa operación en modo ISO (bit ISO en ‘1’ en el registro EPCx) o noISO (bit ISO en ‘0’).
Para operación non-ISO, especifica el PID utilizado cuando se transmite el paquete. Un ‘0’
genera un PID DATA0. Un ‘1’ genera un PID DATA1.
Para operación ISO, este bit junto con el LSB del frame counter (FNL0) trabajan como
máscara para el bit TX_EN bit para permitir el pre encolado de paquetes en números de
trama específicos.Se habilita la transmisión solo si el bit 0 del registro FNL está en igual
estado que TOGGLE. Si no se ha recibido un token IN durante la validez de esta condición,
se flushea el contenido de la FIFO con el siguiente SOF. Si el Endpoint se configuró en
modo ISO, el dato siempre se transfiere con un PID DATA0.
Este bit no es alterado por el hardware.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXII
Transmit Command X Register (TXC1, TXC2, TXC3): Parte III
FLUSH
Un ‘1’ en este bit flushea todos los datos de la correspondiente FIFO de transmisión,
resetea el Endpoint al estado Idle,y limpia los punteros de lectura y escritura de la FIFO. Si
el MAC está utilizando en ese momento la FIFO para transmitir datos, se flushea luego de
completar la transmisión. Luego de flushear los datos este bit es reseteado por hardware.
RFF
Refill FIFO. Al setearse el bit LAST automáticamente se salva a un buffer al Transmit Read
Pointer (TXRP). Cuando el bit RFF es ‘1’, el TXRP buffereado se recarga en el TXRP. Esto
permite repetir la última transacción en caso de no haberse recibido ACK desde el host. Si
en ese momento el MAC está utilizando la FIFO para transmitir, TXRP se recargará una vez
que la transmisión se complete. Luego de la recarga este bit es reseteado por hardware.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXII
Transmit Command X Register (TXC1, TXC2, TXC3): Parte IV
TFWL
Transmit FIFO Warning Limit. Estos bits
especifican
cuantos
bytes
pueden
transmitirse desde la FIFO respectiva antes
de que ocurra una condición de underrun.
Si el número de bytes remanentes en la
FIFO es igual o menor que el límite de
warning seleccionado, el bit TXWARN del
registro FWEV se pone en ‘1’. Para evitar
interrupciones por setear este bit mientras
la FIFO se está llenando antes de comenzar
una transmisión, TXWARN se pone en ‘1’
cuando está habilitada la transmisión
desde ese Endpoint (TX_ENx en ‘1’ en el
registro TXCx). Ver tabla adjunta.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXII
Transmit Command X Register (TXC1, TXC2, TXC3): Parte V
IGN_ISOMSK
Ignore ISO Mask. Este bit tiene efecto solo si el Endpoint está configurado como isócrono.
Si es ‘1’,se deshabilita el lock de números de frame específicos con la función del bit
TOGGLE. De este modo los datos se transmiten una vez recibido el siguiente token IN. Si es
‘0’, los datos se transmiten solo si FNL0 coincide con TOGGLE. Este bit se limpia en el Reset.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXIII
Transmit Data X Register (TXD1, TXD2, TXD3):
Cada FIFO de transmisión tiene un registro Transmit Data cuyos bits se definen a
continuación.
TXFD
Transmit FIFO Data Byte. El firmware solo debe escribir el payload de datos del
paquete. El PID y el CRC16 se insertan automáticamente en el stream de datos
a transmitir.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXIV
Receive Status X Register (RXS1, RXS2, RXS3): Parte I
Cada pipe de un Endpoint de recepción (2, 4 y 6) tiene un registro Receive Status con los
bits que se definan a continuación. Para permitir la recepción de un paquete SETUP luego
de recibirse un paquete OUT de longitud cero, el hardware contiene dos copias de este
registro. Una mantiene el estado de un paquete de longitud cero, y la otra el estado del
siguiente paquete SETUP con datos. Si un paquete nulo es seguido por un paquete SETUP,
la primer lectura de este registro entrega el estado del paqute nulo, mientras que la
segunda lectura entrega el estado del paquete SETUP.
RCOUNT
Receive Count. Indica la cuenta de bytes presengtes en la FIFO del Endpoint de
recepción. Si esta cuenta es mayor que 15, se entrega 15.
RX_LAST
Receive Last. Indica que se envió un ACK luego de una operación exitosa de recepción.
Este bit se limpia con la lectura de este registro.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXIV
Receive Status X Register (RXS1, RXS2, RXS3): Parte II
TOGGLE
La función de este bit difiere de acuerdo con el uso de operación ISO (bit ISO del registro
EPCx en ‘1’) o no-ISO (bit ISO en ‘0’).
Para operación no-ISO, un ‘0’ indica que el último paquete recibido correctamente tenía
PID DATA0. Un ‘1’ indica que ese paquete tenía PID DATA1.
Para operación ISO, este bit refleja el LSB del número de frame (FNL0) luego de recibirse un
paquete con éxito por este Endpoint.
Este bit se limpia leyendo el registro RXSx.
SETUP
Indica la recepción de un paquete SETUP. Se limpia cada vez que se lee este registro.
RX_ERR
Receive Error. Si es ‘1’, indica un error de medio, tal como bit-stuffing o CRC. Si es ‘1’, el
firmware deberá flushear la FIFO correspondiente.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXV
Receive Command X Register (RXC1, RXC2, RXC3): Parte I
Cada Endpoint de recepción (2, 4 y 6) tiene un registro Receive Command cuyos bits se
definen a continuación.
RX_EN
Receive Enable. No puede recibirse un paquete OUT luego de cada paquete de datos, o
cuando se retorna un handshake STALL en respuesta a un token OUT. Este bit debe ser ‘1’
para rehabilitar la recepción de datos. Los paquetes SETUP se pueden recibir siempre. En
el caso de paquetes SETUP back-to-back (para un Endpoint dado) en donde un paquete
SETUP válido se ha recibido sin otra intervención de tokens no-SETUP, la máquina de
estados de recepción descarta el nuevo paquete SETUP y retorna un handshake ACK. Si
por alguna otra razón, la máquina de estados de recepción no puede aceptar el
paquete SETUP, no se generará HANDSHAKE.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXV
Receive Command X Register (RXC1, RXC2, RXC3): Parte II
IGN_SETUP
Ignore SETUP Tokens. Si es ‘1’, el Endpoint ignora cualquier token SETUP dirigido a su
dirección configurada.
FLUSH
Si se lo pone a ‘1’ flusheas todos los datos de la FIFO de recepción correspondiente,
resetea el Endpoint al estado Idle, y resetea los punteros de lectura y escritura de la FIFO.
SI el MAC está usando en ese momento la FIFO para recibir datos, el flush se pospone
hasta completar la recepción.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXV
Receive Command X Register (RXC1, RXC2, RXC3): Parte III
RFWL1-0
Receive
FIFO
Warning
Limit.
Especifican cuantos bytes mas se
pueden recibir en la FIFO respectiva
antes de que ocurra una condición
de overrun. Si el número de bytes
vacíos remanentes en la FIFO es igual
o menor que el límite de warning
seleccionado, el bit RXWARN del
registro FWEV se setea a fín de indicar
esta condición.
Universal Serial Bus:
USBN9603 Modelo de Programación
Registros de Transferencia XXVI
Receive Data X Register (RXD1, RXD2, RXD3):
Cada una de las tres FIFOs de los Endpoint de Recepción tiene asociado un
registro Receive Data cuyos bits se definen a continuación.
RXFD
Receive FIFO Data Byte.
El firmware lee solamente el payload de datos del paquete . EL PID y el CRC16
son terminados opor la máquina de estados de recepción.
Universal Serial Bus:
USBN9603 Modelo de Programación
Mapa de Registros I
Universal Serial Bus:
USBN9603 Modelo de Programación
Mapa de Registros II
Universal Serial Bus:
USBN9603 Modelo de Programación
Mapa de Registros III
Universal Serial Bus:
USBN9603 Modelo de Programación
Mapa de Registros IV
Universal Serial Bus:
USBN9603 Modelo de Programación
Mapa de Registros V
Universal Serial Bus:
USBN9603 Modelo de Programación
Mapa de Registros VI
Descargar