¿Por qué necesitamos programadores de hardware?

22

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

Estaba muy feliz una vez que conseguí mi programador de trabajo e hice que el pequeño parpadeara con algunos leds. Sin embargo, ahora mi pobre boarduino está atrapado en el deber del 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 es necesario. (Se necesita SCK de acuerdo con la hoja de datos de ATtiny, mi programador no funciona sin él y no puedo encontrar el lugar que pensé que leí que no era necesario).

¿Por qué necesito un programador de hardware para simplemente 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 enviar y recibir 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 serie.

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

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

También pude entender una solución única 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 tanto software (hardware) (complicado) involucrado? Quiero decir, por lo que puedo decir, programar microcontroladores es bastante fácil, pero cuando me estaba metiendo en esto, realmente me preocupaba 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 como si hubiera escrito el software o empezado a fabricar el programador USB de arrastrar y soltar), pero como recién llegado, no tengo idea de qué es.

Jack Schmidt
fuente
¿Su programador de hardware casero permite la depuración? Es posible que solo esté bien programando, pero necesitaría un programador de hardware si desea realizar la depuración en 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.
Joel B
1
Algo con lo que puede divertirse, hackaday.com/2013/05/10/…
binarysmacker

Respuestas:

18

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 el procesador recibe instrucciones de escribir en la memoria flash. De nuevo, cada dispositivo es diferente.

Toby Jaffey
fuente
¿Alguna idea de por qué son mucho más complejos? La forma AVR (bajo voltaje, 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 )
Kevin Vermeer
2
Realmente no hay nada especial o costoso sobre los programadores de PIC; muchos diseños están disponibles en línea, y la mayoría de los nuevos PIC se pueden programar con bajo voltaje.
akohlsmith
44
Los fabricantes de circuitos integrados no se preocupan realmente por lo complejo que es el uso de los aficionados. Siempre que se pueda utilizar en la producción en grandes cantidades, de lo contrario se trata de costos.
Endolito
2
La programación de alto voltaje estaba allí primero, era la forma de programar EPROMs borrables de UV en los años ochenta (y microcontroladores que contenían tales EPROMs).
Starblue
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 !) También podríamos derrochar en un microcontrolador de $ 2. El argumento de carga y depuración de JTAG me ha convencido de los beneficios de una placa de desarrollo en general, y creo que el endolito tiene un buen punto de que a nadie le importa en lo que gasto mis $ 20; A los fabricantes les importa en qué gastarán su presupuesto los verdaderos ingenieros (y sus empleadores).
Jack Schmidt
5

Investigué mucho y me estoy preparando para comenzar a jugar con AVR, pero en realidad nunca usé uno, así 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 que no sea programable utilizando bits de fusible o si de alguna manera cometió algunos errores graves y necesita restablecerlo a los valores predeterminados, etc.

AndrejaKo
fuente
2
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 ha podido arrancar o que su 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
@blalor A la luz de esta información, editaré mi respuesta.
AndrejaKo
Vi algunas instrucciones sobre cómo hacer un programador de alto voltaje (y la hoja de datos para el chip parece tener instrucciones bastante detalladas sobre el diseño de uno), pero estoy esperando hasta que bloquee uno de mis chips hasta que lo pruebe. ¡Mis osciladores llegarán mañana, así que pronto estaré quemando fusibles y tentando al hada de los ladrillos!
Jack Schmidt
Es notable que avrdude verifique dos veces sus bits de fusible para evitar este problema. Un problema un poco más común es configurar el chip en un reloj externo.
Yann Vernier
4

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

Simplemente puede cargar un gestor de arranque como arduino que le permitiría cargar el 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 olvides usar el gestor de arranque adecuado para la velocidad de tu reloj y configurar los bytes del fusible correctamente.


fuente
1

Históricamente, muchos dispositivos programables han requerido que se programen utilizando secuencias de señales temporizadas de forma relativamente precisa. 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 más general fue algo más difícil.

Hoy en día, uno probablemente podría programar más del 50% de los dispositivos programables utilizando 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-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, el uso de un simple cable de E / S 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 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 admite programación flash bajo control de software, este enfoque puede simplificar la producción sin agregar nada al costo del silicio más allá del muy pequeño tiempo marginal requerido para tener el programa de prueba de fábrica en el cargador de arranque después de haber hecho todo lo demás .

Super gato
fuente