PIC32 actuando como USB CDC HOST para FTDI

Estoy pirateando un diseño que ya está hecho con un PIC32MX para adjuntar un CHIP FTDI al diseño real. Este FTDI debería servir para hacer un "puente" entre USB y UART en la forma de hacer que este lector de huellas dactilares funcione correctamente. No estoy usando ninguna comunicación UART porque no tengo más puertos UART disponibles. Esa es la única razón por la que estoy tratando de hacer funcionar el módulo USB.

El pin VUSB está conectado al VCC_3V3 pero en la hoja de datos se mencionan dos datos opuestos. En la página 41 dicen "Alimentación del transceptor interno USB. Si no se usa el módulo USB, este pin debe conectarse a VDD". y en la página 45 se menciona "Nota 1: Si se usa el módulo USB, este pin debe estar conectado a VDD". ¿Qué tengo que hacer?

La alimentación al FTDI la da el regulador de 5V y no estoy usando (ignorando) el pin 11 de VBUSON ni el pin 34 de VBUS y tengo el FTDI conectado a los pines USB 36 y 37 para D+ y D-.

Con respecto a que estoy usando el pin 11 para resetear el módulo Bluetooth que tengo en el diseño, ¿sientes que realmente necesito ese pin para que el USB funcione correctamente?

¿Qué debo hacer con el pin 34 (VBUS)?

Para que todo el sistema funcione correctamente debo configurar el USB como CDC Host, ¿no?

Puede resolver su problema de falta de UART con UART externos SC16IS740 o max3107. Estos se conectan en el bus SPI o I2C y serán mucho más fáciles que escribir un controlador serial FTDI.

Respuestas (2)

No necesita usar USB en absoluto. La interfaz para el escáner es en realidad niveles UART TTL. La demostración de SparkFun usa un cable FTDI porque necesitaban conectarse a una PC. Simplemente puede cruzar los pines TX/RX de uno de los UART en su PIC32 con los cables TX/RX del escáner.

Como no tiene ningún UART disponible, puede reemplazar cualquiera de los UART de hardware existentes con una solución de software bit-banged utilizando dos pines de repuesto. Eso parecería ser más fácil que lidiar con todas las cosas de USB.

Editar para reflejar los comentarios:

Aquí hay un código para un UART de software en C. Es para el PIC16, pero debería poder modificarlo para el PIC32. El código está controlado por interrupciones, por lo que suponiendo que no le queden pines de interrupción (INTx), puede usar cualquier pin que esté marcado como Notificación de cambio de entrada (CNxx) que generará una interrupción cuando el pin cambie de estado.

No tengo más puertos UART disponibles.
@scuba Modifiqué mi respuesta para sugerir el uso de un UART de software en los cables ID y VBUSON, ya que no tiene otros pines de E/S disponibles.
Además de esto, intente buscar en Google dma uart para pic32.
Encontré un código de demostración en las notas de la aplicación Microchip como ese, pero no estaría usando un UART de software. Un DMA solo estaría funcionando con un UART de hardware.
@tcrosley Seguiré su consejo, pero en lugar de ID y VBUSON, usaré ID y RG2. Solo porque estoy usando el pin VBUSON para restablecer el módulo btooth.
@scuba Resulta que el USBID, también conocido como RF3, no es una interrupción en el pin de notificación de cambio, que necesita para obtener una interrupción en el borde descendente de la línea TX proveniente del escáner (el código al que me vinculé supone que tiene un interrumpir). Por lo tanto, querrá intercambiar ese pin con uno de sus otros pines de entrada que ya está usando y que no necesita la función de interrupción en la notificación de cambio. Pregunté en el Foro de Microchip por qué el pin VBUSON, que es solo de salida, tendría la función de interrupción en el cambio, ya que tendría sentido solo si fuera una entrada, pero no obtuve respuesta.
Este es el [diseño] real ( imgur.com/QUUeaKS ). No veo ningún puerto disponible donde pueda obtener una interrupción en el borde descendente.
@scuba Tienes muchos pines marcados con una X roja. Normalmente eso significa que no se usan, pero supongo que van a alguna parte ya que dices que no tienes pines. ¿No son ninguna de esas entradas digitales? ¿Y SW1 (que supongo que es un interruptor) se usa como una interrupción (INT1)?
Sí, me quedé sin pines de manera que no tengo ningún otro puerto UART disponible. Tiene razón, no estoy usando esos pines marcados con una X roja, pero parece que no hay interrupción de borde descendente allí, ¿me equivoco? Ese SW1 se está usando como interrupción, sí.
@scuba Cualquier pin que esté marcado con un CNxx es un pin de notificación de cambio de entrada. Hay 22 de ellos (por ejemplo, RD7 sin usar, que es CN16). Todos estos pueden generar una interrupción cuando el bit cambia de estado. Es algo así como tener 22 líneas de interrupción más. Consulte la página 194 de la hoja de datos a la que se vinculó para obtener más información. Son muy útiles.
Hum, ahora lo que tengo que hacer es encontrar una manera de soldar un cable muy delgado directamente al pin del PIC. Será algo complicado de hacer, pero puede resolver mi problema. @tcrosley gracias señor. te convertiste en una valiosa ayuda.
Si elige un pin que está en una esquina, como RB0 (pin 16, CN2), es mucho más fácil. Use alambre para envolver alambre de calibre 30. Si accidentalmente crea un puente de soldadura en el pin 15, no es un problema ya que tampoco lo está usando.
Sí, ya seleccioné el RB0 y el RB2 (solo por una cuestión de diseño). Pero ahora no tengo esa envoltura de alambre de calibre 30, así que intentaré encontrar alguna en una tienda lo antes posible.
@scuba RadioShack vende algunos. ALAMBRE PARA ENVOLTURA DE 50FT 30AWG (Rojo) N.° de catálogo: 2780501
@tcrosley, ¿puede ayudarme, señor? electronics.stackexchange.com/questions/211319/…

