linux ioctl 串口,SPI(串行端口通信)问题,卡在ioctl()上

本文描述了作者在Linux环境下使用SPI通信时遇到的问题,具体表现为代码在执行ioctl()函数时卡住。作者试图通过SPI驱动访问SPI传感器,并在设备树中配置了正确的参数。在尝试不同速度和SPI模式后,问题依然存在。代码中展示了用于读写SPI设备的函数spidevReadRegister(),以及设备打开和操作的部分。目前,MOSI信号正常,但CLK未启动,导致通信未完成。
摘要由CSDN通过智能技术生成

我正在尝试使用SPIDEV驱动程序访问SPI传感器,但我的代码卡在IOCTL上.

我在SAM9X5EK上运行嵌入式Linux(安装AT91SAM9G25).该器件连接到SPI0.我在menuconfig中启用了CONFIG_SPI_SPIDEV和CONFIG_SPI_ATMEL,并将正确的代码添加到BSP文件中:

static struct spi_board_info spidev_board_info[] {

{

.modalias = "spidev",

.max_speed_hz = 1000000,

.bus_num = 0,

.chips_select = 0,

.mode = SPI_MODE_3,

},

...

};

spi_register_board_info(spidev_board_info, ARRAY_SIZE(spidev_board_info));

1MHz是传感器接受的最大值,我尝试了500kHz,但在Linux启动过程中出现错误(显然太慢). .bus_num和.chips_select应该更正(我也尝试了所有其他组合). SPI_MODE_3我检查了数据表.

启动时没有错误,设备正确显示为/dev/spidevX.X.我设法打开文件并获取有效的文件描述符.我现在正尝试使用以下代码访问设备(灵感来自我在网上找到的示例).

#define MY_SPIDEV_DELAY_USECS 100

// #define MY_SPIDEV_SPEED_HZ 1000000

#define MY_SPIDEV_BITS_PER_WORD 8

int spidevReadRegister(int fd,

unsigned int num_o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值