Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 树莓皮spidev.h SPI通信_C_Communication_Raspberry Pi_Spi - Fatal编程技术网

C 树莓皮spidev.h SPI通信

C 树莓皮spidev.h SPI通信,c,communication,raspberry-pi,spi,C,Communication,Raspberry Pi,Spi,我尝试建立从RPi主设备到EtherCAT设备从设备的spi通信 数据传输得到了一个方案 我必须传输2个字节的地址寄存器和以下字节传输数据,直到芯片选择终止通信 这是我创造的尝试。有了cs_更改,我可以告诉我的spi通信在下一次传输开始之前取消选择芯片选择 char transfer(UINT8 data, char last) { char last_transfer = last; int ret; uint8_t tx[] = { data }; uint8_t rx[ARRAY_SIZE

我尝试建立从RPi主设备到EtherCAT设备从设备的spi通信

数据传输得到了一个方案

我必须传输2个字节的地址寄存器和以下字节传输数据,直到芯片选择终止通信

这是我创造的尝试。有了cs_更改,我可以告诉我的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];
} 
第一个问题: 我认为在新的转移中取消选择Chip Select first为时已晚。 所以我的第一个问题是:有没有其他方法来控制我的芯片选择信号,也许我可以使用另一个库

第二个问题: 我想读spi而不写在上面,我怎么能用一个简单的readfd实现这一点


我希望你们能支持我:

现在,这就是你们所指的spidev_test.c应用程序。该实现似乎可以工作,因为在上次传输后,将取消选择从属SPI设备。它将一直保持选中状态,直到消息中的最后一次传输之后。 当每个SPI设备未处于活动使用状态时,会取消选择该设备,从而允许其他驱动程序与其他设备对话,因为您的SPI总线可能在其他从属SPI设备之间共享。 此外,您将使用全双工。 标准的读取操作显然只是半双工的。
因此,每当您的SPI从设备想要向SPI controllerMaster发送数据时,然后它必须有一些中断机制,以便您的驱动程序/应用程序可以将SPI控制器设置为SPI_IOC_RD_模式,并可以使SPI_IOC_消息仅提供rx_buf,或者您可以只进行简单的读取操作,因为在将SPI控制器设置为读取模式后,传输将是半双工的-Sumeet

您可以使用SPI\u NO\u CS模式,并使用wiringPi库将CS引脚切换为GPIO。。。从