我嘗試建立從RPi(主站)到EtherCAT設備(從站)的spi通信。Raspberry Pi spidev.h SPI通信
數據傳輸得到了一個方案。
我必須傳輸2個字節的地址寄存器和接下來的字節傳輸數據,直到芯片選擇終止通信。
這是我創造的嘗試。通過cs_change,我可以告訴我的spi通信在下次傳輸開始之前取消選擇片選。
char transfer(UINT8 data, char last)
{
char last_transfer = last;
int ret;
uint8_t tx[] = { data };
uint8_t rx[ARRAY_SIZE(tx)] = { };
struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx,
.rx_buf = (unsigned long)rx,
.len = ARRAY_SIZE(tx),
.delay_usecs = delay,
.speed_hz = speed,
.bits_per_word = bits,
.cs_change = 0,
};
if (last_transfer)
tr.cs_change = 1;
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
if (ret < 1)
printf("can't send spi message");
return rx[tr.len-1];
}
第一個問題: 我認爲這是爲時已晚,在新的轉移首先取消片選。 所以我的第一個問題:是否有另一種方法來控制我的芯片選擇信號,也許我可以使用另一個庫?!
問題二: 我想從SPI沒寫寫讀,我怎麼能認識到(用一個簡單的讀取(FD)?!)
我希望你們能支持我: )