Autor Tema: USB y PIC 18F2550 Desarrollo de proyectos en ASM  (Leído 23917 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
USB y PIC 18F2550 Desarrollo de proyectos en ASM
« en: 16 de Febrero de 2010, 16:04:57 »
Hola a todos   :-/

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 ( por software) en cualquier microcontrolador que no disponga de este módulo de forma física. ;-)

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.


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:

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:



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:



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”.




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.

Bueno espero que les interese el tema ....después sigo  :-/

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #1 en: 16 de Febrero de 2010, 16:07:55 »
Que tipo de modulo USB externo puede conectarse alli ??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #2 en: 16 de Febrero de 2010, 16:17:23 »
y por ejemplo el USBN960X , lo podés utilizar como módulo de comunicaciones externo y conectarlo de la siguiente forma:


Código: ASM
  1. USBN_INT       PIN_B0                                      
  2. USBN_RS        PIN_C1                                      
  3. USBN_CS        PIN_C2                                      
  4. USBN_RD        PIN_C3                                      
  5. USBN_WR        PIN_C4                                    
  6. USBN_A0        PIN_C5


Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #3 en: 16 de Febrero de 2010, 16:19:52 »
PD: Mi idea después de finalizar con todo el tutorial que se va a desarrollar es que tengamos la capacidad de desarrollar el USB por software usando PIC's de menos recursos.....como lo hizo una vez un usuario utilizando un PIC16F84A  8)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #4 en: 16 de Febrero de 2010, 16:54:47 »
En la pagina de National no lo recomiendan en nuevos diseños, incluso en la hoja de datos dice que es Obsoleto !! :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #5 en: 16 de Febrero de 2010, 17:13:51 »
PD: Mi idea después de finalizar con todo el tutorial que se va a desarrollar es que tengamos la capacidad de desarrollar el USB por software usando PIC's de menos recursos.....como lo hizo una vez un usuario utilizando un PIC16F84A  8)
pa mi que el individuo que se curró un usb con un 16f84, en asm :shock: no era de este planeta :D pero, por qué no?? yo me apunto al hilo pa ver si aprendo algo :mrgreen:

un saludo

Desconectado Felixls

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 300
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #6 en: 16 de Febrero de 2010, 18:32:29 »
PD: Mi idea después de finalizar con todo el tutorial que se va a desarrollar es que tengamos la capacidad de desarrollar el USB por software usando PIC's de menos recursos.....como lo hizo una vez un usuario utilizando un PIC16F84A  8)
El desarrollo de implementar la comunicación usb directo desde un 16f84a y un 16f628 es de Ángel Baños Jiménez:

http://www.telefonica.net/web2/hidlcd/



Quien además luego puso a comercializar un grabador por usb usando ese chip (el 628).



Según comenta le llevó 3 años de desarrollo en sus tiempos libres.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #7 en: 16 de Febrero de 2010, 18:43:16 »
Si bien la implementación por software del protocolo USB resulta interesante y retadora considero que los resultados son poco fructíferos.

El ejemplo de Angel Baños es excelente, un gran logro, pero utiliza la clase de dispositivos de interfaz humana en USB 1.1. Esto tiene 2 cuestiones:

1. La clase HID define que en low speed (1.5Mbps) los reportes se envían a razón de 100 por segundo (10ms por reporte mínimo).
2. El tamaño de cada reporte es de 8 bytes.

Haciendo cuentas se tiene una velocidad de 800 bytes por segundo, evidentemente rebasable por una conexión RS232 típica.

Contar con 800 bytes por segundo es útil para aplicaciones de bajas prestaciones como teclados o mouses, pero para otras transferencias se vuelve un cuello de botella.

Estoy seguro que hacer USB por software es un buen reto y que vale la pena hacerlo para aprender más sobre el protocolo USB, pero como uso práctico queda rebasado por el USB por hardware que los PIC ya traen, con velocidades prácticas de hasta 8Mbps en Full-Speed.

Johnattan, te deseo éxito en tu proeza.  :mrgreen:

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #8 en: 16 de Febrero de 2010, 20:59:29 »
MGLSOFT:Disculpá fué el único que se me ocurrió en este momento de un ejemplo de C de CCS, si encuentro otro te lo hago saber a la brevedad.
alogic.on:Hola como estás , el señor que desarrollo la comunicación USB en un PIC16F84A no era de otro planeta sino alguien que le puso mucho empeño al tema...yo espero llegar a un resultado similar...es una cuestión de superación personal nomás  ;-)
Felixls:Hola como estás felixls...ese señor debe saber todo sobre USB  :-/ yo no espero saberlo todo pero tengo todo para aprender y voy a hacer lo mejor que pueda  ;-)
migsantiago:Como estás...el desarrollo de esta idea es por un fin puramente educativo.....ahora los PIC de la serie PIC18FXX50 tienen mucha más capacidad pero como dije es por el solo hecho de aprender...
Mi curiosidad se generó principalmente a razón de que vi una página donde implementan el protocolo USB 100% por software en micros AVR de pocos recursos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #9 en: 16 de Febrero de 2010, 21:28:59 »
migsantiago:Como estás...el desarrollo de esta idea es por un fin puramente educativo.....ahora los PIC de la serie PIC18FXX50 tienen mucha más capacidad pero como dije es por el solo hecho de aprender...
Mi curiosidad se generó principalmente a razón de que vi una página donde implementan el protocolo USB 100% por software en micros AVR de pocos recursos.

Sí, estoy seguro de que aprenderás mucho.

El problema es que los AVRs que implementan USB por software son de al menos 12MIPS y se programan en C mientras que los PIC propuestos corren hasta 5MIPS y deben programarse en ASM para sacar el máximo provecho en cuanto a tiempos.

El hacer overclocking del pic16 a 6MIPS es peligroso.

Hay PIC18 que corren a 12MIPS pero curiosamente esos son los que traen USB integrado por hardware.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #10 en: 16 de Febrero de 2010, 23:08:40 »
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:

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.

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.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #11 en: 17 de Febrero de 2010, 13:25:04 »
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.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #12 en: 17 de Febrero de 2010, 13:44:59 »
Hola!
Este PDF de la Universidad de Salamanca te vendrá como anillo al dedo para lo que estas explicando:

http://slalen.iespana.es/pics/datos/datasheet.pdf

 ;-)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #13 en: 17 de Febrero de 2010, 14:05:16 »
Hola ariel como estás

Justamente desde ahí me estaba guiando para la parte de explicación de los registros....después cuando tenga bien en claro o por lo menos entienda como funcionan los registros relacionados con el USB, entonces voy a empezar a estudiar la forma de escribir una librería de control en ASM para desarrollar programas de control.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: USB y PIC 18F2550 Desarrollo de proyectos en ASM
« Respuesta #14 en: 17 de Febrero de 2010, 14:11:24 »
Ups...llegue tarde :)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert