¿Cómo puede un ISP programar un AVR sobre SPI si no hay código en el dispositivo?

Estoy tratando de entender cómo un ISP puede escribir código de máquina en la memoria de un microcontrolador.

En el caso de los microcontroladores AVR (como el ATMega), puede usar un programador especial en circuito que "activará" el microcontrolador de destino a través de un bus SPI. (Obtengo esta información de este documento )

Lo que me pregunto es esto: si tuviera un AVR nuevo sin programas anteriores escritos en él, ¿cómo podría "escuchar" el bus SPI? ¿No es necesario que haya un programa ejecutándose?

La máquina de estado del ISP es una pieza de hardware dentro de cada controlador AVR. Es simple y no necesita la CPU para funcionar.
No estoy seguro de cómo se implementa en AVR, pero podría ser una pieza adicional de hardware como dice @Janka, o incluso podría ser una pequeña pieza de código permanente que ejecuta la función ISP. Pero desde la perspectiva del usuario, funciona incluso cuando el chip está totalmente en blanco.

Respuestas (2)

Un AVR nuevo, aunque no tiene un código programado en el espacio del usuario, no significa que no tenga capacidad.

Notará que la línea RESET se usa como parte del protocolo ISP. Si bien la línea RESET obviamente hace lo que esperaría de la mayor parte del chip, también habilita el mecanismo que maneja el ISP. También delinea claramente la operación 'normal' de la operación del ISP, usted está en una u otra. También notará que hay un apretón de manos de 'bytes mágicos' para que el programador establezca que este mecanismo está funcionando.

Si este mecanismo adicional hace todo el trabajo para manejar el protocolo y controlar los buses de memoria, o si simplemente cambia una línea de dirección para permitir que la CPU principal ejecute el código ISP desde una ROM (¿suena más sensato?), en realidad no importa desde el punto de vista del programador.

La pregunta igualmente importante es cómo reprogramo mi AVR cuando mi código de usuario bloquea el chip (poco después del reinicio)... Es bueno tener una función que funcione sin importar lo que esté o no programado.

Como ya se mencionó, es un caso de lógica pura o alguna lógica y código en una rom utilizada para implementar esta función. Bastante simple para la lógica pura.

El hecho de que un pin esté etiquetado como reinicio no significa que todo el diseño deba reiniciarse según esa lógica. Mire JTAG, por ejemplo (en los chips que lo tienen), tiende a tener su propio restablecimiento separado del restablecimiento del chip principal y es o puede ser un dominio de restablecimiento completamente separado del restablecimiento del chip principal. Restablecer es solo otra entrada que se usa como lo desean los diseñadores, sin una razón automática por la que cada parte de la lógica tenga que responder a ella.

Obviamente, hay una lógica y tal vez algún código que no está en ese dominio de reinicio (está esencialmente en el dominio de reinicio de encendido y/o reinicio invertido, cuando suelta el pin de reinicio, esta lógica en sí misma puede reiniciarse y cuando afirma el reinicio pin esta lógica puede liberarse).

¿Cómo arranca el chip sin código para arrancar el chip (pregunta del huevo y la gallina)? Existe una lógica que opera sin el uso de un procesador o código, que puede inicializar las puertas en la CPU y en otros lugares, y es capaz de leer la memoria flash e iniciar la CPU con esos datos. No todas las máquinas de estado requieren software.