Mi opinión al respecto.
¿Existe alguna placa de evaluación/devolución a un precio razonable para los chips USB?
Supongo que con "chip USB" te refieres a un microcontrolador programable con periférico USB.
Sí, mucho. Pero si quieres mantenerte centrado, empieza a mirar desde donde estás ahora. Y con esto quiero decir: ¿cuánto y, sobre todo, con qué plataformas integradas estás familiarizado? Algunas sugerencias:
- Arduino Leonardo
- Arduino Cero
- Arduino Due
- ST STM32F4Discovery
- ST Nucleo (hay un par de docenas de placas - algunas con USB, Ethernet, etc.)
- MicroChip PIC32 USB starter Kit II
- Mbed
¿Puede recomendar alguna ficha específica?
Personalmente he utilizado el USB en los dispositivos de Microchip, y estoy bastante satisfecho con ellos. El PIC24FJ64GB004 es mi favorito. Es más rápido que la media de los microcontroladores de 8 bits, tiene mucha memoria, E/S periféricas reutilizables, puede ejecutar el USB desde el oscilador interno, el TQFP-44 es razonablemente fácil de soldar (¡el chip -002 en DIP-28 para el breadboarding!), y su implementación del USB tiene 32 puntos finales. No todos los microcontroladores tienen 32 puntos finales disponibles. Es suficiente para soportar cualquier descriptor USB que quieras (por ejemplo, crear dispositivos USB compuestos).
Sin embargo, no tengas miedo de mirar otros dispositivos. Yo estoy contento con ese chip en particular porque he invertido algo de tiempo en familiarizarme con él. Hace lo que necesito que haga, especialmente teniendo en cuenta el tamaño/rendimiento/coste/etc.
Me gustaría aprender más sobre usb, he investigado un poco y estoy un poco confundido - ¿escribir mis propios controladores usb para mi dispositivo sería demasiado loco?
El USB es un protocolo duro. Así que un buen enfoque es verificar primero que el hardware está bien, y luego empezar a buscar sus propias implementaciones.
Los "drivers" tienen dos caras. El host necesita un controlador, y el dispositivo también. La mayoría de los hosts USB soportan controladores de dispositivos estándar como HID, CDC y Mass Storage. Estos son "específicos de la clase". Si quieres algo personalizado tienes que ir a "vendor specific" que es mucho más complicado. En ese caso necesitas definir tus propios comandos de configuración, arreglos de los puntos finales, qué datos se llenan en los buffers de los puntos finales, etc.
En el PC se podría utilizar libusb para cargar un controlador "genérico" e interactuar con los puntos finales en "tierra de usuarios". Esto mitiga la necesidad de un controlador de "tierra del kernel". Sin embargo, esto puede estar bien para una máquina de desarrollador, pero no para una máquina de cliente.
En cuanto al microcontrolador, yo recomendaría encarecidamente el uso de un framework. USB es difícil porque muchos sistemas operativos dan poca o ninguna información de depuración acerca de por qué un dispositivo no se puede enumerar. La depuración de USB se puede hacer, pero o bien requiere costosos sniffers de hardware USB o sólo funciona cuando se pasa la etapa de enumeración. Además, la depuración en el dispositivo puede interrumpir la comunicación (por ejemplo, si se alcanza un breakpoint) y terminar la sesión USB.
Por eso recomendaría utilizar lo que ya funciona. No intentes correr cuando no puedes caminar.
¿Hay alguien más que haya hecho algo similar que pueda compartir su experiencia?
Yo mismo he hecho algunos proyectos de USB. Como he dicho dar pequeños pasos.
1) Diseña tu PCB siguiendo la hoja de datos del chip que has elegido. También me aseguro de que hay una aplicación de demostración disponible para el chip que he elegido.
2) Piensa en lo que quieres hacer en el USB.
¿Quieres crear un ratón/teclado/joystick (por ejemplo, un periférico de entrada de juego personalizado)? Probablemente sea necesario un dispositivo de clase HID. ¿Quiere cargar un nuevo firmware y/o ajustes en su dispositivo? Probablemente un dispositivo de almacenamiento masivo. ¿Quiere tener necesidades personalizadas? En mi opinión, quedan dos opciones:
a) Simular un puerto serie con el CDC-ACM. Luego construye un protocolo RS232 clásico sobre este.
b) Escriba su controlador de host y cliente completamente personalizado. Esto no es trivial.
3) Si quieres vender dispositivos USB, también necesitas un VID/PID. Estos no son gratuitos, al contrario está fuera del alcance de casi todos los aficionados e incluso de algunas pequeñas empresas. Alternativamente, algunos fabricantes (como Microchip) permiten un uso limitado de su VID para aplicaciones de clientes.
¿Debería abandonar mi plan por completo y adquirir algún tipo de solución estándar?
No estoy de acuerdo en que los chips "FTDI" no sean profesionales. Son una forma diferente de hacer las cosas. Conseguir que tu primer proyecto USB funcione te llevará tiempo. A mí me llevó un par de tardes trastear. Sin embargo, si no lo haces, te perderás la experiencia y mantendrás esta barrera (mental).