En general, si le da a sus clientes la capacidad de flashear su dispositivo, querrá que no lo bloqueen.
Por lo tanto, la principal prioridad que proporciona es una conexión robusta y segura al dispositivo host. En mi experiencia, todos los chips funcionan bastante bien en los entornos urbanos y de laboratorio, que supongo que está apuntando.
Considere también el tiempo que requeriría para que el componente funcione correctamente: su recuento de producción es de cientos y agrega $ 2 a cada uno. ¿Esa "pérdida" vale más que su tiempo (o el del desarrollador)? Un chip bien documentado podría ser una mejor opción, incluso si cuesta más.
CH340
Sí, es realmente una mala idea, al menos si quieres Plug-and-Play. Para mí en Win 8.1, necesitaba instalar manualmente el controlador ( CH340SER.exe
) que tuve que descargar del sitio web del fabricante (chino) que no tenía (en ese momento) traducción al inglés.
Fue alojado en China, lo que podría ser un problema para las personas con mentalidad de seguridad y para aquellos sujetos a reglas organizativas y / o políticas. También fue superado como resultado de búsqueda por muchos sitios dudosos de descarga de controladores "gratuitos".
Si este fuera un equipo serio (opuesto a "solo" un Arduino), eso estaría elevando mis cejas hasta el techo. La instalación manual también puede ser muy molesta si sus clientes no tienen un equipo dedicado para flashear.
De lo contrario, este chip funcionó como se esperaba.
CP2102
No hay mucho que decir, salió de la caja y no trajo ningún problema. Probablemente sería mi elección para un diseño promedio.
FTDI
Tengo este en una placa de convertidor USB-serie independiente y funciona bien. Como escribió, es bastante costoso, pero creo que podría ser una mejor opción en entornos difíciles (por ejemplo, contactos corroídos en los conectores, también EMI). Podría darte una sensación cálida y difusa porque apoyas a los desarrolladores originales.
Otras ideas
ISP
Según la respuesta de @Chetan Bhargava, una opción sería tener un conector para el SPI y luego usar un convertidor de serie USB independiente.
Esto también requiere que usted proporcione un conector confiable y seguro para que el ISP lo conecte. Obviamente, puede ir barato con encabezados de clavijas aquí, pero si desea hacerlo bien (y / o no confía lo suficiente en sus clientes ), entonces este conector podría ser más costoso que el chip adicional y un conector USB estándar. Las conexiones en serie son extremadamente difíciles de depurar si no funcionan, a diferencia del USB donde el cliente al menos recibirá una notificación de que el dispositivo USB no funciona.
Si incluye un convertidor independiente con su placa, también tendrá que pagar el precio de la placa del convertidor. Supongo que esto no sería más barato que integrar el chip. Esto podría funcionar si cada cliente posee muchas de sus tarjetas, por lo que el convertidor podría reutilizarse, o si simplemente puede empujar los costos de adquirir el programador al lado del cliente.
Si esta opción es una posibilidad, en este punto, también existe el propio AVRISP de Atmel, que es una buena opción aquí en lugar del simple USB a serie, aunque un poco desactualizado. Creo que tiene un límite de aproximadamente 100 o 200 kbps donde los convertidores seriales USB modernos entran en el rango de megabits. Pero es muy robusto con respecto al (mal) uso.
Otra buena opción podría ser un conector TC2030. Solo requiere almohadillas en la PCB para trabajar, pero requiere algo de experiencia (debe mantenerlo en el lugar hasta que finalice la programación).
Interfaces de comunicación
Los microcontroladores modernos también vienen con una serie de otras interfaces de comunicación (Ethernet, WiFi, Bluetooth) y generalmente se pueden flashear con estas. Un ejemplo sería el ESP32 que tiene un costo de aproximadamente 6 USD y es un SoC con todos los componentes necesarios para una conexión wifi. También es compatible con Arduino (incluso puede usar el IDE) y tiene un conjunto de ejemplos muy completo, que incluye un cargador de arranque WiFi OTA. Solo necesitaría un ISP para la implementación inicial del gestor de arranque.
Si, como suena en su pregunta, su proyecto está casi terminado, probablemente ya no sea una opción.