USB y PIC 18F2550 Desarrollo de proyectos en ASM

En esta ocación vengo para empezar a desarrollar entre todos una librería de USB usando el lenguaje ensamblador para la familia de microcontroladores PIC18FXX5X.
La razón de esto , es porque hay muchos usuarios que son expertos manejando ASM pero no saben utilizar bien el lenguaje C o lenguajes de alto nivel. También otra razón es que quiero que todos entendamos de una manera más profunda el funcionamiento del módulo USB de la familia microchip...y luego de esto poder "tratar" de implementar la comunicación USB en cualquier microcontrolador...
El desarrollo de este hilo se hará de forma parecida al https://www.forosdeelectronica.com/f24/control-dispositivos-traves-modulo-usb-pic18f2550-17458/ pero todos los desarrollos al igual que los diferentes programas de ejemplos se harán en ASM.

Para empezar a trabajar con el puerto USB del microcontrolador veremos todos los registros del micro asociados con este periférico , su funcionamiento y luego poco a poco comenzaremos a confeccionar los primeros programas.

Bueno para empezar veremos donde están hubicados los pines D- y D+ ( correspondientes a las señales de datos del puerto USB en el PIC18F2550 y en el PIC18F4550) , asi como también los otros pines que intervienen en su funcionamiento.

inmagen1.jpg
[/URL]

Breve descripción del funcionamiento del módulo USB:
La familia de dispositivos PIC18FX455/X550 contiene una interfaz serie compatible con el SIE (serial interface engine o máquina con comunicación serie en español) USB “full-speed” (2.0) y “de poca velocidad” (1.0) que permite la comunicación rápida entre cualquier dispositivo USB y el microcontrolador PIC®.
El SIE puede interconectarse directamente al USB, utilizando el transmisor - receptor interno, o puede conectarse a través un transmisor-receptor externo. El PIC tiene un regulador interno de 3,3V para alimentar el transmisor-receptor interno en aplicaciones de 5V.
Se han incluido algunas características especiales en el hardware para mejorar el funcionamiento. Se proporciona memoria de puerto dual en la memoria de datos del dispositivo (RAM del USB) para tener acceso directo a la memoria desde el núcleo del microcontrolador y desde el SIE. También se proporcionan unos buffer para que el programador elija libremente el uso de la memoria dentro del espacio de la RAM del USB. Existe un puerto paralelo para transmitir grandes cantidades de datos (SSP), para esto se ha proporcionado la ayuda de transferencia ininterrumpida de volúmenes de datos grandes, por ejemplo datos síncronos, a los buffer de memoria externos.

Bueno ahora veremos en detalle como se comunica la SIE con el exterior y las diferentes opciones a nivel conexionado del USB con el exterior:
inmagen2.jpg

Antes que nada veremos las notas a las referencias 2 y 3 que están dentro de la inmágen. Aclarar que estas notas son importantes para no cometer equivocaciones a la hora de programar el código que lo configura.
entonces:

Nota* 2:Las pull - ups externas son opcionales , pero si queremos usarlas hay que desactivar las propias resistencias de pull - up internas que tiene el microcontrolador. La activación o desactivación de estas resistencias se hace mediante el bit UPUEN...que se verá más adelante.
Nota* 3:El regulador de voltaje de 3.3v, nos provee de tensión al módulo USB en aplicaciones de 3.3v. En caso de tener una fuente externa de 3.3v conectada a Vusb, tenemos que desactivar el módulo interno del regulador.

Vemos en la inmágen los diferentes pines que según configuración de la SIE , podemos usar un transceptor externo, el fin de este tutorial no es el estudio de los módulos externos , por lo que se verá muy superficialmente.

Algo ¡ Muy importante ! que tenemos que ver es el puente bidireccional entre la SIE y el SSP...este puente nos va a permitir el transporte a alta velocidad de grandes flujos de datos en modo sincrono, por lo que se estudiará también en su momento.
Ver la siguiente inmágen en donde se muestra dicho puente:
inmagen3.jpg

Espero les sirva ...después sigo
bang.gif


Estado y control del módulo USB:
En total hay 22 registros para manejar las transacciones del USB. Los registros son:
• Registro de control del USB (UCON)
• Registro de configuración del USB (UCFG)
• Registro de estado de la transferencia del USB (USTAT)
• Registro de dirección de dispositivo USB (UADDR)
• Registros del número del frame (UFRMH: UFRML)
• Registros activadores de los Endpoints de 0 a 15 (UEPN)

