一、UART、I2C 和 SPI 是单片机系统中最常用的三种硬件通信协议
起始信号、数据信号、停止信号
UART 每个字节中,都有一个起始位、8 个数据位、1 位停止位。
而 I2C 分为起始信号、数据传输部分、停止信号。其中数据传输部分,可以一次通信过程传输很多个字节,字节数是不受限制的,而每个字节(8位)的数据最后也跟了一位,这一位叫做应答位,通常用 ACK 表示,有点类似于 UART的停止位。
UART起始信号:UART 通信是从一直持续的高电平出现一个低电平标志起始位;
I2C起始信号:I2C通信的起始信号的定义是 SCL 为高电平期间,SDA 由高电平向低电平变化产生一个下降沿,表示起始信号
UART数据传输:首先,UART 是低位在前,高位在后。通信数据位是固定长度,波特率分之一,一位一位固定时间发送完毕就可以了。
I2C数据传输:I2C 通信是高位在前,低位在后。I2C 没有固定波特率,但是有时序的要求,要求当 SCL 在低电平的时候,SDA 允许变化,也就是说,发送方必须先保持 SCL 是低电,平,才可以改变数据线 SDA,输出要发送的当前数据的一位;而当 SCL 在高电平的时候,SDA 绝对不可以变化,因为这个时候,接收方要来读取当前 SDA 的电平信号是 0 还是 1,因此要保证 SDA 的稳定。
UART停止信号:UART 通信的停止位是一位固定的高电平信号;
I2C停止信号:I2C 通信停止信号的定义是 SCL 为高电平期间,SDA 由低电平向高电平变化产生一个上升沿,表示结束信号
I2C寻址模式
I2C 通信的起始信号(Start)后,首先要发送一个从机的地址,这个地址一共有 7位,紧跟着的第 8 位是数据方向位(R/W),“0”表示接下来要发送数据(写),‘“1”表示接下来是请求数据(读)。当我们发送完了这 7 位地址和 1 位方向后,如果发送的这个地址确实存在,那么这个地址的器件应该回应一个 ACK(拉低 SDA 即输出“0”),如果不存在,就没“人”回应 ACK(SDA将保持高电平即“1”)。
MODBUS
-
- 数据格式:
帧头 | 模块地址 | 功能代码 | 数据 | CRC16校验 | 帧尾 |
≥3.5字符 | 1字节 | 1字节 | 0到252字节 | 2字节 | ≥3.5字符 |
0x01, /*读线圈状态(读多个输出位的状态)*/
0x02, /*读输入位状态(读多个输入位的状态)*/
0x03, /*读保持寄存器(读多个保持寄存器的数值)*/
0x04, /*读输入寄存器(读多个输入寄存器的数值)*/
0x05, /*强制单个线圈(强制单个输出位的状态)*/
0x06, /*预制单个寄存器(设定一个寄存器的数值)*/
0x0F, /*强制多个线圈(强制多个输出位的状态)*/
0x10 /*预制多个寄存器(设定多个寄存器的数值)*/
- 二、TTL、RS232、RS485、RS422、RJ45接口的特点
TTL(电平信号):串行通信接口、半双工
RS232(电平信号):串行通信接口、半双工(可以同时进行数据的发送和接收)
1、RS232是负逻辑:TXD 和 RXD 的电压-5V到-15V代表高电平(1),5V到15V代表低电平(0)。
2、接收数据(RXD):它的作用是串口数据接收端。
3、发送数据(TXD):它的作用是串口数据输出端。
5、信号地线(SG):接地端。
RS422(差分信号):全双工(可以同时进行数据的发送和接收)
四线:两根发送信号线(TXD+和TXD-)和两根接收信号线(RXD+和RXD-)。
正电平在+2~+6V,负电平在-2~6V
RS485(差分信号):半双工
两线:A、B或D+、D-。
RS485逻辑:电压在2V到6V之间(1),-2V到-6之间(0)。
RJ45
RJ45头根据线序分为两种:
T568B(只用了四根线)是橙白、橙、绿白、蓝、蓝白、绿、棕白、棕,10/100全半双工。(6脚绿线接收信号负极-RX,3脚绿白线接收信号正极+RX,2脚橙线发送信号负极-TX,1脚橙白线发送信号正极+TX)
T568A是绿白、绿、橙白、蓝、蓝白、橙、棕白、棕,10/100/1000M全半双工。
RJ45接口有两类:用于以太网网卡、路由器以太网接口等的DTE类型,还有用于交换机等的DCE类型。
DTE:数据终端设备 主动通信设备
DCE:数据通信设备 被动通信设备
当两个类型一样的设备使用RJ45接口连接通信时,必须使用交叉线连接。
- 直连线互连
网线的两端均按 T568B 接 ,用于连接主机和设备,即DTE与DCE。 - 交叉互连
- 网线的一端按 T568B 接,另一端按 T568A 接,用于连接主机与主机,或者设备与设备