首页 / LINUX / Linux和C中的SPI超时
Linux和C中的SPI超时
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux和C中的SPI超时,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1193字,纯文字阅读大概需要2分钟。
内容图文
![Linux和C中的SPI超时](/upload/InfoBanner/zyjiaocheng/948/fa26d878ff934c69bceeedb44e02b248.jpg)
我正在尝试对某些硬件传输实施超时,以增加大型项目的安全性.我已经使用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.
内容总结
以上是互联网集市为您收集整理的Linux和C中的SPI超时全部内容,希望文章能够帮你解决Linux和C中的SPI超时所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。