spi master 和spi device有各自的dts配置: 这是spi master的配置示例,也就是spi控制器
这是一个spi device的配置示例,也就是spi外设(从设备)
一个spi控制器上可以连接多个从设备,在任何时刻只有一个从设备可以通过spi控制器的数据线进行通信。片选信号就是用来确认当前和哪个外设进行通信的选择机制。一般情况下控制器想和哪个外设通讯时,会将连接到这个外设的片选信号拉低。而其他外设的片选信号此时被控制器置高。 所以如果硬件设计时确实在同一个spi控制器上并联了多个spi外设。每个外设对应一个独立的片选信号(gpio)。那么在配置时,就需要知道片选信号在驱动中是如何进行配置的,片选信号又是如何将外设和控制器在代码层面联系到一起的。 每个平台在这方面都可能是不一致的。高通的做法如下: 高通的spi控制器配置如下:
可以看到,高通的控制器相关dts中有最多4个可选的片选gpio参数可以配置。如果你需要多个片选配置,则添加这条属性,有几个就添加几条。其值就是硬件连接的具体gpio号。 如: qcom, gpio-cs0 = <115>, qcom, gpio-cs1 = <119> qcom, gpio-cs2 = <114> 如果你的spi控制器上只连接了一个外设,也就是独占使用的。那么就不要配置这四个属性中的任何一个! 注意!这些属性属于spi控制器的dts配置参数。 那么,某个spi外设是如何和控制器的对应cs信号在代码上关联呢? 看下外设的dts配置属性列表:
以上示例中,可以看到每个spi外设的属性中都有一个必选的属性:reg = <>,这个就是对应的片选信号。如果你的外设是唯一的,即这个控制器只连接了一个外设,那么此处的reg属性值必须为0;如果这个spi控制器连接了多个外设,那么此处的reg属性即为对应的片选信号索引值。例如,你的spi外设连接到上述控制器对应的“qcom, gpio-cs1 = <119>”,那么此时你的reg属性值应为1,将来控制器就会在发送数据时将gpio_119拉低。