嵌入式学习--step7 各类通信协议

一、IIC
IIC总线它是由数据线SDA和时钟SCL构成的串行总线,可发送和接受数据。高速IIC总线一般可达400kbps以上。 I2C总线在传送数据过程中共有三种类型的信号,分别是:开始信号、结束信号和应答信号:
开始信号:SCL为高电平,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IIC在接受到8Bits数据后,向发送数据的IIC发出特定的低电平脉冲,表示已收到数据。
通信流程
在主模式下,I2C接口会启动数据传输并生成时钟信号,串行数据传输始终是在出现起始位时开始,在出现停止位时结束,起始位与停止位均在主模式下由软件生成。在字节传输 8 个时钟周期后是第 9 个时钟脉冲,在此期间接收器必须向发送器发送一个应答位ACK,请参见下图 。

嵌入式学习--step7 各类通信协议_第1张图片
从上图可以看出,出现起始位后,SDA由高电平向低电平跳变,开始传送数据, SCL时钟线,当SCL下降沿时,结束数据传输。数据和地址均以 8 位字节传输, MSB 在前。起始位后紧随地址字节(7 位地址占据一个字节;10 位地址占据两个字节)。地址始终在主模式下传送。
嵌入式学习--step7 各类通信协议_第2张图片
上图展示I2C具体的内部实现,SDA连接着数据控制,有移位寄存器与数据寄存器控制相连,SCL连接着时钟控制,有时钟控制寄存器、控制寄存器、状态寄存器控制着,另外还有控制逻辑,含DMA请求与ACK。(图中的PEC是Packet Error Checking(PEC)校验功能,PEC 计算器的应用目的是提高通信的可靠性。 PEC 对各个位使用 CRC-8 多项式 C(x) = x8 +x2 + x + 1 公式进行串行计算。)
二、SPI总线
SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。

SPI是一种高速的,全双工(MOSI/MISO),同步(SCK)的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省了空间,提供了方便,主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI框图如下:
嵌入式学习--step7 各类通信协议_第3张图片
下图展示了SPI通信过程,SPI全双工通信时,一个数据输出和数据输入都由同一时钟进行同步的1全双工通信过程。
嵌入式学习--step7 各类通信协议_第4张图片
下图展示了SPI的时序图,其中CPHA为时钟相位,CPHA1时,则SCK引脚的第二个边沿开始传递数据,CPHA0时,则SCK引脚的第一个边沿开始传递数据;CPOL为时钟极性,CPOL1时,SCK引脚在空闲状态处于高电平,CPOL0时,SCK引脚在空闲状态处于低电平。(CPOL时钟极性,CPHA时钟相位)
嵌入式学习--step7 各类通信协议_第5张图片
我们看下SPI全双工情况下是怎么通信的:
嵌入式学习--step7 各类通信协议_第6张图片
全双工的通信过程为:1)软件向SPI-DR数据寄存器写入0xF1,软件等待至发送缓冲区空标志TXE为1,表示发送缓冲区为空,可以发送,后向SPI-DR写入0xF2,等待时钟沿进行数据0xF1发送。2),等待RXNE置1,接收端接收到0xF1,表示接收区非空,有数据了,注意,此处是非空(NE,not empty),然后从SPI-DR中读取数据0xA1,0xA1为MISO需要发送的数据,等待时钟沿进行数据发送。
嵌入式学习--step7 各类通信协议_第7张图片
我们知道,SPI既可以配置成全双工,也可以配置成半双工通信,前面讲述了全双工模式下的配置,接下来讲述半双工的配置。SPI可以在两种模式下完成半双工模式的工作:
1)1个时钟线和1条双向数据线,双向数据线可作为输入或者输出,但不能同时作为,由BIDIMODE引脚控制。
2)1条时钟线和1条数据线(只接收或者只发送)
当主设备或者从设备只发送时的时序图(半双工)为:
嵌入式学习--step7 各类通信协议_第8张图片
在一条时钟和一条单向数据线的模式下,例如只发送模式,在发送引脚上发送数据,接收引脚(主模式下的MISO引脚或者从模式下的MOSI)可以用作通用IO,因而其该引脚的时序不可知(如果该引脚为0或1,则一直为一根直线);在只接收模式下,发送IO引脚可用于其他用途。因而,时序图里只画了MOSI或者MISO一根线,没有如同全双工那样画两根线。

—————
源码阅读:

你可能感兴趣的:(嵌入式学习,嵌入式)