El primer registro que estudiaremos será el UCON (registro de control del USB):
En la siguiente inmágen veremos como está constituido:
inmagen4.jpg

Este registro de control contiene los bits necesarios para determinar el comportamiento del bus durante las transferencias. El registro contiene los bits que gobiernan lo siguiente:

• Permiso del periférico principal del USB
• Reset de los punteros tipo ping-pong
• Control del modo al suspender
• Desactivar la transferencia de paquetes

El significado de los diferentes bits se muestra a continuación:

BIT7: Bit no implementado se lee como "0"
BIT6: El bit PPBRST, se encarga de controlar el estado del reset, cuando se utiliza el modo Doble - Buffering o modo Ping - Pong.Cuando se activa el bit PPBRST, todos los buffers Ping - Pong se fijan a los buffers intermedios. El bit PPBRST, tiene que borrarse por firmware.Este bit se ignora en los modos de buffer que no usen el buffer ping-pong.
BIT5: El bit SE0,se utiliza para indicar el estado del bus, si sólo se manda un cero.
Cuando se permite el módulo USB, este bit debe supervisarse para determinar si las líneas de datos han salido de una condición de single-ended cero (sólo se manda cero). Esto ayuda a distinguir el estado de ciclo inicial de la señal de reset del USB.
BIT4: El bit PKTDIS,es un flag que indica si el SIE ha inhabilitado la transmisión y la recepción de paquetes. Este lo bit activa el SIE cuando recibe un SETUP para permitir su procesamiento. Este bit no lo puede activar el microcontrolador, sólo borrar; al despejarlo el SIE continua la transmisión y/o recepción. Cualquier acontecimiento pendiente dentro del buffer intermedio todavía estará disponible, indicado dentro del registro USTAT en el buffer FIFO.
BIT3: El bit USBEN,la operación total del módulo USB se controla con este bit. Activar este bit setea el módulo y resetea todos los bits PPBI en el Buffer a ‘0’. Este bit también activa el regulador de tensión del chip y conecta las resistencias pull-up, si se permiten. Así, este bit puede utilizarse como una unión/separación al USB. Aunque se ignoran todos los estados y bits de control si este bit está borrado, el módulo necesita preconfigurarse antes de activar este bit.
BIT2: El bit RESUME,permite al periférico realizar un reinicio ejecutando la señal resume. Para generar un reinicio válido, por firmware se debe activar el RESUME durante 10ms y entonces borrar el bit.
BIT1: El bit SUSPND,coloca el módulo y soporte del circuito (es decir,regulador de tensión) en un modo de baja potencia. El reloj de entrada al SIE se desactiva. Este bit debe activarse por software dentro de la respuesta a una interrupción IDLEIF. Debe borrarse por firmware después de observar una interrupción ACTVIF. Cuando este bit está activo, sigue estando el dispositivo unido al bus pero las salidas del transmisor-receptor permanecen en reposo. La tensión en el pin VUSB puede variar dependiendo del valor de este bit. Activar este bit antes de un IDLEIF dará lugar a
comportamiento imprevisible del bus.
Nota:Cuando esté en el modo de suspensión, el bus del dispositivo USB se limita al 500μA de corriente. Ésta es la corriente completa cedida por el dispositivo PIC y su circuito de soporte. Hay que tener cuidado de ceder la corriente mínima cuando el dispositivo entre en el modo de suspensión.
BIT0: Bit no implementado se lee como "0"

Registro de configuración del USB:
Antes de comunicarse con el USB, se tiene que configurar el módulo del hardware interno y/o externo. La mayor parte de la configuración se realiza con el registro UCFG. El regulador de tensión del USB se maneja con la configuración de los registros.
El registro UFCG contiene la mayor parte de los bits que dirigen el comportamiento del módulo USB. Éstos incluyen:

• Velocidad del bus (“Alta velocidad” vs “Baja velocidad”)
• Permiso de las resistencias pull-up del chip
• Permiso del transmisor del chip
• Uso del buffer ping-pong

El registro UCFG también contiene dos bits que ayudan a probar el módulo, eliminando errores y certificaciones del USB. La salida de control de estos bits permite el monitor de estado y generación de patrones “de ojo”.
inmagen5.jpg

