SPI总线协议
https://blog.csdn.net/ivy_reny/article/details/78189058
I2C总线传输协议
https://blog.csdn.net/jasonchen_gbd/article/details/77431951
I2C总线只需要两根线来传输数据,一根SCl时钟线,一根SDA数据线,是在地址信息之后附加上数据信息,对地址的位数有特殊的规定。
SPI总线至少需要四根线来双工传输数据(MISO/MOSI/SCK/CS),因为是主从模式所以我们在传输的时候会尽量保持双工通道接收和发送数据的频率是一致的。
在SPI协议中不管使用哪一种模式和不管从机还是主机,都是在时钟上升沿采样数据,在时钟下降沿输出数据,使用下图补充解释:
假设CPOL=0,CPHA=0。在SCK的第一个时钟周期,在时钟的前沿采样数据(上升沿),在时钟的后沿输出数据。先看主器件,主器件的输出口(MOSI)输出数据bit1,在时钟的前沿被从器件采样,那主器件是何时输出bit1的呢?bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期,bit1的输出时刻与SSEL信号没有关系。再来看从器件,主器件的输入口MISO同样是在时钟的前沿采样从器件输出的bit1的,那从器件又是在何时输出bit1的呢?从器件实在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有生效。(转)
使用这个样的方法就可以保证在下一个时钟周期的时候,主器件和从器件都可以依然在上升沿采样各自输入的数据,在下降沿输出各自的数据到MOSI和MISO。因为采样点相对于数据输出时刻间隔出一半的时钟周期,这样也可以有最好的建立时间和保持时间。最好的保证时序稳定!
在master端对数据的时钟进行控制,slave端只能被动接受数据,可以一开始用对master端发送时钟给slave端,slave端使用相同的时钟频率去接数据。
如果使用像光纤发送数据的协议,只需要规定好波特率不要传输时钟信号,发送端和接收端使用相同的波特率就可以发送和接收数据,