spi master spi driver spi device

来源:互联网 发布:麦迪巅峰数据 编辑:程序博客网 时间:2024/05/20 03:06
为了更好的将各个层次划分开来,互不影响。所以抽像出来了3个层次:
1、spi核心管理层
2、spi控制器驱动(作为spi master)
3、spi设备驱动(作为spi slave)
本来,master与slave之间可以直接进行通信,但是这样耦合程序就很大。
更改一点就得全改,因为spi的时钟有不同的极性以及空闲时时间线的定义包括,master提供
的时钟的最大频率都受到限制。所以引入了spi管理层,这样的话,双方通过中间件进行通信。
互不影响。需要修改的仅是一边的代码。
  例如,imx6处理器就包括了物理的spi控制器,所以做平台BSP时FSL的开发人员就必须为spi控制器
做好spi控制器驱动,而我们可以使用这个spi总线接口多个spi接口的外设,如e2prom,传感器等。
现在,虽然内核中已经有了FSL提供的spi master,但是那只是总线的驱动,只是负责总线的读写,
实际上外设还没有驱动起来。所以我们必须再添加spi device即spi设备驱动,这个设备驱动可以
调用spi master,将数据的读写交给spi master来进行,这样实现了有效的分离。
内核中定义了spi master的结构体,其中包括了3个最主要的函数指针:
1、setup:该函数将在初始化时调用,即初始化spi控制器的时钟频率,相位等配置。
2、transfer:该函数实现数据的读写,在后面的spi device最终将调用这个函数实现数据的读写。通过消息队列的方式。
3、cleanup:注销总线。
为了更好的管理多个相同的设备,如一个spi master(SPI总线)上接了N个相同的设备,他们使用相同的驱动
程序,通过不同的片选来选择。
如imx6接了3片e2prom通过SPI总线,其中规定:
第1片:存储系统配置参数等。
第2片:存储系统采集到的数据。
第3片:存储系统运行日志。
所以系统了抽像出来设备驱动和设备体两个不同的结构体,如下:
1.系统中的spi总线由spi master进行管理。
2.系统中的spi设备驱动由 spi driver进行管理。
3.系统中的spi设备由spi device进行管理。
在这里,imx6只就必须要有
1个spi master(SoC).
1个spi driver(由它来驱动多个相同的设备)
3上spi device(他们使用相同的spi driver,所以只要有一个spi driver即可)。

总结:
spi driver是为spi device服务的,但是spi driver又必须得通过spi master进行通信,
spi driver中提供了probe(),remove()函数,
在spi driver注册时会扫描spi bus上的spi device,依赖id进行driver与slave的绑定。
spi driver只是为了完成绑定,而spi device的真正通信必须通过spi master进行。
所以 spi driver的结构本中包括了spi master的指针,就是为了调用spi master。






下面是最最重要平台设备,原来SoC一类就归为平台设备呀。