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.