BIT 7: UTEYE: Bit de permiso del test patrón “de ojo” del USB.
1 = prueba del patrón “de ojo” permitido.
0 = prueba del patrón “de ojo” inhabilitado.

BIT 6: UOEMON: Bit de permiso del monitor OE del USB.
1 = señal del UOE* activa; indica los intervalos durante los cuales las líneas D+/D- están conduciendo.
0 = señales del UOE* inactivas.

BIT 4: UPUEN: Bit de permiso del pull-up del chip.
1 = Pull-up del chip permitido (pull-up en D+ con FSEN=1 o en D- con FSEN=0).
0 = Pull-up del chip desactivado.

BIT 3: UTRDIS: Bit inhabilitador del transmisor del chip
1 = Transmisor del chip inhabilitado; la interfaz digital del transmisor permitida.
0 = transmisor del chip activo.

BIT 2: FSEN: Bit de permiso del Full-Speed.
1 = dispositivo Full-speed: controla los flancos del transmisor; requiere un reloj de 48MHz.
0 = dispositivo de poca velocidad: controla los flancos del transmisor; requiere un reloj de 6MHz.

BIT 1-0 PPB1:pPB0: Bits de configuración de los buffer ping-pong.
11 = buffers ping-pong permitidos en los End-Points 1 a 15.
10 = buffers ping-pong permitidos en todos los End-Points.
01 = buffer ping-pong permitido en los End-Points de salida 0.
00 = buffers ping-pong inhabilitados.

Nota 1:
1: Si se activa UTRDIS, la señal UOE* estará activa independiente del ajuste del bit UOEMON.
2: Los bits UPUEN, UTRDIS y FSEN no deben cambiarse mientras el módulo USB esté permitido. Estos valores se deben preconfigurar antes de permitir el módulo.
3: Este bit solamente es válido cuando el transmisor del chip está activo (UTRDIS = 0); si no, se ignora.

Nota 2: La velocidad del USB, la transmisión y las pull-up deben configurase solamente durante la fase de activación del módulo. No se recomienda cambiar estos ajustes mientras que el módulo esté funcionando.

Viendo un poco el registro UCFG, en donde se encuentra el bit UTEYE, que es un bit de control de estado del USB que vigila los errores y es un generador de patrones.

Luego tenemos al bit UOEMON. Este bit nos muestra cuando las lineas D+ y D- están conduciendo y lo que estos valores representan según el siguiente cuadro:
inmagen6.jpg


Ahora tenemos 2 bit que trabajan de forma conjunta FSEN y UPUEN, según sea su configuración activarán o desactivarán las Resistencias Pull - Up internas del módulo USB o configuraran el módulo USB para trabajar a full - speed o slow - speed.

Veamos el circuito lógico que realiza estas acciones y una pequeña tabla donde se muestran las posibles configuraciones.

inmagen7.jpg


Luego tenemos UTRDIS, que habilita o deshabilita el transmisor del chip, en caso de que el bit sea 0 , activamos el transceptor y los pines C4 y C5 son usados para conectar el dispostivo USB.
En caso de que el bit sea seteado a 1 , el transceptor es desactivado y las lineas C4 y C5 quedan para poder ser usadas como entradas digitales unicamente.


Por último tenemos los bits de configuración BIT 1-0 PPB1:pPB0: que establecen la configuración del modo Ping - Pong.
 
Última edición por un moderador:
Permiso de la salida del monitor del USB:
El monitor del USB OE* proporciona información de la operación del SIE si está escuchando el bus o está conduciendo por el bus. Esto se permite por defecto al usar un transmisor externo o cuando UCFG<6>=1. La supervisión del USB OE* es útil para el eliminar errores del sistema inicial.
Permiso del test patrón “de ojo”:
Se genera una prueba automática al activar el bit UCFG<7> del patrón “de ojo”. La salida del patrón “de ojo” dependerá de los ajustes del módulo, significando que el usuario es el primer responsable de configurar los ajustes del reloj SIE, las resistencias pull-up y el modo transmisor. Además, el módulo tiene que estar permitido.
Una vez que se active UTEYE, el módulo emula un cambio a una recepción para transmitir el estado y comenzará a transmitir una secuencia de bits J-K-J-K (K-J-K-J en “velocidad completa”). La secuencia se repetirá indefinidamente mientras que el test patrón “de ojo” esté permitido.
Observar que este bit no se debe activar mientras que el módulo está conectado con un sistema real USB. Este modo de prueba se utiliza para ayudar con las verificaciones internas de las pruebas de certificación USB. Se utiliza para depurar los fallos obtenidos por el ruido de las señales que pueden afectar los flancos del sistema, uniones de impedancias mal hechas y proximidad a otros componentes. No comprueba correctamente la transición de un estado de recepción a uno de transmisión. Aunque el patrón de ojo no significa que se sustituya la prueba más compleja de certificación del USB, pero ayuda durante el primer test para eliminar errores del sistema.

