硬件(三) 通信方式、串口通信
一、通信类型
(一)并行通信
多个比特通过并行线同时传输,传输速率快,但会大量占用芯片资源,在对资源敏感的场景下不太适用。
(二)串行通信
把数据拆成单个比特,按顺序在一根总线上发送。它系统资源占用少、结构简单,是主机间通信常用方式。像 RS232、RS485、RS422 都属于串行通信,串口通信(Serial Port)也是串行通信的一种,且属于异步通信。
(三)单工模式
通信时一方固定发,另一方固定收,用一根总线传数据,只能单向传信息,就像只能听别人说,没法回应。
(四)半双工通信
数据能在两个方向交替传,但不能同时进行。通信双方能发也能收,不过不能同时干这两件事,好比和人交替说话、倾听,你说时对方听,对方说时你听,常用于对话类场景。
(五)全双工通信
数据可同时在两个方向传输,双方能同时发和收数据,实现双向通信,类似打电话,能同时说和听。
(六)串行的异步与同步通信
1. 异步通信
两个字符(8 位)之间时间间隔不固定,但一个字符内各位时间间隔固定。收发双方波特率得事先约定好。串口通信时,波特率若没约定好,数据传输会乱。发送和接收方各自 “计时”,只要误差不超 6% 左右就行,这就像打字,敲每个字母的时间自己控制,只要接收端能正确识别。
2. 同步通信
要求收发双方同频同相。设备间除数据线(SDA),还有时钟线(SCL),发送方控制时钟线变化,每发一个比特,时钟线都按规则改变,就像合唱团靠指挥员控制节奏,大家按节奏唱歌,IIC、SPI 都用这种方式。同步和异步串行通信的区别是有无时钟线,有就是同步,没有就是异步。
注:同步串行通信方式与异步串行通信方式的区别:存在时钟线的为同步串行
通信方式通信,没有时钟线的为异步串行通信方式。
二、串行口通信(全双工、异步)
(一)UART 协议
UART(通用异步收发器)是常用串行通信协议,用于设备间数据传输,通过 TXD(发送线)和 RXD(接收线)实现异步传输,TXD 发数据到另一设备,RXD 从另一设备收数据到本设备。
(二)串口通信时序
以 TTL 为例,不同主机间数据格式如下:
- 空闲时:数据线为高电平。
- 起始位:发送方发一个低电平作为起始位。
- 数据位:按低位先行(第一个比特是最右边的最低位)发送。
- 校验位:有奇校验、偶校验和无校验三种,可选择发或不发。奇校验要让数据位加校验位中 “1” 的总数为奇数;偶校验则让总数为偶数。
- 停止位:校验位后发一个停止位(高电平),把两个数据分隔开,停止位也可以是 1.5 个或 2 个。
简单说通信逻辑就是:空闲时数据线高电平,发数据先送低电平起始位,然后按低位先行发 8 个数据位,接着可选校验位,最后发高电平停止位。
(三)波特率
用波特率(bps)描述串口数据传输速率,指每秒传输的比特数。常见波特率有 1200、2400、4800、9600、115200 等。比如 9600bps,就是每秒传 9600 个比特,每个比特传输时间约 1.041×10⁻⁴秒。
三、三种串行通信的物理表现
主机间通信,导线内阻会导致电压衰减,TTL 电平还会因主机距离出现高电平衰减和串扰。
(一)TTL
芯片引脚产生的电压,和芯片有关,51 单片机下是 5V,2440 下是 3.3V 等。5V TTL 通信距离一般在 10 - 20 米,传输距离受限。逻辑 0 是 0V 低电压,逻辑 1 由芯片供电电压决定。
(二)RS232
为解决 TTL 传输距离短的问题,IEEE 颁布 RS232 标准。逻辑高电平(逻辑 1)在 - 3V 到 - 15V 之间,逻辑低电平(逻辑 0)在 + 3V 到 + 15V 之间。收发主机有收、发、地三根线,是全双工的,理论能传 20 - 30 米。
(三)RS485
用 A、B 两根信号线,通过比较两者电压差识别信息,+7V 到 + 12V 是逻辑 1,-7V 到 - 12V 是逻辑 0。差分传输抗干扰强,传输距离可达 1200 米,适用于大范围传输。因为传输时两根线都得用,所以是半双工的。
四、串行口寄存器
包括 SBUF(串行口数据缓冲寄存器)、SCON(串行口控制寄存器)、PCON(电源控制寄存器)等,这些寄存器用于配置和控制串行通信的相关参数与状态。
五、USB 下载电路模块相关
(一)xdata 的作用
不把内容存在芯片内部 RAM,而是存在扩展的 RAM 里,能扩展存储容量。
(二)定时器初值计算
公式为2^8−2^smod×focs/32/bps/12。其中 smod 是 PCON 的 B7 位(0 或 1,SMOD=1 时波特率翻倍),focs 是晶振频率(如 11.0592M),bps 是目标波特率(如 2400),2^8因用 8 位自动重装定时器工作方式。若 2400bps 且 smod=1,计算得初值 232。
六、MODBUS 通信协议
协议通过定义数组元素内容来规定通信帧结构。如图中主机与从机通信,帧包含起始字节、地址码、功能码、数据、校验码、结束码等。功能码区分功能(如点灯、数码管、蜂鸣器、测温等),从机到主机时功能码最高位会进行或 1 操作。