gpio_spi bus总线驱动
Device Drivers —>
[*] SPI support —>
主要配置蓝色那个选项,就是配置的gpio模拟的spi总线驱动
注册spi_board_info
在bsp中需要添加如下代码
这里添加了两个spi_board_info,
一个是spidev,另外一个是rt5514,两者都使用gpio2作为SPI_GPIO_SCK,gpio3作为SPI_GPIO_MOSI,gpio4作为SPI_GPIO_MISO,管脚上的唯一差别在于spidev使用gpio5作为CS,rt5514使用gpio6作为CS,不同的spi_board_info不能使用相同的gpio作为CS,否则后面的spi_board_info会注册不上去。
spi_board_info注册完了之后会寻找匹配的spi总线并生成一个新的struct spi_device,这个设备是挂载在那个匹配的spi总线上的。
spidev设备驱动
为了在不接spi外设的情况下测试spi的功能,需要配置User mode SPI device driver support那个选项,配置完之后编译,烧写,再次启动内核后发现多了/dev/spidev1.0这个设备节点,1代表spi总线1,0代表这个总线上的第0个设备。
我们这里主要说明一下spidev驱动,他是spidev的设备驱动,需要在内核配置如上图所示,对应linux-3.10/drivers/spi/spidev.c,代码中注册了一个name为spidev的struct spi_driver。这个spi_driver在注册的时候会寻找匹配的struct spi_device(是上一步生成的spi_device)。
spidev测试
内核提供了一个测试spidev的用户空间的代码,位置在Document/spi/spidev_test.c
$(cc) spidev_test.c -o spidev_test
生成可执行文件spidev_test,这个设备用于SPI的MOSI和MISO回环测试。
根据在linux-3.10/arch/rlx/bsp/spi_gpio.c文件中指定,MOSI对应gpio3,MISO对应gpio4,将这两个gpio短接在一起,然后执行如下测试:
这个传输的数据与spidev_test.c文件中的tx数组中的数据对比是一致的
这样,gpio模拟的基本功能就算ok了