Regulador de voltaje interno:
Los dispositivos PIC18FX455/X550 tienen un regulador incorporado 3,3V para proporcionar energía al transmisor interno y proporcionar una fuente para el pull-up interno y externo. Para que el regulador sea estable se necesita un condensador externo de 220nF (±20%). Cabe aclarar que se pueden colocar capacitores de mayor capacidad pero no es necesario ya que con 220nF (±20%) funciona correctamente.

Nota: La corriente de VUSB es suficiente para controlar un pull-up externo y el transmisor interno. El regulador se activa por defecto y puede inhabilitarse a través del bit de configuración VREGEN. Cuando está activo, la tensión es visible en el pin VUSB. Cuando el regulador está desactivado, se tiene que conectar una fuente de 3,3V al pin VUSB para alimentar el transmisor interno. Si el transmisor interno no se utiliza, VUSB tampoco se activa. VDD debe ser mayor que VUSB en cualquier momento, o igual con el regulador inhabilitado.
 
siempre quise saber si era posible USB en asm, aca esta la respuesta a mi pregunta, lo seguire muy de cerca, Moyano Jonathan, espero parender mucho con tu inciativa, desde ya muchas gracias
 
Yo opino lo mismo que Andrés salvo que ya e intentado bastante realizar la conexión USB en .asm pero con rotundos fracasos ya que solo e logrado que lo detecte la PC pero no e podido enviar y recibir ningún tipo de dato, y la verdad no se por que no me funciona pero estaré en seguimiento constante también para ver que se puede aportar y solucionar algunas dudas, por otra parte este es un excelente tema a tratar por que si no sabes programación de alto nivel (como es mi caso) el ensamblador es la opción para realizarlo gracias por el esfuerzo Moyano. Por cierto yo estoy manejando el pic 18F4550 pero creo que es muy similar al planteado aqui en el tema.

SALUDOS.
 
elemos13 como andas ....yo voy a mostrar más o menos la arquitectura de los 2 micros ..pero las pruebas las voy a hacer en un PIC18F2550 , que es el único que tengo a mano con USB en este momento.
 
Yo estoy con el 18F4550 nada mas por el momento solo tengo este para USB pero como lo comente solo e logrado que sea reconocido por la PC y no e logrado la trasferencia de datos de la PC al micro y viceversa me quedan bastantes dudas con los protocolos y los tan mencionados ping-pong buffers que pues no los entiendo todavía al 100% pero mas o menos se como funcionan eso y los firmware pues casi estoy empezando pero no estoy en cero. Adjunto los códigos que e venido desarrollado hasta el momento se que todavía falta mucho que trabajar en ellos pero de algo han de servir. Ambos solo inicializan al puerto USB, no me ha quedado claro y sigo descifrando las 4 tipos de transferencias centrándome un poco en la tranferencia bulk. Hasta descifrar otras pequeñas pero significativas dudas actualizo los .asm.

SALUDOS.
 

Adjuntos

  • PruebaUSB.txt
    1.1 KB · Visitas: 877
  • USBP.txt
    1.4 KB · Visitas: 509
elemos13 voy a estudiar tus programas pero te faltan muchas configuraciones y todas las definiciones de los buffers de datos en el programa....igual lo voy a revisar por que con esto del USB en ASM recién empiezo y tengo que aprender muchas cosas todavía.
 
Quería dar mis gracias a los administradores del foro por destacar este tema...perdón por no seguir subiendo info pero he tenido algunas materias que rendir estos días y no he tenido mucho tiempo...además de que cada tanto tengo que descansar un poco la mente y me desconecto del mundo...
sin nada mas para decir ..luego sigo con el tutorial.
 
