Autor Tema: USB Step By Step, "A simple guide for beginers!"  (Leído 3322 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado al303576RELOADED

  • PIC10
  • *
  • Mensajes: 11
USB Step By Step, "A simple guide for beginers!"
« en: 09 de Noviembre de 2009, 22:34:12 »
Hola!
Aunque soy miembro del foro desde que estaba en la escuela, casi no posteo,... recuerdo el tiempo en que me construí mi primer programador para PICs... de microchip... jajaja pic16f84 era lo que más buscaba mi internet explorer... en fin... No posteaba porque sinceramente la gente que postea por acá estaba muy adelantada ahora 5 años después regreso con mas backup y creo que ahora si puedo postear algo decente. He estado trabajando con aplicaciones 802.15.4 (zigbee, mac, rf4ce, popnet, Smac, etc). Me emociona empezar un nuevo tópico por que veo, o por lo menos en mi búsqueda no encontré algo que me ayudara con el USB. Acá iré posteando mis avances con esta tarea de USB.
Para empezar este es el material que uso para esto.

*Board de freescale "DEMOJM" con el daughter card del jm60, ya que todo esté bien entendido y funcionando tratare de pasar la versión V1 de este micro.
*CodeWarrior 5.9 con sus respectivos parches para poder compilar y debuggear aplicaciones para el micro jm60 (por defecto no lo soporta es necesario bajar de la página de freescale los patchs).
*Todo lo pondré en C. evitare lo más posible el ASM. Para que sea lo más portable posible.
*Los documentos con los que cuento son las notas de aplicación de freescale además del spec de USB que pueden bajar de la página de freescale y de USB y claro el manual de referencia del jm60.

Bueno, Espero que este post nos ayude a llevar todo esto a buen puerto.  Y gracias a todos los que indirectamente me ayudaron sin enterarse a terminar un montón de proyectos en la escuela.




************************************************

Aunque en mi experiencia lo más complicado no está en la programación del micrcontrolador en si (recuerden que usare C    ), si no comprender que es lo que se ocupa poner en código para que esto funcione. Eh encontrado en la red muchos tutoriales en los que se evita la escritura del Driver, regularmente se opta por opciones como configurar tu microcontrolador como HID para usar el driver que ya está en tu sistema operativo. Acá yo empezare por otro lado, empezare por usar el Driver "WinUsb" que viene en Windows vista el cual se puede usar para jugar con un dispositivo USB  (jm60) que no pertenece a ninguna clase definida por USB.org, Es más bien usado por Devices definidos por el usuario y claro no escribimos el driver solo usamos la Api.

*************************************************

Bueno, Empecemos por el principio, algo de información de USB se encuentra en esta liga. http://www.beyondlogic.org/usbnutshell/usb5.htm#DeviceDescriptors

Para empezar, es necesario saber que para que el sistema operativo comience a intercambiar información con nuestro dispositivo necesita conocerlo, esto se hace mediante un proceso conocido como enumeración, que no es más que el host asignándole una dirección a nuestro dispositivo, por defecto todos los dispositivos USB tienen la dirección "CERO", recordemos que USB es un bus por lo tanto todos los dispositivos comparten el mismo acceso al medio y el host para poder enviar datos o comandos a un dispositivo necesita direccionarlo. Una vez que el Host ha asignado una dirección a nuestro dispositivo se establece una línea de comunicación en ingles suelen decirle a esto "Pipe".

Bueno y como funciona eso de la Enumeración?
Por el lado de la PC el OS se encarga de mandar todas la preguntas a nuestro dispositivo, así que solo nos ocuparemos de las estructuras que enviaremos hacia la PC desde el firmware.
Cabe mencionar que la comunicación inicial se relaza mediante el Endpoint cero, todos los dispositivos deben de tener un EndPoint Cero  que es bidireccional, esto es, tiene un endpoint 0 de entrada y un endpoint de salida, ya que este endpoint es el encargado de que la PC pueda conocer al dispositivo que se está conectando al USB bus.

Como es esto en pasos en Windows:

1.- El host detecta que se ha conectado un dispositivo por medio de las resistencias de Pull-Ups en los hilos de datos. El host espera por lo menos 100ms para permitir que el dispositivo sea conectado completamente y para que la fuente de poder se estabilice en el dispositivo que se acaba de conectar.
2.- El host fuerza  (no se si se correcto decir eso) un reset en el dispositivo para ponerlo en su estado por defecto (defaul state).
3.- Windows pide los primeros 64 bytes del Device Descripto. Mediante un GetDescriptor a al dirección Cero de bus, que es por la dirección por defecto del todos los dispositivos que no han pasado por un proceso de enumeración.
4.- Algo interesante es que aunque en el paso anterior Windows pide 64 bytes al recibir los primeros ocho manda un reset al dispositivo.
5.- Ahora el host manda un SetAddress command para poner al dispositivo en el estado Addrressed (ahora ya tiene dirección asignada el dispositivo).
6.- El host ahora requiere los 18 bytes del Device Descriptor, la diferencia es que ahora manda la petición al dispositivo ya enumerado.  Los campos están descritos en "http://www.beyondlogic.org/usbnutshell/usb5.htm#ConfigurationDescriptors" además en Universal Serial Bus Specification, Revision 2.0 April 27 2000 pagina 262, que pueden descargar de acá "http://www.usb.org/developers".


7.- El host pide los 9 bytes del ConfiguratoinDescriptor.

...continuara.....
« Última modificación: 11 de Noviembre de 2009, 14:56:20 por al303576RELOADED »

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: USB Step By Step, "A simple guide for beginers!"
« Respuesta #1 en: 10 de Noviembre de 2009, 11:18:55 »
buena empresa, esperemos poder ayudarte en las cosas que necesites, estare pendiente de este hilo, saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado al303576RELOADED

  • PIC10
  • *
  • Mensajes: 11
Re: USB Step By Step, "A simple guide for beginers!"
« Respuesta #2 en: 10 de Noviembre de 2009, 20:42:38 »
buena empresa, esperemos poder ayudarte en las cosas que necesites, estare pendiente de este hilo, saludos

Ok, gracias comentarios y sugerencia are wellcome! El post del inicio lo estare editando y las dudas y sugerencias las estare contestando en los post, para de esa forma creo sea mas facil de leer.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: USB Step By Step, "A simple guide for beginers!"
« Respuesta #3 en: 14 de Noviembre de 2009, 08:38:33 »
Muy buen post, de verdad que muchas gracias, esto  nos sirve a todos inclusive para los que aun están indecisos con probar los Freescale....espero ancioso los sigueintes pasos.
Mil gracias y mis respetos.

Saludos

Desconectado al303576RELOADED

  • PIC10
  • *
  • Mensajes: 11
Re: USB Step By Step, "A simple guide for beginers!"
« Respuesta #4 en: 24 de Noviembre de 2009, 00:01:28 »
Muy buen post, de verdad que muchas gracias, esto  nos sirve a todos inclusive para los que aun están indecisos con probar los Freescale....espero ancioso los sigueintes pasos.
Mil gracias y mis respetos.

Saludos

Por el momento, en estos dias estoy algo ocupado en el trabajo y la escuela (es fin de semestre)... pero en cuanto tenga un fin de semana libre continuare. Tengo un par de documentos que he estado leyendo y creo me seran de gran ayuda para documentar mejor el post. :)