我想使用SPIDEV驱动程序在嵌入式Linux系统上访问SPI设备(Avago Tech的光学鼠标设备)。器件连接到SPI0。
我在menuconfig中启用了SPI和“用户模式SPI设备驱动程序支持”> “设备驱动程序”> “SPI”。
我将代码添加到board.c文件
static struct spi_board_info spidev_board_info[] {
{
.modalias = "spidev",
.max_speed_hz = 1000000,
.bus_num = 1,
.chips_select = 0,
.mode = SPI_MODE_3,
},
{
.modalias = "spidev",
.max_speed_hz = 1000000,
.bus_num = 1,
.chips_select = 1,
.mode = SPI_MODE_3,
},
};
spi_register_board_info(spidev_board_info, ARRAY_SIZE(spidev_board_info));
我尝试了500000和1000000作为max_speed_hz(1Mhz是传感器允许的最高值)。 SPI_MODE_3是正确的,在数据表上查看。 bus_num = 1应该正确,因为它引用了SPI0(我也试过= 0出于好奇心)。
我检查了电气连接并且都在工作。
内核编译并且图像正确启动,但我在/ sys / class / spidev /中找不到任何设备(在/ sys / bus / spi / ...中都没有)。系统启动期间也不会出现对SPI的引用。
知道问题出在哪里?
答案 0 :(得分:3)
我认为使用Atmel主板,您应该使用at91_add_device_spi函数注册设备。那就是:
at91_add_device_spi(spidev_board_info, ARRAY_SIZE(spidev_board_info));
至少你必须确保你的电路板支持文件board-sam9x5ek.c
调用这个函数,以便SPI主控制器被初始化。如果这样做,您上面提出的初始化是正确的。