¿Por qué necesitamos programadores de hardware?

Uso un Boarduino y una placa de pan de 30 filas para programar mi ATtiny. Cargué un boceto no demasiado complicado llamado ArduinoISP (incluido por defecto ahora en el IDE de Arduino), y de repente tengo un programador en funcionamiento. Atmel vende un buen programador por entre $30 y $40, y hay muchos kits para hacer otros más baratos.

Estaba muy feliz una vez que obtuve mi programador en funcionamiento e hice que el diminuto parpadeé algunos LED. Sin embargo, ahora mi pobre boarduino está atascado en tareas de programador.

Por lo que puedo decir, este programador mantiene presionado el botón de reinicio y luego transmite y recibe en los pines MOSI y MISO. Creo que el SCK no se usa o al menos no se necesita. (Se necesita SCK de acuerdo con la hoja de datos de ATtiny, mi programador no funciona sin él y no puedo encontrar el lugar donde pensé que leí que no era necesario).

¿Por qué necesito un programador de hardware para transmitir en serie? Quiero decir, supongamos que estoy dispuesto a mantener presionado el botón de reinicio con el dedo en lugar de usar un IC. Todo lo que queda es envío y recepción en serie, por lo que todo lo que necesito son tres cables GND, RXD y TXD. Diablos, si tengo la línea "DTR" o lo que sea, incluso puedes mantener presionado el botón de reinicio con el cable serial.

¿Por qué existen todas estas soluciones de hardware que también requieren un software sofisticado (como AVRdude o AVR studio, o lo que sea)?

Quiero decir que pude entender un pequeño cable USB que presentaba el microcontrolador como un dispositivo de almacenamiento masivo y le permitía arrastrar archivos binarios para programar (como esta placa de desarrollo ARM ). Solo hardware, utilizando controladores de software estándar.

También pude entender una solución solo de software (módulo que conecta los cables del USB al chip, usando algo como el chip FTDI para simplificar lo que pasa por los cables). Todo el sofisticado protocolo de programación sería manejado por software en la computadora, y el hardware sería solo algunos cables.

¿Por qué tenemos software y hardware (complicados) involucrados? Quiero decir, por lo que puedo decir, programar microcontroladores es bastante fácil, pero cuando recién me metía en esto, estaba realmente preocupado acerca de cómo iba a comprar un chip de mouser o digikey sin pagarle a un gurú para programar un gestor de arranque. para mi.

Estoy seguro de que hay una buena razón (no es que haya escrito el software o comenzado a fabricar el programador USB de arrastrar y soltar), pero como recién llegado, no tengo idea de qué se trata.

¿Tu programador de hardware casero permite la depuración? Puede que esté bien programando solo, pero necesitaría un programador de hardware si quisiera hacer una depuración en el chip (establecer puntos de interrupción en el código y detener la ejecución cuando llegue a ese punto) ya que esa operación podría hacer cosas divertidas con la línea de reinicio.
Algo que te pueda divertir, hackaday.com/2013/05/10/…

Respuestas (4)

Tienes razón, programar AVR es bastante fácil. Es solo un protocolo personalizado implementado sobre SPI, que se ejecuta a bajo voltaje. Se necesita SCK.

Sin embargo, la programación de PIC más antiguos (y la programación AVR no ISP) requiere altos voltajes y un protocolo personalizado diferente. Esto requiere un programador de hardware especial.

Otros dispositivos son más complejos. La mayoría de los microcontroladores ARM deben programarse a través de JTAG, aquí la memoria se escribe directamente y se le indica al procesador que escriba en la memoria flash. Una vez más, cada dispositivo es diferente.

¿Alguna idea de por qué son mucho más complejos? La forma AVR (baja tensión, protocolo estándar) parece mucho más sensata que requerir un programador personalizado (como este tipo con una necesidad de programador 8051/8052: ¡se necesita ayuda, representante disponible! electronics.stackexchange.com/questions/4104 )
Realmente no hay nada especial o costoso en los programadores PIC; muchos diseños están disponibles en línea, y la mayoría de los PIC nuevos pueden programarse con bajo voltaje.
A los fabricantes de circuitos integrados realmente no les importa cuán complejo es algo para que lo usen los aficionados. Siempre que se pueda utilizar en la producción de grandes cantidades, todo depende del costo.
La programación de alto voltaje estuvo allí primero, era la forma de programar EPROM borrables por UV en los años ochenta (y microcontroladores que contenían tales EPROM).
Se corrigió el reclamo de SCK. Me gusta la idea de que solo se necesita SPI, pero dado que las computadoras no tienen un puerto SPI (¡y diablos, el cable FTDI ya tiene un chip de $ 4 !) Podríamos derrochar en un microcontrolador de $ 2. El argumento de carga y depuración de JTAG me ha vendido los beneficios de una placa de desarrollo en general, y creo que endolith tiene un buen punto de que a nadie le importa en qué gasto mis $20; a los fabricantes les importa en qué gastarán su presupuesto los verdaderos ingenieros (y sus empleadores).