Registro de estado del USB (USTAT):

El registro de estado del USB divulga el estado de las transacciones dentro del SIE. Cuando el SIE publica una interrupción de transferencia completa por el USB, hay que leer USTAT para determinar el estado de la transferencia. USTAT contiene el número del Endpoint de la transferencia, dirección y valor del puntero del buffer pingpong (si está utilizado).

Nota: Los datos en el registro de estado del USB son válidos solamente cuando el flag de interrupción TRNIF está activo.

El registro USTAT es realmente una ventana legible de los cuatro bytes de estado FIFO mantenida por el SIE. Permite al microcontrolador procesar una transferencia mientras que SIE procesa los Endpoints adicionales. Cuando el SIE termina con un buffer de lectura o escritura de datos, actualiza el registro USTAT. Si se realiza otra transferencia USB antes de realizar una interrupción de transacción completa, el SIEalmacenará el estado de la transferencia siguiente en el estado FIFO. Despejando el flag de la transferencia completa, TRNIF, provoca al SIE que avance el FIFO. Si los datos siguientes en el registro FIFO son válidos, el SIE inmediatamente reafirma la interrupción. Si no hay datos adicionales presentes, TRNIF seguirá borrado; los datos de USTATpuede que no sean correctos.

Nota: Si se recibe una petición de Endpoint mientras que el USTAT FIFO este lleno, el SIE publica automáticamente un NAK de nuevo al anfitrión.

En la siguiente figura mostramos la FIFO:
inmagen8.jpg


Ahora veremos que significan cada uno de los bits dentro del registro.
inmagen9.jpg


BIT 7: No implementado , legible como "0"

BIT 6 al 3: ENDP3:ENDP0: Bits de actividad del número codificado del último Endpoint (representa el número del BDT actualizado por la última transferencia del USB).
1111 = Endpoint 15
1110 = Endpoint 14
….
0001 = Endpoint 1
0000 = Endpoint 0

BIT2: DIR: Bit puntero de la última dirección BD.
1 = la última transacción era de entrada.
0 = la última transacción era de salida o de SETUP.
BIT1 PPBI: Bit puntero del puntero ping-pong BD*
1 = la transacción pasada estaba al banco Odd de BD.
0 = la transacción pasada estaba al banco Even de BD.
NOTA: Este bit es solamente válido para los Endpoints con registros Even y Odd BD disponibles.
 
Muy buen aporte, hace rato que estoy diseñando un robot de sumo y andaba con ganas de usar el usb del PIC18F2550 que es el corazon del robot, en cuanto empiece a probar el USB del pic subo ejemplos.

¿Otra cosita, que le parece si empezamos entre todo (o los que se quieran unir) un hilo sobre la programacion del USB atraves de Visual Basic 2005 o 2008?
 
CONTROL DE LOS ENDPOINTS DEL USB:
inmagen10.jpg

Las funciones de cada bit se dan a continuación:
BIT 7 - 5: No implementados, se leen como "0".

BIT 4 EPHSHK: Bit de permiso del protocolo de intercambio
1= Se permite el protocolo de intercambio del Endpoint.
0= Se inhabilita (utilizado con los Endpoints síncronos).

BIT 3 EPCONDIS: Bit bidireccional de control del Endpoint
Si EPOUTEN=1 y EPINEN=1:
1= Inhabilita las transferencias de control del Endpoint n; sólo permite las de entrada y las de salida.
0= Permite las transferencias de control (SETUP) y las de entrada y salida del Endpoint n.

BIT2 EPOUTEN: Bit de permiso de la salida del Endpoint.
1= La salida del Endpoint n permitida.
0= La salida del Endpoint n inhabilitada.

BIT 1 EPINEN: Bit de permiso de la entrada del Endpoint.
1= La entrada del Endpoint n permitida.
0= La entrada del Endpoint n inhabilitada.

BIT 0 EPSTALL: Bit de permiso de la parada del Endpoint*
1= Se puede parar el Endpoint n.
0= El Endpoint n no se puede parar.

Nota 1: Válido solamente si se permite el Endpoint n; si no, se ignora el bit.

