目录
1.UART
基本概念:UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可实现全双工传输和接收,即能同时进行数据的发送和接收。它将传输数据的每个字符一位接一位地传输。
同步通信和异步通信:
同步通讯:收发设备双方会使用一根信号线表示时钟信号,在时钟信号
的驱动下双方进行协调,同步数据,通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样,对应时钟极性与时钟相位。
异步通讯:不需要时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧(串口:起始位 数据 校验位(可以没有) 停止位)的格式传输数据,某些通讯(比如串口)中还需要双方约定数据的传输速率(波特率),以便更好地同步。
通常情况下,从芯片里引出的 UART 口的电平一般是 TTL 电平。TTL 电平信号规定,+5V 等价于逻辑 “1”,0V 等价于逻辑 “0”。
UART 通信通常需要三根线,分别是:
- 发送线(TXD,Transmit Data):
- 功能:这是用于将数据从发送设备传输到接收设备的线路。发送设备(如微控制器、计算机等)会将并行数据转换为串行数据,并通过 TxD 线一位一位地发送出去。数据传输从最低位开始,按照预先设置好的波特率进行传输。例如,当发送设备要发送字符 “C”(ASCII 码值为 67,二进制表示为 01000011)时,会先发送最低位 “1”,然后依次发送其他位,直到最高位 “0” 发送完毕。
- 电气特性:在 TTL 电平标准下,高电平(通常为 +5V 左右)表示逻辑 “1”,低电平(通常为 0V 左右)表示逻辑 “0”。在传输过程中,发送设备通过改变 TxD 线上的电压电平来表示不同的二进制数据。
- 接收线(RXD,Receive Data):
- 功能:RXD 线是接收设备用来接收发送设备发送的数据的线路。接收设备会按照与发送设备相同的波特率对 RXD 线上的信号进行采样,将串行数据转换为并行数据,以供接收设备内部的处理器或其他电路使用。例如,接收设备检测到 RXD 线上的电平变化,根据预设的波特率和数据位的设置,将接收到的二进制数据转换为相应的字符或数据。
- 电气特性:与 TxD 线类似,在 TTL 电平标准下,高电平表示逻辑 “1”,低电平表示逻辑 “0”。当发送设备通过 TxD 线发送数据时,接收设备的 RXD 线上会出现相应的电平变化,接收设备根据这些电平变化来接收数据。
- 地线(GND,Ground):
- 功能:地线是为整个通信系统提供参考电位的线路,确保发送设备和接收设备之间的电压基准相同。它起到了信号回流和屏蔽干扰的作用,保证数据传输的准确性和稳定性。如果没有地线,发送设备和接收设备之间的电位差可能会导致信号失真、误码等问题3。
- 电气特性:地线的电压通常为 0V,它与发送设备和接收设备的电源地连接在一起,形成一个完整的电路回路,使电流能够正常流动。
协议层
串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致(一样的起始位 数据 校验位 停止位)才能正常收发数据
1)通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示。
2)有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或 8 位长。
3)数据校验
-
偶校验:校验位使得一帧中的7或8个LSB数据以及校验位中’1’的个数为偶数。
例如:数据=00110101,有4个’1’,如果选择偶校验(在USART_CR1中的PS=0),校验位将是’0’,最后数据检验如果数据有偶数个1则数据传输没有出错(但不是绝对的,如果同时两个数据为发送错误(0变成1)则还是偶数个1) -
奇校验:此校验位使得一帧中的7或8个LSB数据以及校验位中’1’的个数为奇数。
例如:数据=00110101,有4个’1’,如果选择奇校验(在USART_CR1中的PS=1),校验位将是’1’,最后数据检验如果数据有奇数个1则数据传输没有出错,但同样不是绝对的(同时两个1变成0)
波特率
波特率(Baud Rate)是指单位时间内传输的码元个数,单位是波特(Baud)。在 UART 通信中,码元通常是指一个二进制位(bit)。例如,波特率为 9600,表示每秒传输 9600 个二进制位。简单地说,它决定了数据传输的速度。
发送端和接收端必须设置相同的波特率的原因:
- 确保数据同步:
- 在 UART 通信中,接收方需要在正确的时间点对接收线(RXD)上的信号进行采样,以正确地接收数据。如果发送方和接收方的波特率不一致,就会导致接收方采样数据的时间点错误。
- 例如,发送方以 9600 波特率发送数据,即每个位的传输时间是 104.17 微秒,而接收方错误地按照 115200 波特率(每个位的传输时间约为 8.68 微秒)进行采样。那么接收方会在错误的时间点采样数据,导致接收到的数据全是错误的,无法正确解析发送方发送的信息。
- 保证数据完整性:
- 不同的波特率意味着不同的传输速度。如果双方没有界定好相同的波特率,可能会出现接收方等待接收数据的时间过长或过短的情况。
- 比如,发送方以较低的波特率发送数据,而接收方以较高的波特率等待接收,可能会导致接收方在等待接收完整数据之前就认为数据已经传输完毕,从而丢失后面还未接收的部分数据;反之,若发送方波特率高,接收方波特率低,接收方可能会一直等待接收数据,导致通信出现卡顿或者无法正常进行后续的通信流程。
2.IIC
IIC一共有只有两个总线: 一条是双向的串行数据线SDA,一条是串行时钟线SCL
SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的
SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的
所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。
IIC主要特点:
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。
IIC主设备功能:主要产生时钟,产生起始信号和停止信号。
IIC从设备功能:可编程的IIC地址检测,停止位检测。
IIC的一个优点是它支持多主控(multimastering), 其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
IIC是半双工,而不是全双工 ,同一时间只可以单向通信
协议层
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。
IIC 总线时序图
下面我们来详细的介绍下IIC的通信协议流程:
1.初始(空闲)状态:
因为IIC的 SCL 和SDA 都需要接上拉电阻,保证空闲状态的稳定性,所以IIC总线在空闲状态下SCL 和SDA都保持高电平。
2.开始信号:
SCL保持高电平,SDA由高电平变为低电平后,延时(>4.7us),SCL变为低电平。
3.停止信号:
停止信号:SCL保持高电平。SDA由低电平变为高电平。
在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。
数据有效性:
IIC信号在数据传输过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态,不允许有电平跳变,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。
也就是在IIC传输数据的过程中,SCL时钟线会频繁的转换电平,以保证数据的传输
4.应答信号:
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答。
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
**每发送一个字节(8个bit)**在一个字节传输的8个时钟后的第九个时钟期间,接收器接收数据后必须回一个ACK应答信号给发送器,这样才能进行数据传输。
应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。
IIC数据传送格式
SDA线上的数据在SCL时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位ACK, 此时才认为一个字节真正的被传输完成 ,如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
IIC写数据:
多数从设备的地址为7位或者10位,一般都用七位。
八位设备地址=7位从机地址+读/写地址,再给地址添加一个方向位位用来表示接下来数据传输的方向,0表示主设备向从设备(write)写数据,1表示主设备向从设备(read)读数据。
IIC的每一帧数据由9bit组成:
如果是发送数据,则包含 8bit数据+1bit ACK;
如果是设备地址数据,则8bit包含7bit设备地址 1bit方向。
通常情况下,一个完整的I2C通信过程包括以下 4 部分:
- 开始条件
- 地址传送
- 数据传送
- 停止条件
主机要向从机写数据时:
1.主机首先产生START信号
2.然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方 向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读)
3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/T位将自己确定为发送器和接收器
4.这时候主机等待从机的应答信号(A)
5.当主机收到应答信号时,发送要访问从机的那个地址, 继续等待从机的应答信号
6.当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号,
7.主机产生停止信号,结束传送过程。
主机要从从机读数据时(IIC读数据)
1.主机首先产生START信号
2.然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,
3.这时候主机等待从机的应答信号(ACK)
4.当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,
5.当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设 置成接收模式开始读取数据,
6.这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不在接收数据
7.主机进而产生停止信号,结束传送过程。
原文链接:https://blog.csdn.net/as480133937/article/details/105366932
IIC通信协议常用的标准通信速率
1.标准模式(Standard Mode)
- 速率:100 kbps(千比特每秒)。
- 特点:这是最常见的一种速率模式,适用于许多对传输速度要求不是特别高的普通应用场景。比如连接一些简单的传感器(如温度传感器、光照传感器等)与微控制器进行数据交互,在这种情况下,数据传输量通常不大且对实时性要求相对没那么苛刻,100 kbps 的速率足以满足需求。
2.快速模式(Fast Mode)
- 速率:400 kbps。
- 特点:相比于标准模式,其传输速度有了明显提升。适用于一些对数据传输速度有一定要求的应用,例如在小型电子设备内部,当需要在不同芯片模块(如微控制器与存储芯片之间、微控制器与音频处理芯片之间等)之间较快地传输数据时,快速模式能够更高效地完成数据传输任务,减少数据传输等待时间。
3.高速模式(High-Speed Mode)
- 速率:3.4 Mbps(兆比特每秒)。
- 特点:此模式下的传输速率大幅提高,能够满足对数据传输速度要求较高、数据量相对较大且需要快速处理的应用场景。比如在一些高性能的嵌入式系统中,涉及到大量图像数据、音频数据在不同组件间的快速转移,或者在高速数据采集系统中,需要快速将采集到的大量数据传输到处理单元进行分析处理等情况,高速模式就可以发挥很好的作用。
4.超快模式(Ultra-Fast Mode)
- 名称变化情况:也被称为增强型高速模式(Enhanced High-Speed Mode)等。
- 速率:目前常见的可达 5 Mbps 甚至更高(不同设备实现可能有差异)。
- 特点:提供了更高的传输速率,可用于对数据传输速度和实时性要求极高的前沿应用场景,如在一些先进的半导体制造设备的控制系统中,需要在极短时间内完成大量高精度控制指令和反馈数据的传输,超快模式能够满足这类对速度和准确性都有高要求的场景需求。
3.SPI
SPI,是一种高速的,全双工,同步的通信总线。
SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。提供时钟的为主设备(Master),接收时钟的设备为从设备(Slave),读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。
SPI是全双工且SPI没有定义速度限制,一般的实现通常能达到甚至超过10 Mbps。
SPI接口一般使用四条信号线通信:(硬件上为4根线)
SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)
MISO: 主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
MOSI: 主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCLK:串行时钟信号,由主设备产生。时钟频率应该考虑主机和从机的最大限制。
CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。
SPI一对一
SPI一对多
原文链接:https://blog.csdn.net/as480133937/article/details/105764119
协议层
1.片选信号,主机控制哪台从设备使能;
2.时钟信号上升沿(下降沿)触发数据发送。以下图片展示的上升沿触发,两个上升沿之间MOSI、MISO信号线的数据可以改变(发送1还是0)。
3.主机发送到从机:采用的信号线为MOSI,主机提供时钟SCK
4.从机发送到主机:采用的信号线为MISO,主机仍然提供时钟SCK
4.RS485
特点:
半双工通信:由于采用差分信号,所有只能一段发另一端接收。要实现全双工,需要两组RS485(两组单工)。
支持多节点:一般最大支持 32 个节点。
传输距离远:最远通讯距离可达1200米。但是他的传输速率和传输距离是成反比的,只有在100Kb/s以下的传输速度,才能达到最大的通信距离,如果需要传输更远距离可以使用中继。
抗干扰能力强:差分信号传输。抗干扰能力强。
连接简单:只需要两根信号线(A+和B-)就可以进行正常的通信。
协议层
485芯片可以把TTL信号转化为差分信号,也可以把差分信号转化为TTL信号,只需要两根线,不需要地线。
差分信号传输:RS485 通信采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。在差分信号中,逻辑0和逻辑1是用两根信号线(A+和B-)的电压差来表示。
逻辑 1:两根信号线(A+和B-)的电压差在 +2V~+6V 之间。
逻辑 0:两根信号线(A+和B-)的电压差在 -2V~-6V 之间。
连接方式
在 RS485 通信网络中,通常会使用 485 收发器来转换 TTL 电平和 RS485 电平。节点中的串口控制器使用 RX 与 TX 信号线连接到 485 收发器上,而收发器通过差分线连接到网络总线。串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。
1.发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上。
2.接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。
通常在这些节点中只能有一个主机,剩下的全为从机。在总线的起止端分别加了一个 120 欧的匹配电阻。
具体连接图如下所示:
原文链接:https://blog.csdn.net/MQ0522/article/details/128559845
RS485通信速度快,最大传输速度可以达到10Mb/s以上。本质上还是可以理解为串口通信,只是传输过程采用了差分信号。通信过程需要固定收发两端的波特率,保证数据可以准确接收。
5.RS232
特点:
(1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL 电路连接。
(2) 传输速率较低,在异步传输时,波特率为20Kbps。现在由于采用新的UART 芯片16C550 等,波特率达到115.2Kbps。
(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
(4) 传输距离有限,最大传输距离标准值为50 米,实际上也只能用在15米左右。
电气特性:
在TxD和RxD上:逻辑1(MARK)=-3V~-15V ,逻辑0(SPACE)=+3~+15V 在RTS、CTS、DSR、DTR和DCD等控制线上:
信号有效(接通,ON状态,正电压)=+3V~+15V
信号无效(断开,OFF状态,负电压)=-3V~-15V
波特率:
波特率是指从一设备发到另一设备的波特率,即每秒钟多少比特bits per second (bit/s)。典型的波特率是300、1200、2400、9600、19200等bit/s。一般通信两端设备都要设为相同的波特率,但有些设备也可以设置为自动检测波特率。
协议层
RS233没有规定特定的协议层,一般采用UART的通信协议。串行通信在软件设置里需要做多项设置,最常见的设置包括波特率、奇偶校验和停止位。
注意:RS485和RS232的通信协议和串口UART是一致的,只是在电气特性上面做出改变,保证数据的可靠与远距离传输。
RS485牺牲了全双工的特点,只能半双工通信。
RS232保留了全双工通信,只是对电气特性做了改变。
总结
1.UART
通用异步(波特率--时间)收发器,全双工,串行、异步通信总线;
两线制(两根数据线 RX TX)、可以实现全双工的发送和接收;
UART空闲状态通常保持在高电平,起始位给一个低电平,然后读取数据,停止位给一个高电平。
起始位:1位低电平(先打招呼);
数据位:5/6/7/8位,先发低位,后发高位(再发信息)每次最大发送8位,防止累计误差产生;
校验位:校验数据正确性,降低但不可消除误码率,可有可无。奇偶校验数据中奇偶个数;
停止位:1/1.5/2位高电平;
2.IIC
同步、串行、半双工、多主机总线、近距离、低速、芯片与芯片之间的通信;
可以挂载多设备、主机是使用总线权利者、从机只可以听取从机、被主机管理。
SDA传输数据线用于收发数据、SDL时钟线用于通信双方时钟同步
抗干扰能力差、近距离、低速,主要用于电路板上芯片数据交互。
I2C为多主机总线,连接I2C总线上的器件分为主机和从机,只能主机发起和结束一次通信,从机只能被主机呼叫。
每个连接在I2C总线上的器件都有唯一地址(7位),每个器件可以作为主机也可以作为从机,但同一时刻只能有一个主机。
当总线上有多个主机同时启用总线时,I2C具备冲突检测和仲裁功能防止错误产生。
总线上器件的增加和删除不影响其他器件。
总线上发送数据的器件为发送器,接收数据的器件为接收器。时钟频率和数据的每一位是对应的。
主机向从机发送数据(黄色主机发,蓝色从机发)
从机向主机发送数据(黄色主机发,蓝色从机发)
主机先向从机发送数据,不发送停止信号,然后从机再向主机发送数据(黄色主机发,蓝色从机发)
3.SPI
同步、串行、全双工、主从方式工作、高速(对比UART IIC等);
接口:至少是四线制:MISO(主入从出)、MOSI(主出从入)、SCLK(时钟)、CS(片选);
外设一多、从机一多、主机就要用多根线(多加了片选线)、从机还是四根线;
数据通信,先传输高位,后传输低位;
没有起始信号和停止信号,一个字节传输完成后无需应答信号,即可开始下一个字节的传输;
SPI没有从机地址,主机和某个从机通信时,主机向片选线上发送使信号(高或低电平,根据从机设备管脚符号定,CS上面有横线表示低电平有效)表示选中该从机设备。
时钟线在上升沿或下降沿时,发送器向数据线上发送数据,在紧接着的下降沿或上升沿时,接收器从数据线上读取数据,完成1位数据传输,8个时钟周期即可完成一个字节数据的传输
可以挂载多设备、主机是使用总线权利者、从机只可以听取从机、被主机管理。
5.4 IIC跟SPI的异同
相同点;
1)串行,同步方式
2)均采用TTL电平,传输的距离和应用场景类似
3)均采用主丛方式工作
不同点:
1)IIC为半双工、SPI为全双工
2)IIC有应答机制跟起始跟停止,SPI无应答
3)IIC寻址通过启用总线后第一个数据8位中的前七位地址来寻址,SPI通过向对应从机片选使能
4)IIC的时钟极性和时钟相位固定,时序有一种,SPI的时钟极性和时钟相位不固定,时序有四种
4.RS485\232
RS485\RS232解决串口UART问题而生
1)电气接口不统一:UART只是对信号的时序进行了定义,没有定义接口的电气特性,没有连接器的标准;也就是时序上我只是定义了高电平跟低电平 但是高电平是多少 低电平是多少 在每个板子 不同环境都有标准;
2)抗干扰能力差:TTL信号抗干扰能力差,容易出错;
3)通信距离短:一般只用用在一个电路板上两个芯片通信。
标签:UART,主机,RS485,从机,信号,波特率,I2C,数据,设备 From: https://blog.csdn.net/m0_67794241/article/details/143635530