单片机通信协议

ADC

工作原理

采样——保持——量化——编码

采样:间隔一定时间对模拟信号进行采样,单位时间对信号的采样次数被称为采样率

保持:保持电路将模拟信号保持一段时间,让后级的数字电路完成量化和编码

量化:将连续的模拟信号用有限个离散数字信号近似化

编码:将量化后的结果用二进制或其他进制的形式表示出来

  1. 分辨率:数字量变化最小量时模拟信号的变化量,定义为满刻度与2^n的比值,通常以数字信号的位数来表示
  2. 转换速率:AD转换一次所需时间的倒数,单位时间完成AD转换的次数
  3. 采样速率:两次采样(转换)的时间间隔的倒数,为了保证转换的正确完成,采样率必须小于等于转换速率,即采样时间大于转换时间

UART

UART:通用异步收发器,全双工,串行通信

UART帧格式

image

总线空闲时,处于高电平

起始位:拉低发送一个0表示起始位,随后进行数据发送

发送8位数据,先发送最低位,后发送最高位

奇偶校验位:校验数据的正确性

奇校验:1的数量为偶数则为1,反之为0,偶校验:1的数量为偶数则为0,反之为1

停止位:高电平表示传输停止

波特率

波特率用于描述UART通信时的通信速度,单位为bps,即每秒钟传输的bit数量

通信双方的波特率必须一致,使收发双方的时钟一致

RS232

规定逻辑1的电平在-5到-15V,逻辑0的电平为+5V到+15V,目的是提升抗干扰能力,传送距离可以达到15m

由于TTL电平不符合RS232的要求,往往需要加一个电平转换芯片,如MAX232
存在的问题:

  1. 通信速度较低
  2. 易产生通信干扰
  3. 传输距离短(15m)

RS485

半双工,允许连接多个收发器,使用差分信号进行传输

规定两线之间的电压差在+2V到+6V之间为逻辑1,-2V到-6V之间为逻辑0

A端>B端为1,A端<B端为0

需要使用电平转换芯片将TTL信号转换为485信号,如MAX485

  1. 抗干扰能力强
  2. 通信距离可达1500m
  3. 通信速度快
  4. 可以多节点组网

ModBus协议

基于RS485

帧与帧之间应间隔3.5字符的时间

1字符=1个UART帧

例:9600波特率 1UART帧 = 1bit起始位+8bit数据+1bit停止位

3.5 * 10 * 1 / 9600 = 0.0036s = 3.6ms

ModBus帧格式

地址码(ID) 功能码 数据区 校验码(CRC)
8bit 8bit N * 8bit 16bit
0为广播地址,地址范围1~247,广播时,从机不回应指令 0x03读0x06写0x16写多个

主机命令帧

地址码(ID) 功能码 寄存器地址 寄存器个数 校验码(CRC)
8bit 8bit 16bit 16bit 16bit
01 0x03 0x00 0x00 0x00 0x02 0xC4 0x0B
向地址为01的从机发送 读从机数据,要求从机返回数据 从地址00开始读 读两个寄存器,包含起始地址指向的寄存器 CRC校验

从机回应帧

地址码(ID) 功能码 字节数 数据1 数据2 校验码(CRC)
8bit 8bit 8bit 16bit 16bit 16bit
01 0x03 0x04 0x00 0x01 0x00 0x02 0x2A 0x32
向地址为01的从机发送 读从机数据,要求从机返回数据 寄存器个数 * 2 CRC校验

I2C

半双工

I2C为多主机总线,I2C有冲突检测和仲裁的功能防止错误产生

每个连接到I2C的器件都有一个唯一地址(7bit)

同一时刻只能有一个主机,使用主机进行管理

使用一根时钟线SCL和数据线SDA进行通信

空闲时:SCL和SDA同时高电平

起始信号和停止信号都由主机发出

起始信号:SCL为高电平时,SDA由高电平跳变为低电平

停止信号:SCL为高电平时,SDA由低电平跳变为高电平

数据传输:

  1. 先发送高位后发送低位
  2. SCL为低电平时,允许发送数据,
  3. 发送完一个bit的数据后,要将SCL拉高,SDA不允许变化,保持稳定,等待接收器接收这个bit的数据
  4. 应答位:接收器将SDA拉低为应答(ACK),保持高为非应答(NACK)

应答位:接收器将SDA拉低为应答(ACK),保持高为非应答(NACK)

