使用SPIDEV访问SPI设备

时间:2012-05-22 07:34:36

标签: linux linux-device-driver embedded-linux spi

我想使用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的引用。

知道问题出在哪里?

1 个答案:

答案 0 :(得分:3)

我认为使用Atmel主板,您应该使用at91_add_device_spi函数注册设备。那就是:

at91_add_device_spi(spidev_board_info, ARRAY_SIZE(spidev_board_info));

至少你必须确保你的电路板支持文件board-sam9x5ek.c调用这个函数,以便SPI主控制器被初始化。如果这样做,您上面提出的初始化是正确的。