SPI setBitOrder question

1

Esto es más de lo técnico, trataría de probarlo a través de prueba y error pero no tengo equipo adicional. De todos modos, primero si configuro la orden SPI.setBitOrder (MSBFirst), por ejemplo, 0b11110000, los "1s" deben enviarse primero, ¿verdad? Se supone que MSB se transmite en el primer ciclo de reloj basado en la hoja de datos.

¿Cumple ambas formas? Si recibiera los datos 0B11110000 y luego los almacenara en una variable, ¿cambiaría la posición? el dispositivo envía primero el MSB.

    
pregunta Benj

2 respuestas

2

Toda la lógica SPI integrada consiste básicamente en un único registro de desplazamiento.

La imagen muestra lo que sucede si LSB va primero . Los datos se desplazan a la derecha, en el lado maestro, el LSB se desplaza primero hacia MOSI y, al mismo tiempo, el LSB del esclavo se desplaza hacia la izquierda. Ocho pulsos de reloj más tarde, ese mismo LSB ha viajado a través de todo el registro de turnos y llega al LSB del maestro.

Si MSB va primero significa que los datos se desplazan a la izquierda, en el lado maestro, MSB primero sale a MOSI, y al mismo tiempo la MSB del esclavo se desplaza hacia la derecha. Ocho pulsos de reloj más tarde, el mismo MSB ha viajado por todo el registro de turnos y llega al MSB del maestro.

Entonces, sí, MSB primero va tanto para enviar como para recibir. El registro de desplazamiento bidireccional, que permite primero tanto a MSB como a LSB, es una característica del hardware SPI en los controladores AVR. Otros fabricantes utilizan una dirección de cambio fija. Si sus datos son tan largos como el registro de desplazamiento, en la mayoría de los casos la dirección del cambio será irrelevante.

    
respondido por el stevenvh
0

La función Arduino SetBitOrder en la biblioteca SPI establece el orden de los bits marcados dentro y fuera.

    
respondido por el Cybergibbons

Lea otras preguntas en las etiquetas