本文共 1320 字,大约阅读时间需要 4 分钟。
为了更好的将各个层次划分开来,互不影响。所以抽像出来了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一类就归为平台设备呀。