Entendiendo una hoja de comandos SPI

2

Estoy interesado en aprender más sobre cómo funciona SPI en general, pero con la biblioteca de frambuesa pi y py-spidev en mente. Soy muy hábil desde el punto de vista técnico, aunque no tanto en el aspecto de las cosas en EE.

Estoy intentando comunicarme con un equipo a través de SPI y solo me han dado una hoja de cálculo con información sobre los comandos de bytes y el tiempo. Ya he determinado que el modo SPI es 1, la velocidad del reloj debería ser 300kHz y la longitud de palabra es de 8 bits. Una instantánea de la hoja de comandos se ve a continuación. Se deben unir de extremo a extremo.

He intentado comunicarme utilizando la biblioteca py-spidev y he visto algunos números esperanzadores (creo). Ejemplo:

import spidev
spi = spidev.SpiDev()
spi.open(0, 0)
spi.mode = 1
spi.max_speed_hz = 500000

spi.xfer2([0x03, 0x00])

Tengo la impresión de que esto debería encender el potenciómetro digital, pero no lo hace. Sin embargo, sí veo los valores [3, 0] devueltos, lo que me lleva a creer que algo está sucediendo.

¿Cuál es la diferencia entre Bytes (s) out y Byte (s) in? Supongo que si envío el comando xfer2([0x03, 0x00], 500000, 9000) debería recibir los bytes 0xF3 y 0x03. ¿Es eso correcto?

Realmente no sé cómo proceder y me encantarían las referencias a buenos tutoriales / descripciones.

Después de recibir finalmente mi analizador lógico Saleae, tengo una actualización. Parece que el pin de selección de chip no está funcionando? ¿Alguien tiene consejos para depurar esto en un Pi específicamente?

    
pregunta David Hagan

1 respuesta

1

Con los dispositivos spi, necesitas cambiar algo para recuperar algo.

Normalmente, eso significa enviar un comando y luego cambiar algunos ceros a todos los dispositivos para responder. Si está enviando un comando, el dispositivo no sabe cómo reaccionar hasta que lo haya recibido.

Así que aquí hay una posible solución, desplace el byte de comando, luego los 'bytes hacia afuera' y luego algunos ceros iguales a la cantidad de bytes que desea recuperar. Aquí está la matriz de ejemplo para enviar:

0x03 0x03 0x00 0x00 0x00

Inténtalo y pruébalo también sin el primero. Después de la transferencia, la matriz debe tener 0xf3 y 0x03 en los últimos dos bytes

    
respondido por el Joel

Lea otras preguntas en las etiquetas