通信过程

  1. 主机发送起始信号启用总线,发送一个字节数据指明从机地址和读写方向(0:写,1:读)
  2. 被寻址的从机向主机回应应答信号
  3. 主机发送一个字节
  4. 从机回应
  5. ...
  6. 通信完成主机发送停止信号

I2C通信时序

1. 主机向从机发数据

起始信号 从机地址7bit 读写位1bit 从机ACK 数据8bit 从机ACK 数据8bit 从机ACK/NAK 终止信号
主机发送 主机发 主机发:0写 从机发:0 主机发 从机发:0 主机发 从机发:0/1 主机发送

当主机不想继续发送时,发送一个终止信号(SCL拉高的同时,SDA从低电平跳变到高电平)
当从机不想接收时,在接收完主机发送的最后一个字节后,向主机发送NAK

2. 从机向主机发送数据

起始信号 从机地址7bit 读写位1bit 从机ACK 数据8bit 主机ACK 数据8bit 主机NAK 终止信号
主机发送 主机发 主机发:1读 从机发:0 从机发 主机发:0 从机发 主机发:1 主机发

主机不想接收数据时,接收完最后一个字节后,发送一个NAK,再发送一个终止信号

3. 主机发完从机发

起始信号 从机地址 读写位 从机ACK 数据 从机ACK/NAK 起始信号 从机地址 读写位 从机ACK 数据 主机NAK 终止信号
主机发 主机发 主机发:0写 从机发:0 主机发 从机发:0/1 主机发 主机发 主机发:1读 从机发:0 从机发 主机发:1 主机发

主机发完一次数据后,重新开始一次(从起始信号开始),改变读写方向
第一次通信没有发送停止信号,不释放对总线的控制,可以继续进行通信

SPI

SPI有四根线,分别是SCLK时钟线,MOSI主出从入线,MISO主入从出线,CS片选线

全双工,不允许多主机

数据传输时,先发送高位

SPI全双工发一个字节的同时会收一个字节,如果从机没有发,则会收到一个空字节

片选线由高拉低为起始信号,由低拉高为终止信号

寻址方式

当主机要与从机通信时,需要相对应从机的片选线上发送使能信号(高电平/低电平,根据从机而定)

同步方式

1 bit数据传输:时钟线在上升沿或下降沿时,发送器发送数据,下一个下降沿或上升沿时,接收器从数据线读取数据

八个时钟周期可以完成1 Byte数据传输

极性和相位

极性(CPOL)表示SCLK空闲时的状态

  1. CPOL=0,空闲时SCLK为低电平
  2. CPOL=1,空闲时SCLK为高电平

相位(CPHA)表示采样时刻

  1. CPHA=0,每个时钟周期的第一个时钟沿(总线空闲时的第一个边沿,下降或上升沿)采样(从机接收数据)
  2. CPHA=1,每个时钟周期的第二个时钟沿采样

SPI有四种模式

CPOL CPHA 说明
0 0 上升沿采样:SCLK空闲时(低电平),主机发1bit数据,SCLK上升沿(本时钟周期总线空闲后的第一个边沿)从机接收该数据,这是一个时钟周期;下一个时钟周期,SCLK拉低,总线空闲,主机发数据,上升沿,从机接数据...
0 1 下降沿采样:SCLK空闲时(低电平),SCLK上升沿,主机发1bit数据,SCLK下降沿(本时钟周期总线空闲后的第二个边沿)从机接收数据,这是一个时钟周期;下一个时钟周期,SCLK拉低,总线空闲,上升沿,主机发数据,下降沿,从机接数据...
1 0 下降沿采样:SCLK空闲时(高电平),主机发送1bit数据,SCLK下降沿(本时钟周期总线空闲后的第一个边沿)从机接收数据,这是一个时钟周期;下一个时钟周期,SCLK拉高,总线空闲,主机发数据,下降沿,从机接收数据...
1 1 上升沿采样:SCLK空闲时(高电平),SCLK下降沿,主机发送1bit数据,SCLK上升沿(本时钟周期总线空闲后的第二个边沿)从机接收数据,这是一个时钟周期;下一个时钟周期,SCLK拉高,总线空闲,下降沿,主机发数据,上升沿,从机接数据...
posted @ 2022-12-24 18:10  HelliWrold1  阅读(322)  评论(0编辑  收藏  举报