2

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

关于问题出在哪里的任何想法?

4

1 回答 1

3

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

at91_add_device_spi(spidev_board_info, ARRAY_SIZE(spidev_board_info));

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

于 2012-05-23T12:27:21.903 回答