1.SPI 是全双工串行通信总线,通过CS片选来决定与哪个设备通信(如何操作cs由使用的单板的spi_controller决定),以下记录是本人自己使用的环境的情况
2.一般一次数据通信时(读或者写),会根据传入参数(模式,cs, 速率..)比较与spi_controller当前配置是否相同,若不相同,则会重新配置spi_controller, 即spi_setup
3.一次通信时(假设cs为cs0),需要先根据参数,准备好spi_controller(即是否重新设备spi_controller,即spi_setup), 准备好后,cs必定是高电平,有数据在spi上传输时,cs会拉低,clk上会有时钟输出(时钟是低->高跳变还是高->低跳变,由SPI模式决定,共4种模式,具体可查相关资料),通信完了后,cs必定会恢复为高电平
4.一次spi通信后,若想切换换到其他cs(假设cs为cs1)的设备去通信,则必定会重新,spi_setup, 即重新配置spi_controller, 配置后,前一个片选cs0的状态,由spi_controller的特性决定,可能是高电平,也可能是低电平。本人遇到的就是这样的情况,当选择cs1时,cs2的电压默认是低电平。其他片选cs0,cs2,cs3则是高电平。但是通信状态准备好时,cs必定是高,通讯时才会下拉为低
SPI数据帧
5.spi通信的标准,其实spi通信就是向spi总线上写入数据,然后接收,但是写入的数据帧格式,其实是由连接的设备决定的。只要设备能接收,其实怎样的方式都是可以的。
6.(1)一般的spi数据帧: command(读/写) + 寄存器地址(8位/16位/32位) + 数据(写时为写入的寄存器数据,8位/16位/32位),
(2)有的设备可能寄存器地址在前,command在后,这要看设备芯片手册
(3)有的时候,如通过spi总线加载固件,其实只是使用了spi总线,至于spi数据帧,只需要写入数据,不需要任何格式即只要把固件的数据写入spi的tx_buf,输出出去即可,只要对面的设备能够接收即可