常用的通信协议
常用通讯协议(SPI、IIC、UART); 一、USART和UART: USART:通用同步异步收发器,USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。 UART: 通用异步收发器,异步串行通信口(UART)就是我们在嵌入式中常说的串口,它还是一种通用的数据通信议。 异步通讯时二者无区别,同步通讯时USART可以提供主动时钟。 均为全双工通信。 起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。 数据位:传输N bits。 校验位(可选):数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。 如传输“A”(01000001)为例,”A”字符的8个bit位中有两个1。当为奇数校验时该位为1;当为偶数校验时该位为0。 停止位:它是一帧数据的结束标志。可以是1bit、1.5bit、2bit的空闲电平。 空闲位:没有数据传输时线路上的电平状态。为逻辑1。 传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。比如传输“A”如果是MSB那么就是01000001,如果是LSB那么就是10000010 帧间隔:即传送数据的帧与帧之间的间隔大小,可以以位为计量也可以用时间(知道波特率那么位数和时间可以换算)。比如传送”A”完后,这为一帧数据,再传”B”,那么A与B之间的间隔即为帧间隔。 波特率定义:有效数据信号调制载波的速率,每秒传输1或0的个数; 例如:串口传输速率为9600bps,每秒可传输多少字节? 起始位:1 数据位:8 停止位:1 校验位:0 传输1字节数据,需要传输10bit,因此: 9600 ÷ 10 = 960Byte 二、IIC通讯协议: IIC协议为半双工协议。 全双工指在发送数据的同时也能够接收数据; 半双工就是指一个时间段内只有一个动作发生; 数据有效传输在scl信号的高电平期间,sda数据线保持稳定,在scl为低电平时允许sda数据线变化。 起始条件在scl为高电平期间,sda出现下降沿,则为起始信号。 结束条件在scl为高电平期间,sda出现上升沿,则为结束信号。 注意:注意起始和终止信号都是由主机发出的,总线在起始条件之后,视为忙状态,在停止条件之后被视为空闲状态。 应答(ACK,Acknowledgement)。即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。主机每向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,来确认从机是否成功接收到了数据,从机应答主机所需要的时钟也是由主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。,需要应答时,数据发出方将SDA总线设置为3态输入,由于IIC总线上有上拉电阻,因此此时总线默认高电平,若数据接收方正确接收到数据,则数据接收方将SDA总线拉低,以示正确应答。 IIC传输时时从MSB开始传输到LSB结束。MSB是Most Significant Bit的缩写,最高有效位。在二进制数中,MSB是最高加权位。与十进制数字中最左边的一位类似。通常,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。LSB,英文 least significant bit,中文义最低有效位。 写时序: ID_Address, REG_Address, W_REG_Data 产生start位; 传送器件地址ID_Address,器件地址的最后一位为数据的传输方向位,R/W,低电平0表示主机往从机写数据(W),1表示主机从从机读数据(R)。ACK应答,应答是从机发送给主机的应答,这里不用管; 传送写入器件寄存器地址,即数据要写入的位置。同样ACK应答不用管; 传送要写入的数据。ACK应答不用管; 产生stop信号; 读时序: {ID_Address + REG_Address} + {ID_Address + R_REG_Data} 产生start信号 传送器件地址(写ID_Address),ACK。 传送字地址(写REG_Address),ACK。 再次产生start信号 再传送一次器件地址,ACK。 读取一个字节的数据,读数据最后结束前无应答ACK信号。 产生stop信号。 ...