Un puerto SPI bidireccional siempre envía y recibe datos simultáneamente; los bytes generalmente se envían primero a MSB ( * ), y el maestro no enviará un bit hasta que haya recibido el bit anterior. Por consiguiente, si bien es posible que un esclavo SPI utilice los bits superiores de un byte recibido del maestro para decidir qué enviar en los bits inferiores (#), la mayoría de los escenarios de direccionamiento requieren que el esclavo envíe datos después de que el maestro haya enviado un completa tu direccion. El patrón más común para esto es que el maestro envíe la dirección mientras ignora cualquier dato enviado por el esclavo, y luego que el maestro envíe un byte de datos ficticios por cada byte de datos que desea recibir. Normalmente, el esclavo ignorará los valores de bytes reales enviados por el maestro mientras está enviando datos.
Los chips nórdicos mejoran ligeramente este protocolo; Como el maestro a menudo querrá leer un valor de estado, los chips nórdicos siempre enviarán su estado como el primer byte de una transacción, antes de que descubran lo que realmente quiere el maestro. Si resulta que el maestro estaba interesado en el estado, excelente: obtuvo la información con una transacción en lugar de dos. De lo contrario, el maestro puede ignorar el primer byte devuelto por el nórdico y mirar el segundo.
Por cierto, la documentación nórdica no dice, que yo sepa, lo que contendrá cualquier byte después del segundo byte. Si tuviera mis dominantes, el byte enviado por el maestro después de un comando de lectura especificará una dirección que se usará en caso de que el maestro envíe otro byte, permitiendo que se lean los registros N intercambiando N + 1 bytes; Sin embargo, no tengo idea de lo que realmente hace el chip nórdico.
(*) Algunos microcontroladores permiten que los datos se envíen y reciban LSB primero. Esto puede ser útil para comunicarse con algunos dispositivos serie síncronos existentes que procesan datos de esa manera. Además, en algunos casos puede ser más fácil diseñar dispositivos de E / S como unidades de multiplicación de precisión extendida que envían / reciben datos LSB primero.
(#) No puedo pensar en ningún dispositivo de hardware que implemente tal habilidad, fuera de mis propios diseños de CPLD, pero se puede diseñar un dispositivo para permitir múltiples tipos de lectura de estado con una sola transacción, basada en los bits superiores de Los primeros datos del maestro. Si uno diseñara un chip de estilo nórdico desde cero, por ejemplo, podría tener diecisiete registros de estado de 4 bits diferentes; los cuatro bits superiores del primer byte recibido del esclavo serían el registro de estado primario; los otros cuatro bits serían de un registro de estado seleccionado por los cuatro MSB suministrados por el maestro.