全双工可以读和写
spi驱动框架分三层:核心层、控制器驱动层、外设驱动层
外设驱动与外界交换,控制器驱动成封装了很多控制硬件的函数,外设驱动可以直接调用这些函数
spi驱动框架中设备树包含了spi控制器和设备的相关信息
1、设备树需要与控制器驱动匹配,probe函数在控制器驱动结构体中((厂家写))
2、设备树需要与设备驱动匹配,probe函数在设备结构体中)(自己写)
3、控制器与设备需要匹配(估计不用写)
一、spi总线
提供SPI控制器驱动和 设备驱动 的注册方法、注销方法、SPI通信硬件无关接口
二、控制器驱动
写在内核中,供给设备驱动调用,里面有具体读spi设备读写的函数
三、spi设备驱动
spi_driver描述一个spi外设驱动
在外设驱动实现中调用spi_register_driver(struct spi_driver *sdrv),向spi总线挂载spi_driver,该函数在drivers\spi\spi.c中实现
static struct spi_driver mc33880_driver = {
.driver = {
.name = DRIVER_NAME,
.owner = THIS_MODULE,
},
.probe = mc33880_probe,
.remove = __devexit_p(mc33880_remove),
};
spi设备数据收发处理流程(全双工)
1、定义spi_trandfer,设置spi——transfer的tx_buf成员变量,tx_buf为要发送的数据,然后设置rx_buf成员变量,rx_buf保存着接收到的数据,最后设备len,也就是进行通信的数据的长度
2、初始化spi_message
3、将spi_messag_add函数将spi_transfer传输到spi_messag队列
4、使用spi_sync函数完成数据同步传输
iic设备数据传输(半双工)
使用i2c_transfer进程i2c的数据收发
1、定义消息变量msg
2、定义i2c_client
3、读取数据,先确定读地址,再度
4、写数据