Investigué mucho y me estoy preparando para comenzar a jugar con AVR, pero en realidad nunca usé uno, por lo que esto puede estar mal, pero:

La mayoría de los programadores baratos no admitirán la programación de alto voltaje AVR. Es necesario si el controlador está configurado para no ser programable usando bits de fusibles o si de alguna manera cometió algunos errores graves y necesita restablecerlo a los valores predeterminados, etc.

Los programadores de bajo voltaje como AVRISP mkII[1] o USBtinyISP[2] se pueden usar para configurar fusibles con avrdude u otros programadores, pero no pueden guardar un chip AVR que no se puede iniciar o cuya línea de reinicio se convirtió en un GPIO. Necesitas un programador de alto voltaje para ese tipo de cosas. [1] mouser.com/search/… [2] ladyada.net/make/usbtinyisp
@blalor A la luz de esta información, editaré mi respuesta.
Vi algunas instrucciones sobre cómo hacer un programador de alto voltaje (y la hoja de datos del chip parece tener instrucciones bastante detalladas sobre cómo diseñar uno), pero estoy esperando hasta que bloquee uno de mis chips para probarlo. Mis osciladores llegarán mañana, ¡así que pronto estaré quemando fusibles y tentando al hada de los ladrillos!
Es notable que avrdude verifique dos veces los bits de su fusible para evitar este problema. Un problema un poco más común es configurar el chip en un reloj externo.

La mayoría de los programadores de AVR baratos solo sincronizan interfaces seriales con una línea de reinicio. Puede usar un FT232 para hacer bitbang de la interfaz periférica en serie (SPI). El FT232 está diseñado para serial asíncrono, no sincronizado, por lo que todo se hace en software.

Simplemente podría cargar un cargador de arranque como arduino que le permitiría cargar código a través de la interfaz serial asíncrona usando el ft232 en modo normal o cualquier interfaz serial asíncrona usando convertidores de nivel según sea necesario. Simplemente no olvide usar el cargador de arranque adecuado para la velocidad de su reloj y configurar los bytes de fusible correctamente.

Históricamente, muchos dispositivos programables han requerido que se programen utilizando secuencias de señales cronometradas con relativa precisión. En muchos casos, si uno solo quisiera programar un tipo particular de dispositivo, el hardware requerido habría sido bastante simple, pero dado que diferentes dispositivos tenían diferentes requisitos, construir un programador de propósito más general era algo más difícil.

Hoy en día, probablemente se podría programar más del 50% de los dispositivos programables usando nada más que un cable de E/S USB y software de PC, pero los programadores de "hardware" aún tienen una ventaja de velocidad considerable. Para que la PC reaccione a una señal recibida por un dispositivo USB y envíe una respuesta, generalmente toma un mínimo de 1 a 2 milisegundos. Si una secuencia de programación requiere preguntar repetidamente a un dispositivo cuándo está listo para el siguiente fragmento de datos y luego enviarlo, usar un cable de E/S simple agregaría uno o dos milisegundos adicionales al tiempo requerido para manejar cada fragmento. Dependiendo de la naturaleza del dispositivo en cuestión, eso podría aumentar el tiempo total requerido para la programación en un orden de magnitud en comparación con un programador al que se le podría decir, mientras espera que un dispositivo esté listo, qué debe hacer una vez que lo esté.

Personalmente, me gusta el enfoque de que los dispositivos equipados con flash se envíen de fábrica con un cargador de arranque en la memoria que se puede usar con un mínimo de hardware de programación. Si el dispositivo es compatible con la programación flash bajo el control del software, este enfoque puede simplificar la producción sin agregar nada al costo del silicio más allá del tiempo marginal muy pequeño requerido para tener el programa de dispositivo de prueba de fábrica en el cargador de arranque después de haber hecho todo lo demás. .