第一步,配置内核:
选中:Device Driver --> SPI support --> User mode SPI device driver support
第二步,修改board_sam9261ek.c adding SPIDEV info under /* SPI */
{
.modalias = "spidev", //device name, must be it.
.chip_select = 1, //means cs1
.max_speed_hz = 2 * 1000 * 1000,
.bus_num = 0, //means spi0
.controller_data = (void *) AT91_PIN_PA4, //PA4 is SPI0's cs1
},
第三步,make uImage
这样你就可以在/sys/bus/spi/devices, sys/bus/spi/drivers下面看到spidev的信息了。
在/dev/下面也可以看到spidev0.1
第四步,编译documentation/spi/spidev_test.c
编译前先修改:隐去结构体中的".speed_hz=..." and ".bits_per_word=..."这两项。因为atmel_spi.c对其不支持。
你可以把默认的设备改为/dev/spidev0.1也可以在输入命令的时候加上设备名称
第五步,编译spidev_test.c,运行可执行文件。
测试时,可以把MOSI和MOSI相连,这样你就可以看到打印出来的读到的SPI口的数据就是写到SPI口的数据。
spidev_test.c中的IOCTL命令,是用来关联spidev的驱动的,里面的参数是一些命令代码,对应spidev的相应的操作。
主要分为:设定命令和读写命令。
你需要对SPI进行设定可以模仿spidev_test.c程序,SPI_IOC_MESSAGE(n)就是对SPI的读写操作,这个是全双工的命令,即读和写是同时进行的。
如果你只需要读或写spi的操作,你也可以像读写串口操作一样对spidev进行操作。
你可以参考spidev_fdx.c文件,里面有spi读的操作。写就更简单了,修改一下就可以了。