2012-11-16 103 views
1

我在Raspberry Pi上使用SPI接口。Raspberry Pi和SPI接口(Python):如何傳輸數據?

我可以讀取附連到SPI0用下面的代碼的芯片(第一20個寄存器)的寄存器:

spi=spidev.SpiDev() 
spi.open(0,0) 

x=spi.readbytes(20) 

k=0 
for i in x: 
     print(k,hex(i),i) 
     k=k+1 

我的問題是:如何設置使用「SPI特定寄存器的值。 XFER「?我不知道xfer(...)函數需要什麼參數。

如何使用「spi.xfer」從特定寄存器中讀取值?

雖然我確實有原始的C代碼,我仍然無法破譯如何使用xfer(...)。

這裏是C代碼:

https://github.com/doceme/py-spidev/blob/master/spidev_module.c

回答

1

我相信這行代碼是關鍵:

PyArg_ParseTuple(args, "O|IHB:xfer", &list, &speed_hz, 
       &delay_usecs, &bits_per_word) 

The documentation告訴我們,格式化字符串表示:

  • O - 一個Python對象
  • | - 表示後面是可選
  • I - 一個int
  • H - 一個short
  • B - 一個char
  • : - 函數名字符串的開始(xfer

其中,假定似乎是明智的是要發送的數據,事實上它似乎被解釋爲要發送的字節列表。

由於SPI傾向於並行發送和接收,進一步讀取代碼會導致我相信list中的每個值都將被髮送該特定字節時收到的字節替換。這很奇怪,但這是你的SPI。