几种最常用的串行数据传输总线
现在的常见的几种传输总线有以下几种(UART,I2C,SPI,USB)等,它们之间有异同点(串行/并行,半双工/全双工,速度快慢,总线拓扑等)
单工:简单的说就是一方只能发信息,另一方则只能收信息,通信是单向的。
半双工:比单工先进一点,就是双方都能发信息,但同一时间则只能一方发信息。
全双工:比半双工再先进一点,就是双方不仅都能发信息,而且能够同时发送
串行传输:
1. 传输速度较低,一次一位。
2. 通信成本也较低,只需一个信道。
3. 支持长距离传输,目前计算机网络中所用的传输方式均为串行传输。
并行传输:
1. 传输速度快:一次可传送与总线位数相同的位。
2. 通信成本高:每位传输要求一个单独的信道支持;因此如果一个字符包含8个二进制位,则并
行传输要求8个独立的信道的支持。
3. 不支持长距离传输:由于信道之间的电容感应,远距离传输时,可靠性较低。
如动图(以下动图出自苏公雨老师):
I2C:
I2C需要两条线:
SCL时钟线
SDA数据线
**
I2C总体协议:
(1)总线空闲状态:SCL是一直高电平,SDA也是一直高电平
(2)I2C协议起始位:SCL高电平,SDA一个下降沿,产生一个起始位
(3)应答与非应答:(应答:【SCL高,SDA低】,非应答【SCL高,SDA高】)应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。
需要应答时,数据发出方将SDA总线设置为3态输入,由于IIC总线上有上拉电阻,因此此时总线默认高电平,
若数据接收方正确接收到数据,则数据接收方将SDA总线拉低,以示正确应答。(注意:每一次传输数据时SCL都处于低电平状态)
(4)I2C协议结束位:SCL高电平,SDA一个上升沿,产生一个结束位
IIC写时序:
先上图
(起始信号->元器件地址>寄存器地址->发送的数据->停止信号)
(1)产生起始信号
(2)传送元器件的ID_ADDRESS地址(用来区分数据要传给哪个传感器,IMU?EEPROM?...)器件地址的最后一位为数据的传输方向位,
R/W,低电平0表示主机往从机写数据(W),1表示主机从从机读数据(R)。然后从机ACK应答。
(3)主机发送具体给元器件中的哪个寄存器的地址,从机应答。
(4)主机发送数据,从机应答
(5)产生结束信号
IIC读时序:
(起始信号->元器件地址>寄存器地址->再次起始信号->再发元器件地址->获取数据->停止信号)
(1)产生start信号
(2)传送器件地址(写ID_Address),ACK。
(3)传送寄存器地址(写REG_Address),ACK。
(4)再次产生start信号
(5)再传送一次器件地址,ACK。
(6)读取一个字节的数据,读数据最后结束前无应答ACK信号。
(7)产生stop信号
SPI - Serial Peripheral Interface串行外设接口:(大疆考了spi的四种传输模式,并且要手绘一种出来,我当时就懵了,看来我是太菜了)
话不多说,直接上图
通过改变时钟的极性(CPOL)和相位(CPHA)来配置四种传输方式,数据要在相应的上升沿或者下降沿采集数据或者移出。
模式0:配置时钟相位使得数据在时钟脉冲的上升沿采样,并在时钟脉冲的下降沿移出。 这对应于上图中的第一个蓝色时钟轨迹。 请注意,数据必须在时钟的第一个上升沿之前可用。
模式1:配置时钟相位使得数据在时钟脉冲的下降沿采样,并在时钟脉冲的上升沿移出。 这对应于上图中的第二个蓝色时钟轨迹。
使用反相时钟极性(即,当从器件选择转换为逻辑低时,时钟处于逻辑高电平):
模式2:配置时钟相位,使得数据在时钟脉冲的下降沿采样,并在时钟脉冲的上升沿移出。 这对应于上图中的第一个橙色时钟轨迹。 请注意,数据必须在时钟的第一个下降沿之前可用。
模式3:配置时钟相位,使得数据在时钟脉冲的上升沿采样,并在时钟脉冲的下降沿移出。 这对应于上图中的第二个橙色时钟轨迹。
主要信号线:
SPI总线由4根主要的信号线组成以实现数据在主设备(Master)和从设备(Slave)之间的全双工(收、发同时执行)同步(由时钟同步)通信:
SCLK:串行时钟(由主设备输出),每个时钟周期将会移出一个新的数据位;
MOSI:主设备输出⇒从设备输入,数据由主设备进入从设备,器件A上的MOSI线连接到器件B上的MOSI线。
MISO:主设备输入⇐ 从设备输出,数据由从设备送到主设备(或其它从设备,采用菊花链配置),器件A上的MISO线连接到器件B上的MISO线。
SS(或SSN): 从设备选中(低电平有效),用于主设备控制从设备用,当该从选择信号线有效的时候表示主设备正在向相应的从设备发送数据或从相应的从设备请求数据。
硬件连接方式:
从图中可以看出从设备是不需要地址的,只要主设备只要把片选CS拉低就可以选择与哪个设备通信。
SPI的优缺点:
优点:支持全双工,比IIC,UART数据吞吐量更大,传输灵活,支持位传输,不限于(8位)字节传输。
缺点:比IIC需要更多的引脚,没有寻址机制,需要通过片选来选择,只支持一个主设备,从设备没有硬件流控机制。
(未完,待续)