SPI: ¿Ti o modo Motorola?

Estoy programando un Cortex M3 bare-metal para hablar con SPI Flash. Uno de los bits de configuración de un registro de control SPI es FRF(formato de trama). Puede configurarse en modo SPI Motorola (0) o en modo SPI TI (1). (Consulte la página 695 del manual de referencia de ARM aquí ).

La hoja de datos del SPI Flash (disponible aquí ) no indica qué modo debo usar.

¿Cuáles son los dos modos diferentes y cuál debo usar para el chip Flash específico que estoy usando?

Respuestas (3)

El modo Motorola y TI se refieren a diferentes configuraciones de polaridad de reloj (CPOL) y fase de reloj (CPHA). La polaridad del reloj dicta si una señal alta o baja marca un reloj, la fase le dice al dispositivo cuándo muestrear la línea de datos.

De acuerdo con su hoja de datos ARM, puede configurar CPOL y CPHA para su controlador SPI.

Su chip flash (consulte el capítulo 3) admite {CPOL=0, CPHA=0} o {CPOL=1, CPHA=1}.

Para obtener más información, http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Clock_polarity_and_phase

¡Ajá, gracias! Entonces, ¿cuál es cuál? ¿ {CPOL=0, CPHA=0}Motorola o TI?
No puedo recordar, o encontrar una fuente autorizada.
Cada vez que he determinado que @Randomblue ha sido con un visor, me resulta mucho más fácil medir que buscar.
@Kortuk: Por "alcance" te refieres a "osciloscopio", ¿verdad? Eso suena bastante emocionante, pero nunca antes había hecho algo así. ¿Podría señalar un tutorial de algún tipo que explique cómo hacer esto?
@Randomblue, esto es algo que sé hacer muy bien, pero que solo podría explicarse fácilmente si no tienes ninguna experiencia en persona. Mide la línea Clk y de datos y escribe algo sobre SPI observando cuándo cambian los datos y el reloj.
@Randomblue Un analizador lógico le mostraría las señales. electronics.stackexchange.com/questions/2036/…
Lo siento, pero esa respuesta es incorrecta. El modo TI no tiene que ver con la polaridad. Para obtener información más detallada, vaya aquí: infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0194g/…

Una breve mirada a la hoja de datos de ARM sugeriría que la principal diferencia entre el modo TI y el modo Motorola tiene que ver con el manejo de una señal de salida llamada SSPFSSOUT que muchos dispositivos simplemente no necesitan. Se supone que esta señal tiene un pulso alto entre bytes para indicar qué bit de cada byte debe considerarse el primero. En el modo TI, sube durante la transmisión del último bit de un byte, mientras que en el modo Motorola sube y luego baja entre bytes. El chip flash quiere una señal de selección de chip que se mantenga baja durante toda la duración de una transacción, por lo que una salida que sube entre bytes no será útil.

Esperaría que incluso cuando no se usa SSPFSSOUT, el modo Motorola haría que los datos fueran más fáciles de leer en un osciloscopio (ya que habría una pausa después de cada byte), pero el modo TI podría ser más rápido (ya que no perdería tiempo pausando entre bytes). Sin embargo, lo importante es asegurarse de que la secuencia de señales que genera el controlador cumpla con los requisitos establecidos en la hoja de datos de los periféricos.

Agregando a la respuesta de supercat, ¡Consulte estas imágenes! Los tomé del manual de referencia de una placa de descubrimiento STM32F411E. A continuación se muestra una comunicación basada en el modo SPI-TI: Modo SPI-TI . La siguiente imagen muestra la comunicación basada en SPI-Motorola (lo llamo el tipo regular, pero ser específico es mejor): modo SPI-Motorola . Olvídese de la polaridad del reloj y la fase del reloj, mire el diagrama de tiempo del pin NSS.

Parece que los procesadores Motorola (anteriores) tenían algo llamado modo big endian en el que si el maestro SPI se comunica con un dispositivo esclavo que tiene registros little endian, debe convertir los datos recibidos del esclavo a big endian y debe convertir datos de big endian a little endian mientras envía datos al esclavo. La otra cosa es sobre la fase y la polaridad del reloj y si los datos están enganchados al borde ascendente o descendente de un ciclo de reloj. Consultar el manual del procesador para ver sus registros ayudaría.