Cada uno de los 16 Endpoints bidireccionales posibles tiene un registro de control independiente, UEPn (donde ‘n’ representa el número del Endpoint). Cada registro tiene los mismos bits de control.
El bit EPHSHK (UEPn<4>) controla el protocolo de intercambio de los Endpoints; activar este bit permite el protocolo de intercambio del USB. Típicamente, este bit se setea siempre excepto al usar Endpoints síncronos.
El bit EPCONDIS (UEPn<3>) se utiliza para permitir o inhabilitar las operaciones de control del USB (SETUP) con Endpoint. Borrar este bit permite las transacciones SETUP. Observar que los bits EPINEN y EPOUTEN se deben activar para permitir las transacciones de entrada y de salida. Para el Endpoint 0, este bit debe estar siempre borrado por que las especificaciones del USB identifican el Endpoint 0 como el Endpoint de control por defecto.
El bit EPOUTEN (UEPn<2>) se utiliza para permitir o para inhabilitar las transacciones de salida del anfitrión. Activar este bit permite transacciones de salida. Semejantemente, el bit EPINEN (UEPn<1>) permite o inhabilita las transacciones de
entrada al anfitrión.
El bit EPSTALL (UEPn<0>) se utiliza para indicar la condición STALL para el Endpoint. Si se ejecuta una STALL en un Endpoint particular, el bit EPSTALL para ese Endpoint lo activará el SIE. Este bit permanece hasta que se borre por software o hasta que ocurra un reset del SIE.

REGISTRO DE DIRECCIÓN DEL USB (UADDR):
El registro de dirección del USB contiene la única dirección del USB que el periférico descifra cuando está activo. UADDR se pone a 00h cuando recibe un reset del USB, indicado por URSTIF, o con un reset al microcontrolador. La dirección del USB la tiene que escribir el microcontrolador durante la fase de setup del USB como parte del firmware del USB de la ayuda de microchip.

REGISTROS DEL NÚMERO DEL FRAME DEL USB (UFRMH:UFRML):
Los registros del número del frame contienen los 11bits del número del frame.
El byte de orden inferior está en UFRML, mientras que los tres bits de orden superior permanecen en UFRMH. El par de registros se actualizan con el número de frame actual cuando recibe un SOF. Para el microcontrolador, estos registros son sólo de lectura. El registro del número del frame se utiliza sobre todo para transferencias síncronas.
 
Muy buen el aporte, están como para comérselos. Ya se pasará a PDF. Sigue así.

¿Realmente tienes intención de manejar el USB con ASM o es una broma?

Se que hay ejemplos desde la Web de microchip con ejemlos en C y ASM con USB 2.0.
 
una pregunta este pic funcionaria para leer datos de una memoria usb
tengo un proyecto que necesito leer un archivo de una memoria y transmitirlo via inalambrica osea que no necesito escribir nada en la memoria solo leer y transmitir,
estube buscando en la red y este dispositivo me serviria se llama vdrive2 que seria mi segunda opcion.
 
hasta donde se se puede solo hay que saber en que direccion de memoria esta la informacion, el tamaño y la velocidad a la que trabaja la memoria, y eso si HECHAR CODIGO
 
Meta, si me he metido con USB en ASM aunque antes de entender todo a un 100% voy a tener que leer mucho ....y en inglés....hay 2 cosas que tengo en estudio en este momento y son las especificaciones del USB 1.0 y 2.0 asi como el libro USB complete 4º edition....con eso voy a tener las ideas más claras sobre el puerto USB...y desde ahí estaría en condiciones como para decirte "se sobre el puerto USB" ...este hilo se va a tratar de como hacer una aplicación básica de control con el puerto USB para que los que no programan en C puedan comunicar sus proyectos con este puerto.

Mi objetivo a futuro...es conseguir crear un firmware para dotar de USB a micros con menores capacidades como los PIC16F877A o PIC16F84A , esto no lo digo como algo de ciencia ficción sino como algo posible y que ya se ha hecho.
 
Estás en forma. ;)

Te recuerdo que el PIC16F877A www.microchip.com no los fabrica, su sustituto es el 16F887 y es más barato y con mejores prestaciones. En cuanto al PIC16F84A, uno lo hizo con USB 1.1 y se pegó casi tres años, pero le funciona.

