Transmitir ASCII 'A' a través del protocolo SPI

5

Estoy trabajando en un proyecto que implica conectar directamente desde la toma TRS de un iPhone a un puerto SPI en un microcontrolador.

Así que el iPhone es el maestro y el microcontrolador es el esclavo

Entonces, digamos que el canal de altavoz izquierdo del iPhone es responsable de generar señales de reloj

Ahora, ¿cómo transmito, por ejemplo, un solo byte ASCII 'A' del maestro al esclavo?

Puedo ver que cada vez que aumenta el límite del reloj (digamos que pasa a cero), tanto el maestro como el esclavo leen un nuevo bit, independientemente del estado del respectivo MISO / MOSI

¿Pero cómo byte-align?

El binario para 'A' es 0100 0001

¿Cómo distinguimos ese primer 0 del silencio que precedió?

Me parece que un protocolo sensato sería usar 0xFF o algo como un Sentinel de inicio, y que el siguiente byte dicte el número de bytes (entre 1 y 256) en el paquete que viene.

Y luego estos bytes se envían uno tras otro, pueden ir seguidos de un byte de paridad.

¿Tal vez cada byte tendría un bit de paridad ...?

Tan pronto como llegue este 'paquete', el decodificador podría comenzar a buscar otro Sentinel de inicio.

Así es como me gustaría diseñar SPI. así que estoy tratando de encontrar alguna documentación que me diga cómo se hace realmente.

Pero estoy realmente frustrado al rebotar en Google / Wikipedia / IRC

¿Hay alguien por ahí que entienda este protocolo, y no me importaría darme un ejemplo de uso realmente simple? Enviando el único carácter "A" a través de SPI

    
pregunta P i

2 respuestas

5

Los dispositivos SPI también suelen tener una señal de selección de chip (a veces denominada sincronización de cuadros) que se utiliza para multiplexar dispositivos en un solo bus SPI. Por lo tanto, a menudo se hace referencia a SPI como una interfaz de 3 ó 4 hilos (MISO, MOSI, CS y CLK; para dispositivos unidireccionales, se puede omitir MISO o MOSI). Normalmente se supone que una trama comienza en el primer bit después de que se valida la señal de selección de chip, pero cada dispositivo tiene su propio protocolo. Deberá cumplir con lo que el otro lado del enlace espera.

    
respondido por el Jason R
3

SPI transmite datos en los bordes del reloj. Si el borde ascendente o descendente está determinado por lo que hace el envío y / o la recepción. Como ese es el caso, deberías poder usar tus pulsos de reloj como tu marco.

La mayoría de los dispositivos tendrán MISO, MOSI, CLK y CS. En modo esclavo, puede conectar a tierra el CS y siempre hacer que el microcontrolador "escuche" para cualquier transmisión SPI. El iPhone es el maestro y controla el MOSI y el CLK. No debería importar lo que haga el iPhone con la salida MOSI cuando el reloj no esté funcionando, ya que el microcontrolador esclavo no leerá los datos. Al final, todo lo que importa es que los datos de salida de MOSI son válidos en los bordes correctos del reloj.

No especificó qué microcontrolador está usando, pero Atmel tiene una buena nota de aplicación sobre su implementación de SPI en su serie AVR . Puede considerar e interrumpir un esquema basado en una encuesta para los datos SPI.

    
respondido por el bjthom

Lea otras preguntas en las etiquetas