我正在尝试使用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