Me meteré con ASM y USB aunque tengo dificultades con el Inglés, jejeje. Voy a mirar ese libro a ver si entiendo algo. La verdad que deberían sacar libros USB en español.

El que m ellama la atención es este libro que lelvo detrás de él desde el 2008 y no lo he conseguido.

http://www.elektor.es/noticias/nuevo-libro-c-2008-y-net-para-ingenieros.979192.lynkx

Sigue así....
 
RAM DEL USB:
Los datos del USB se mueven entre el núcleo del microcontrolador y el SIE a través de una memoria
conocida como USB RAM. Ésta es una memoria de puerto dual especial que está mapeada en la memoria normal de datos en los bancos de 4 a 7 (400h a 7FFh) para un total de 1kbyte.
El banco 4 (400h con 4FFh) se utiliza específicamente en el control del buffer del Endpoint, mientras que los bancos de 5 a 7 están disponibles para los datos del USB. Dependiendo del tipo de buffer que se utilice, los 8 bytes del banco 4 pueden estar disponibles para utilizarlos como buffer del USB.
Aunque la RAM del USB está disponible en el microcontrolador como memoria de datos, las secciones que está modificando el SIE no las puede usar el microcontrolador. Se utiliza un mecanismo de semáforos para determinar el acceso a un buffer en un momento dado.

inmagen11.jpg


BUFFER DESCRIPTOR Y TABLA DEL BUFFER DESCRIPTOR:

Los registros del banco 4 se utilizan específicamente para el control del buffer del Endpoint en una estructura conocida como Tabla del Buffer descriptor (BDT). Esto proporciona un método flexible a los usuarios para construir y para controlar los Buffers
del Endpoint de varias longitudes y configuraciones. Los BDT se componen de los Buffers descriptores (BD) que se utilizan para definir y controlar los Buffers reales del Espacio de la RAM del USB. Cada BD, alternadamente, consiste en cuatro registros, donde n representa uno de los 64 BDs
posibles (gama de 0 a 63):

BDnSTAT: Registro de estado de BD
BDnCNT: Registro del byte de cuenta de BD
BDnADRL: Registro bajo de la dirección de BD
BDnADRH: Registro alto de la dirección de BD

BDs ocurre siempre como bloque de cuatro bytes en la secuencia,
BDnSTAT:BDnCNT:BDnADRL:BDnADRH. La dirección de BDnSTAT es siempre una compensación de (4n-1) (en hexadecimal) de 400h, con n como el número del Buffer descriptor.

Dependiendo de la configuración del buffering utilizada, hay 32, 33 ó 64 sistemas de Buffer descriptores. El BDT debe ser por lo menos 8 bytes de largo. Esto se debe a que la especificación del USB asigna que por mandato debe tener cada dispositivo el Endpoint0 configurado como entrada y salida en la disposición inicial. Dependiendo del Endpoint y de la configuración buffering, el BDT puede ser de 256 bytes de largo.
Aunque se puede creer que los buffers descriptores y los registros de dirección son registros de funciones especiales que no están mapeados en hardware, como lo están los SFRs convencionales en el banco 15 del microcontrolador. Si el Endpoint correspondiente a un BD particular no está permitido, sus registros no se utilizan. En vez de aparecer como direcciones no implementadas, aparecen como RAM disponible. Solamente cuando un Endpoint está permitido, activando el bit UEPn<1>, se consigue que la memoria de esas direcciones funcione como BD. Como los registros BD tienen cualquier dirección en la memoria de datos en un reset, también tienen un valor
indeterminado.
Un sistema particular de los registros BD son solamente válidos si el Endpoint correspondiente está permitido usando el registro UEPn. Todos los registros BD están disponibles en la RAM del USB. El BD para cada Endpoint debe configurarse antes de permitirlo.

Meta te digo que el inglés no es lo mio pero eso no me detiene..
 
Última edición:
hola respecto a mi comentario anterior
vi que la familia de pic 24f puede ser utilizado como host y descarge el microchip application libraries v2010-02-09
trae un ejemplo de como leer un *.txt de la memoria si quieren les paso el codigo para que lo vean y de paso me quiten algunas dudas
 
Hola soulmen ! Si el ejemplo está en ASM para PIC24f ponelo pero si está en C30 por favor ponelo en un hilo aparte ...por que este tema es solo para USB en ASM.
Un saludo !
 
Atrás
Arriba