一、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 常用的消息和传输函数。
五、参考文章