本帖最后由 070 于 2013-11-20 20:32 编辑
Linux中,在已经实现了SPI主控制器驱动的情况,有两种驱动编写方法:
1、内核级的SPI从设备驱动
2、利用已有的SPI用户模式接口的应用程序式驱动
这次就简单介绍一下第二种的驱动编写方法:
TQ210的内核已经包含了SPIDEV驱动了。通过访问/dev/spidev_0.0和/dev/spidev_1.0两个设备文件,可以访问开发板上的两个SPI口。
至于SPI通信的话,我给个例子给你,就知道如何用了(你至少要知道SPI从设备的操作协议)。我以NRF24L01无线通信模块的读取状态寄存器的代码作为说明。访问NRF24L01无线通信模块的STATUS状态寄存器,首先往SPI中写入STATUS寄存器的地址0x07,然后写入0xFF读取状态。
- #define READ_REG_CMD_SIZE 2
- #define STATUS 0x07
- int fd_spidev = open("/dev/spidev_1.0", O_WR);
- char tx[READ_REG_CMD_SIZE] = { STATUS, 0xFF };
- char rx[READ_REG_CMD_SIZE] = { 0x00, 0x00 };
- struct spi_ioc_transfer tr = {
- .tx_buf = (unsigned long)tx,
- .rx_buf = (unsigned long)rx,
- .len = READ_REG_CMD_SIZE,
- };
- ret = ioctl(fd_spidev, SPI_IOC_MESSAGE(1), &tr);
- char stat = rx[1]; // 状态存储在rx[1]上。
复制代码
|