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

1

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 "active" el microcontrolador de destino a través de un bus SPI. (Recibo esta información de este documento )

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

    
pregunta Mahkoe

2 respuestas

3

Un AVR nuevo, si bien 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. Mientras que la línea RESET obviamente hace lo que cabría esperar para la mayoría 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 uno u otro. 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 voltea una línea de dirección para permitir que la CPU principal ejecute el código ISP desde una ROM (¿suena más sensible?), no Realmente importa desde el punto de vista del programador.

    
respondido por el Neil_UK
0

La pregunta igualmente importante es cómo reprogramar mi AVR cuando mi código de usuario cuelga el chip (poco después del reinicio) ... Es bueno tener una función que funciona sin importar lo que esté o no esté 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 restablecer no significa que toda la lógica deba restablecer todo el diseño. Mire JTAG por ejemplo (en los chips que lo tienen), tiende a tener su propio reinicio separado del reinicio del chip primario y es o puede ser un dominio de reinicio completamente separado del reinicio del chip primario. Restablecer es solo otra entrada que se usa como lo desean los diseñadores, no es una razón automática por la que cada parte de la lógica tenga que responder a ella.

Obviamente hay lógica y quizás algún código que no esté en ese dominio de restablecimiento (se encuentra esencialmente en el dominio de restablecimiento de energía y / o el restablecimiento invertido, cuando suelta el pin de restablecimiento, esta lógica puede reiniciarse y cuando afirmar el pin de reinicio que esta lógica puede liberar).

    
respondido por el old_timer

Lea otras preguntas en las etiquetas