linux SPI通信超时,Linux和C中的SPI超时

我正在尝试对某些硬件传输实施超时,以增加大型项目的安全性.我已经使用select为UART传输实现了超时,但是我不知道如何在SPI传输中添加超时.

这是我的阅读代码:

int spi_read(int fd, char command, char* buffer, int size, int timeout)

{

struct spi_ioc_transfer xfer[2];

int status;

memset(buffer, 0, sizeof(buffer));

memset(xfer, 0, sizeof(xfer));

xfer[0].tx_buf = (unsigned int)(&command);

xfer[0].len = 1;

xfer[1].rx_buf = (unsigned int)buffer;

xfer[1].len = size;

status = ioctl(fd, SPI_IOC_MESSAGE(2), xfer);

if(status < 0)

return NOERROR;

else

return EHWFAULT1;

}

它发送一个字节大小的命令,并接收一定大小的响应(在半双工模式下).如何在响应中实现超时?可以使用select来实现吗?我应该分开进行交易,而是使用选择警报还是更好地使用警报?

然后,对于全双工模式我也有同样的问题,全双工模式也是使用ioctl实现的.你能给我任何提示吗?

解决方法:

在硬件中,SPI主设备不会“等待”响应.根据定义,SPI主设备提供时钟周期,而从设备必须响应.等待响应的概念不适用于SPI总线. (我假设您正在操作SPI主设备)

(在协议中,SPI可能会轮询硬件以查看其是否已完成/就绪;但是SPI总线本身每次都会得到立即答复).

需要说明的是:SPI时钟在SPI MISO引脚上.即使从器件未明确驱动电平,MISO引脚上的电平也将是应答.检测无响应的从属的唯一方法是以一种不能解释为有效消息的方式上拉/下拉MISO.

标签:spi,c-3,linux

来源: https://codeday.me/bug/20191030/1965230.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值