¿Por qué ATMega328 no puede ejecutar SPI a velocidad de reloj completa?

3

Pregunta de dos partes:

  1. En hoja de datos en la página 168, la mejor frecuencia de SCK que se obtiene con SPI es \ $ \ dfrac {f_ {osc}} {2} \ $, ¿por qué no puede ser \ $ f_ {osc} \ $?

  2. También de la hoja de datos: "Cuando el SPI está configurado como esclavo, se garantiza que el SPI solo funciona en \ $ \ dfrac {f_ {osc}} {4} \ $ o inferior ". ¿Por qué?

pregunta Alex H

1 respuesta

2
  1. ... la mejor frecuencia de SCK que se obtiene en SPI es \ $ \ dfrac {f_ {osc}} {2} \ $, ¿por qué no puede ser \ $ f_ {osc} \ $?

¿Suponiendo que la electrónica cuesta más dinero (en tiempo de diseño, pruebas, costos de fabricación, área de chips, etc.), entonces esperaría que los diseñadores de Atmel intercambiaran costos reducidos por un rendimiento reducido? ¿Especialmente si hay comentarios de los clientes que no están dispuestos a pagar una prima de precio por SPI de mayor velocidad?

Un resultado técnico podría ser impulsado por el equilibrio entre costo y beneficio.

  1. También de la hoja de datos: "Cuando el SPI está configurado como esclavo, se garantiza que el SPI solo funciona en \ $ \ dfrac {f_ {osc}} {4} \ $ o inferior ".

Normalmente, una MCU se ejecuta desde su propia fuente de reloj; Es asíncrono con respecto a otras fuentes de reloj. Internamente, su periférico SPI es síncrono con su propio reloj.

Un SPI esclavo debe bloquearse en el reloj externo de un dispositivo asíncrono diferente. Una forma de hacer esto es "muestrear" el reloj externo de forma sincronizada con el reloj interno del ATmega328, dos o más veces para cada estado. Esto garantiza que el borde descendente y ascendente de la señal del reloj externo no se pueda confundir.

Si el esclavo se estuviera ejecutando en \ $ \ dfrac {f_ {osc}} {2} \ $, solo habría tiempo para tomar dos muestras del reloj externo (sincronizado con su propio reloj).

Así que eso implicaría un alto y otro bajo; El reloj maestro está en un estado desconocido entre muestras. Si los dos sistemas estuvieran a la deriva entre sí, la señal del reloj externo podría parecer jitter con duraciones largas y cortas para el esclavo, lo que hace que la sincronización sea frágil (lo que a nadie le gustaría tratar) o más compleja (costo adicional). Puede ser más difícil (más costoso) crear un sistema que pueda muestrear a una velocidad mayor que la del reloj del sistema para evitar esto.

Sin embargo, con dos o más máximos y dos o más mínimos, se mantendrán ampliamente sincronizados; El estado del reloj maestro se conoce definitivamente entre dos máximos y dos mínimos, por lo que para esos períodos no hay error de reloj entre el maestro y el esclavo.

Por lo tanto, una forma de 'saber' que su sincronización, por parte del tiempo, es ver el reloj externo en el mismo estado dos o más veces, por lo tanto, 4 veces más lento.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas