Me gustaría conectar un dispositivo alimentado por batería a USB, sin requerir que los usuarios instalen controladores. Los requisitos de transferencia de datos son moderados, por lo que ~60kbytes/seg del modo HID estaría bien, pero no quiero ser mucho más lento que eso. Es probable que el procesador principal funcione con baterías, incluso cuando se conecta un cable USB, por lo que me gustaría que el procesador entre en reposo cada vez que la PC no se esté comunicando activamente.
He estado considerando usar un puente de USB a serie, pero los que he visto con la mayoría de los microcontroladores requieren que la velocidad de datos sea lo suficientemente lenta como para adaptarse al tiempo de respuesta de interrupción del puerto serie en el peor de los casos. Además, mientras que todos los que he visto permiten que un controlador indique si está listo para recibir datos, ninguno tiene ningún medio para pedirle a un controlador "no listo" que se prepare. Todos los chips de puente USB a SPI que he visto se limitan a actuar como maestros SPI, lo que empeoraría aún más las cosas para cualquier microcontrolador conectado a ellos.
Una interfaz USB que actuara como un esclavo SPI con un pin de interrupción parecería ideal, ya que podría comunicarse muy rápidamente cuando el procesador principal quisiera comunicarse, y podría decirle al procesador principal cuándo necesita atención, pero no perdería datos incluso si la PC debía enviarlo justo cuando el procesador principal quería ir a dormir (la interrupción desencadenaría una activación en aproximadamente 100 microsegundos, después de lo cual el controlador podría preguntar qué sucedió y luego recibir datos). A diferencia de los puentes USB a serie o USB a SPI maestro, que necesitan almacenamiento de configuración no volátil, el maestro SPI al que está conectado puede configurar un puente USB a esclavo SPI, lo que posiblemente reduzca los requisitos de silicio. .
Debería ser posible, al menos, usar un microcontrolador compatible con USB barato y programarlo para que actúe como un puente; si alguien ha hecho algo así y lo ha lanzado como código abierto, lo usaría antes que volver a implementarlo. Podría ser posible usar un UART en lugar de SPI si el dispositivo admitiera el protocolo de enlace y tuviera un pin que indicara cuándo tenía datos para enviar (incluso cuando se retuvo); tal enfoque podría ser necesario cuando se usa un microcontrolador como puente, ya que la mayoría de los microcontroladores son pésimos esclavos SPI. Por otro lado, si tal cosa está disponible como una parte comercial económica, parecería más fácil que tener que comprar chips de microcontrolador y luego programarlos. ¿Alguien tiene alguna recomendación?
Apéndice
Tal vez debería haber aclarado que estoy tratando de encontrar algo realmente barato y estoy evaluando las posibilidades de usar un controlador principal con USB integrado en lugar de usar algún tipo de puente. El uso de un puente puede permitir el uso de un procesador principal más económico que el que se necesitaría de otro modo, y puede simplificar el diseño de la fuente de alimentación (dado que el puente podría alimentarse por USB sin tener que asegurarse de que el procesador reciba alimentación del USB de +5 V en lugar del batería de +6V cuando ambos suministros estaban disponibles); incluso si bridge+CPU termina siendo uno o dos centavos más que una CPU principal compatible con USB, la separación del USB de las otras funciones de la CPU aún podría terminar siendo una "ganancia".
De los diseños que he construido hasta ahora, mi favorito usó un FT245 en combinación con un CPLD ubicado en una placa de teclado/pantalla/USB que se comunicaba con la placa principal a través de una interfaz estilo SPI de 3 hilos (dos cables desde la placa principal ; un cable yendo hacia atrás). Cuando el reloj y los datos estaban en estado inactivo, el CPLD usaría el retorno de datos para indicar cuándo la CPU principal necesitaba repararlo (porque se presionó un botón, los datos llegaron al USB, el USB se conectó/desconectó, etc.) .) La CPU principal podría entonces, en su tiempo libre, despertarse, preguntarle al CPLD qué quería exactamente y hacer lo que fuera necesario. Realmente me gustó ese estilo de comunicación, pero el FT245 y el CPLD juntos cuestan demasiado. Además, poder utilizar HID en lugar de CDC podría mejorar la experiencia del cliente final.
Conceptualmente, parecería que un chip que fue diseñado para servir como puente entre el USB y una CPU que fue diseñada para comunicarse con él podría ser eléctricamente más simple y económico que las interfaces de USB a otras cosas que he visto desde que salió. no necesitaría ningún tipo de almacenamiento de configuración no volátil y no requeriría muchas opciones de configuración, principalmente habilitaciones para los diversos puntos finales, posiblemente algunos tiempos de espera y una memoria para datos para alimentar al host en el punto final de control. La mayor parte de la otra lógica sería manejada por el procesador conectado. Desafortunadamente, no conozco ningún dispositivo de este tipo que esté realmente a la venta.
El convertidor FTDI USB a serie siguió mi MCU en modo esclavo SPI.
El firmware simplemente transferiría datos entre el SPI en el puerto a la línea Tx para enviarlos a través del FTDI al puerto USB.
De manera similar, el firmware almacenaría en caché los datos Rx del puerto USB/serie y los colocaría en el búfer SPI Tx a la espera de que se vuelvan a leer.
Dos IC simplemente solución para lograr USB a SPI esclavo.
Creo que, desde el punto de vista del costo y el espacio de la placa, un uC compatible con USB (por ejemplo, el ATTiny85) sería el mejor enfoque. Puede personalizarlo con cualquier protocolo que desee que vea su CPU principal, viene con unos cientos de bytes de RAM para almacenar en búfer mientras se procesa la interrupción de activación, y es un SOP-8 que cuesta literalmente unos centavos.
Este chip FTDI funciona como un esclavo I2C y parece ser relativamente barato:
http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT200XD.pdf
Y este funciona como un esclavo SPI:
http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT220X.pdf
Gerben
MarkU
Disclosure
: Trabajo en Maxim. Esta es una parte más antigua que creo que no estamos promocionando activamente, pero aún está disponible. Menciona el uso del controlador de dispositivo HID, consulte las notas de la aplicación 3936 y 3937). Espero que esto ayude.chris stratton
Dmitri Grigoriev
Arce
Super gato
Arce