一、spi_transfer 结构体里面的cs_change的,官方的解释是cs_change: affects chipselect after this transfer completes,当本次传输完成时候,这个设置影响到cs的状态。

二、当传输正常进行时,片选会置为有效状态,cs_change 的值将影响片选何时被置为无效状态。若cs_change 的值为0,表明不影响片选,此时,仅当该次传输是消息(多次传输组成一个消息,一次消息处理中包含单次或多次的传输)的最后一次传输时,片选才会被置为无效状态。若cs_change 的值为1,表明影响片选,此时,若该次传输不是消息的最后一次传输,则在本次传输结束后会立即将片选设置为无效状态,若该次传输是消息的最后一次传输,则不会立即设置片选无效,而是保持有效直到下一个消息的第一次传输开始。

三、理解这个还得弄明白消息(spi_message)和传输(spi_transfer)的概念,一次消息处理中包含单次或多次的传输。

四、分析linux\kernel\drivers\spi\spi.c驱动里面的spi_transfer_one_message

       3.1 情况一:所有的传输都是cs_change 是0的话,整个消息处理传数据过程cs都是在有效状态,完成传输后cs才变回无效状态。

      3.2 情况二:如果某次的传输cs_change 是1的话,表明会影响片选,若该次传输不是消息的最后一次传输,则在本次传输结束后会立即将片选设置为无效状态,延时10us再变为有效状态,再进行下一下传输;如果本次传输是最后一次传输,则不会把片选设置为无效,一直保持有效直到下一个消息传输开始。

      3.3 驱动里面的spi_transfer_one_message处理数据传输代码

       3.4 常用的消息和传输函数。

五、参考文章

周立功:深入浅出AMetal谈SPI总线和IIC 总线-电子发烧友网

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