¿Qué modo (CPOL, CPHA) debe usar un programador de un AVR ATMEGA324PA?

0

Estoy usando un analizador lógico para ver las líneas MOSI, MISO, SCK y RESET mientras se está flasheando un ATMEGA 324PA en el programador Atmel AVR MKII.

El reloj empieza alto, así que eso me hace pensar que debe ser CPOL = 1.

El centro de los bits de datos coincide con el flanco ascendente de SCK.

    -+       +-----
MOSI |       |   
     +-------+   

    -+   +---+   +-
SCK  |   ^   |   ^
     +---+   +---+

De enlace Creo que esto significa CPHA = 1.

¿Existe alguna documentación que confirme que CPOL = 1 y CPHA = 1 al programar el ATMEGA324PA? (He buscado en el PDF de 600 páginas y no he encontrado nada relacionado con el SPI para ISP).

    
pregunta fadedbee

1 respuesta

2

Según la hoja de datos:

  

Cuando se escriben datos en serie en el Atmel ATmega164A / 164PA / 324A / 324PA / 644A / 644PA / 1284 / 1284P, los datos de se sincronizan en el borde ascendente de SCK.   Al leer datos del ATmega164A / 164PA / 324A / 324PA / 644A / 644PA / 1284 / 1284P, los datos de se sincronizan en   el borde descendente de SCK. Consulte la Figura 27-12 para obtener detalles sobre la sincronización.

     

- ATMega324PA Datasheet sección 27.8.2

Y la figura 27-12 es:

MeparecequeCPOL=0/CPHA=0(ModoSPI0):

  

ParaCPHA=0,losdatossecapturanenelflancoascendentedelreloj(bajo→transiciónalta)ylosdatosseemitenenunbordedescendente(alto→transicióndelrelojbajo).

    

- Wikipedia

El modo 0 y el modo 3 parecen que deberían ser intercambiables, ya que ambos terminan sincronizando en el flanco ascendente y en el flanco descendente del reloj. Sin embargo, la diferencia se produce cuando comienza a realizar una transferencia: con el Modo 0 comienza con un flanco ascendente (entrada de reloj) y luego obtiene un borde descendente (salida de reloj), mientras que en el Modo 3 comienza con un borde descendente (salida de reloj) seguido por un flanco ascendente (clock in). Por lo tanto, aunque obtiene los mismos datos sincronizados con el chip, es posible que la lectura de los datos se vea compensada en un bit dependiendo de cómo realice la lectura.

De hecho, puede ser que el programador que tienes realmente esté trabajando en el Modo 0, pero en momentos de actividad cero coloca el reloj y los pines de datos en un estado de alta impedancia con resistencias pullup para permitir compartir el bus. Eso se vería como "reloj inactivo alto" cuando no lo está. Cuando comienza la programación, primero coloca los pines en el modo de salida y baja el reloj para iniciar la secuencia SPI con una señal de reloj BAJA (Modo 0).

    
respondido por el Majenko

Lea otras preguntas en las etiquetas