pic24 Ciclo de bus SPI: ¿8 relojes o 16?

0

Tengo un acelerómetro conectado a un controlador de la familia PIC24FJ a través de SPI. Estoy intentando la operación más simple: leer un registro de identificación cuyo contenido nunca cambia, para confirmar que puedo hacer que funcione. Si bien el problema podría deberse a una de muchas cosas, estoy trabajando con el periférico SPI por primera vez y con el código generado por MCC.

Lo que me pregunto es que, en una transferencia de 8 bits, ¿genera 8 relojes para enviar la solicitud de registro, seguidos de 8 relojes más para leer la respuesta? ¿O tengo que obtener el byte de respuesta por separado? He examinado tanto la hoja de datos del procesador como la hoja de datos de la familia, y ninguno parece mostrar esto. Hay muchas imágenes de formas de onda para transmisiones de audio y operaciones de esclavo, pero no pude encontrar algo tan simple. Hay una ilustración de una transferencia de 8 bits, pero ninguna sugerencia sobre lo que sucede después de que salen los primeros 8 bits.

En cuanto al periférico, le pones algo al registro de transmisión, esperas a que esté listo y recoges los resultados del registro de recepción. Ya que no explican lo que sucede, eso lo hace mágico. Cuando leo el código fuente, termino en el mismo lugar. Rellene el registro, obtenga los resultados del otro registro. Podría buscar otros procesadores, pero no puedo estar seguro de que el periférico funcione de la misma manera.

Todavía no le he puesto un alcance, porque es un chip BGA, y el PIC es un lanzamiento bastante atractivo. Puede llegar a eso de todos modos, pero existe la posibilidad de que alguien pueda ayudar si de hecho hay algo que no entiendo sobre el proceso de transferencia.

. . .

Pregunta de bonificación: ¿Qué datos registra cuando está tratando de leer un byte del chip? En este caso, escribir todos los ceros sería una solicitud de escritura a un registro al que no debe acceder. Así que tiene que haber una mejor respuesta.

    
pregunta gbarry

1 respuesta

0

He estado usando el SPI en 18F usando el código generado por MCC, así que estoy familiarizado con tu dificultad.

SPI es más como intercambiar valores de registro entre maestro y esclavo; La comunicación es siempre de dos maneras. Por cada byte que envíe, también recibirá un byte.

La comunicación típica es así:

  1. El maestro selecciona el esclavo al reducir la entrada de Selección de esclavo. Usted debe agregar este código usted mismo. MCC no genera esto! Simplemente defina un pin PIC IO como salida, conéctelo al dispositivo esclavo y condúzcalo con su propio código.

  2. Master envía un byte de comando al esclavo en serie a través del pin MOSI (Master Out, Slave In), alternando la línea de reloj SCK para cada uno de los 8 bits.

  3. El esclavo reconoce el byte de comando recibido y almacena los datos solicitados en su búfer de salida listo para ser eliminado.

  4. El maestro envía otro byte con solo ceros. El esclavo ignora estos ceros (pero revisa tu hoja de datos).

  5. Mientras el maestro registra el byte cero en el paso 4, también recibe el byte de datos que el esclavo está enviando a través del pin MISO (Master In, Slave Out).

  6. Eleve SS (Slave Select) alto para indicar al Slave que la transacción se ha completado.

Por ejemplo, digamos que su esclavo esclavo devuelve una respuesta de 16 bits cuando se envía un determinado byte de comando. Esto significa que necesitaría enviar 3 bytes: el byte de comando y dos bytes cero. También obtendrías 3 bytes de vuelta.

El primer byte que recibió habría sido cuando envió el byte de comando. Esto generalmente se ignora; El esclavo generalmente solo devuelve un byte cero ya que aún no recibió un comando y no sabe lo que quiere el maestro. El segundo y tercer byte sería la respuesta de 16 bits del esclavo desde el comando que se envió.

Esta es una descripción general. Lea su hoja de datos para más detalles. Pero esta es una transacción muy típica que podría ayudarlo a comprender cómo funciona SPI.

    
respondido por el Vince Patron

Lea otras preguntas en las etiquetas