Leí esa información en el pin VUSB (35) como "conectar el pin VUSB a VDD, ya sea que esté usando el módulo USB o no".
De un vistazo rápido a las notas en la página 174, diría que no puede usar el pin Vbuson (11) como GPIO en el modo de host USB.
Probablemente debería conectar Vbus (34) a su conector USB pin-1 para detectar el suministro USB de 5V allí. Sin embargo, no recuerdo si eso es necesario en el modo host.

¿Por qué conectar VBUS si no se está utilizando el módulo USB? El chip FTDI debe tener su propia entrada de detección de bus y debe encargarse de todo el arbitraje del bus. El PIC32 solo debe tratar con UART.
@AdamLawrence Creo que está usando el módulo USB de PIC en modo Host/OTG para hablar con su dispositivo FTDI USB-Serial. En una pregunta anterior, indicó que solo tenía USB disponible para hablar con un dispositivo serial y que esperaba usar el FTDI USB-Serial para hacerlo.
@brhans, tienes razón y probablemente tengas razón. Estaba planeando usarlo como host USB CDC.
@scuba ¿Eh? ¿Está planeando comunicarse entre PIC y FTDI a través de USB, pero en serie al exterior? Los PIC tienen buenos UART... Suena realmente incómodo
No es incómodo. Estoy usando un diseño anterior que se hizo hace mucho tiempo. Y como mencionó @brhans, no tengo más UART disponibles. Solo el puerto USB.
No creo que funcione. Los FTDI, AFAIK, requieren algún controlador especial en el host que cargue algún firmware al momento de la conexión. No es un dispositivo CDC.
@EugeneSh. Definitivamente es una forma al revés de hacer las cosas, pero supongo que podría portar un controlador de Linux a PIC.
Ok, en lugar de usar el PIC como host CDC, intentaré implementarlo como modo USB Host/OTG. Entonces, @brhans, si conecto el VBUS directamente al FTDI_VCC (que es el cable rojo del cable USB), ¿siente que le estoy dando suficiente energía para que la huella digital funcione correctamente? Planeaba conectar los 5V del regulador directamente al cable rojo.
@Armandas Bueno, en este caso se va a convertir en un trabajo de tiempo completo.
@scuba ¿Cómo te ayudará? ¿Va a implementar el controlador FTDI?
Señor, solo estoy siguiendo recomendaciones. Estaba planeando seguir el consejo de @brhans. No tengo idea si funcionará o no. ¿Necesito implementar un controlador de Linux para PIC para este caso? ¿En realidad?
No es un controlador de Linux, pero imita su funcionalidad. FTDI está utilizando un protocolo especial sobre USB que debe implementarse. Yo diría que es mejor pensar en otras soluciones. Como el software UART o algo así ...
Un UART de software probablemente sería mucho más rápido de implementar usando RB5 (pin 11) como TX y RG2 o RG3 (pin 37/36) como RX...