嵌入式串行通信导论
通信原理概述
单片机的通信原理
- 单片机系统采用电流或者电压变化来实现数据通信
- 在数字信号系统中,通常用电压高低表示出电平信息,1表示高电平,0表示低电平,把这些逻辑电平组合在一起就可以构成特定的数据
- 在单片机内部所有的数据都用位来储存,每一个位储存一个二进制数值,一些二进制数据位组成的数据序列,即比特组就能用于数据的通信
数据通信系统模型
-
信息源
把各种信息转换为原始电信号用于被单片机所识别
-
发送设备
用于产生适合在信道中传输的信号的设备,在这个环节中包含信号的变换、信号功率放大、信号滤波或者信号编码等过程
-
信道
信息传送的通道,是一种物理媒介,分为有线和无线信道;信道中存在各种干扰和噪声,会对信号产生影响
-
接收设备
将信号进行放大和反变换,从经过编码、受干扰的信号中解码恢复出原始信号
-
受信者
又称信宿,把原始的电信号还原得到相应的信息
通信方法的分类
-
并行通信
将构成一组数据的各个位同时进行传送,数据位数和传输通道数相等(一组数据拆分为N个二进制位,使用N个通信信道同时传送进去)通信信道彼此独立
- 传输速度快,在传输过程中不需要进行数据的串/并转换
- 需要多条信道,布线成本高,一定程度上造成引脚资源浪费
适合近距离、高速率的信号传输
-
串行通信
把一组数据的各个位拆开成多个位,按一定规则分时进行逐位传送
- 采用的传输信道比较少,降低了布线成本,线路利用率高
- 速率比较低
适合长距离、低速率的信号传输
-
串行通信是比较主流的单片机通信方式,根据不同的规范、形式、数据帧结构、组网方式等可以分为多种类别,下文主要介绍串行通信
串行通信原理概述
串行通信的位同步
-
串行通信的性质决定了发送每一个数据位都有固定的时间间隔,这就要求接收方也要遵循相同的时间间隔规定去接收信息(因此在串行通信硬件上除了数据线外还有传输时钟信号的时钟线),这就是位同步
-
单个二进制位传输过程中的不同步问题来自数据通信双方的工作时钟频率上的差异
要实现位同步,即要让接收与发送两方在时钟基准上一致:数据传输什么时候开始,有多少位,各种位的含义和区分边界等问题
串行通信的位同步方式分两种:异步串行通信方式和同步串行通信方式
异步串行通信方式
-
又称起止式异步通信,应用最为广泛
-
以字符为传输单位,数据帧之间没有固定的时间间隔约定,可以是不定时长的空闲位,但组成数据帧的每一个位之间的时间间隔固定
为了保证异步串行通信正常,通信双方必须采用统一的字符数据帧格式(字符的编码形式/数据位校验方式/起止位的约定)与一致的通信波特率(后文介绍何为波特率)
-
异步串行通信的数据帧
-
起始位:为0,持续一个比特时间的逻辑低电平;用于告知接收方数据传输开始了,之后的位就是数据位
-
数据位:传输字节中的各个组成位,通常只包含一个数据字节,因此异步串行通信的帧称为小帧,也因此通信速率较低
-
校验位:验证数据传输的正确性,最有效的方法就是采用数据校验机制,例如使用奇偶校验法,则奇偶校验位占一位,用于得到校验的结果
-
停止位:为1,与起始位对应,代表数据帧结束;也可以为通信双方提供修正同步节拍和校正时钟的功能
- 在数据帧之外还有一种状态位:空闲位:用于表示当前线路处于空闲状态,位于上一个停止位到下一个数据帧起始位之间,通常为高电平1
-
-
数据校验机制
有很多种数据差错校验方法,在数据通信中奇偶校验法最为常用
以一般奇偶校验法为例:看传输的数据中是否有偶数或奇数个的高电平
奇校验:若传输的数据位中有奇数个1,则校验位被置0;有偶数个1则置1( 如此操作将使得数据中的1的个数始终保持为奇数个);
偶校验同理,若有偶数个1则校验位置0,奇数个1则校验位置1
但这种方法只能简单判断数据是否被噪声干扰,而实质校验需要更复杂的方法
同步串行通信方式
-
在约定的双方通信速率下,发送和接收端的时钟信号频率和时钟相位要保持一致,这样就保证了通信双方在发送/接收数据时达到严格的数据同步
而为严格控制收发双方数据传输的节拍,通信线路不止需要传输数据的数据线,还需要同步双方时序的时钟线以及一个由主控方给予的同步时钟
在硬件上比异步串行通信复杂很多,但效率与速率都优于异步串行通信
-
同步串行通信的数据帧
与异步通信不同,每个帧可能包含几十个乃至上千个数据字节,称之为大帧,因此通信速度较快
每一帧的开始不再是起始位,而是同步字符或特定标志符
由同步字符、数据块、校验字符组成,数据之间没有空闲位
串行通信的相关概念
串行通信数据传送方式
-
单工
A与B两个通信对象,A只能发送而B只能接收,或者反过来A只能接收B只能发送
通信方向只能是固定的一个方向,通信双方的角色也是固定的
对于异步串行通信方式来说只需要一根数据通信线,同步串行通信方式则需要一个数据线与一根时钟线
-
半双工
A与B可以分时段改变身份,在某一时段内数据只能从一方到另一方
虽然A与B都能够发送或接收数据,但是不能同时进行收发过程,通过分时完成的方式做到双向的信息交互
-
全双工
A与B在同一时刻既能发送数据又能接收数据
需要分别用两根独立的传输路线来连接数据发送方和接收方,这样双方就能同时工作,所传递信息互不冲突
串行通信时钟与传送速率
-
时钟的作用
用于传递信息的二进制数据位序列之间有固定的时间间隔,在发送时这个时间间隔由发送时钟划分与定界,同理,接收时由接收时钟划分和定界并取回数据位
-
发送时钟
由发送端的时钟脉冲控制
STM8单片机把片内总线的并行数据传输到芯片内部的移位寄存器中转换为串行数据,位移寄存器再受发送时钟脉冲的控制将数据进行位移输出,数据位的时间间隔由时钟周期决定
-
接收时钟
由接收端的时钟控制与检测
STM8单片机的串行数据接收引脚上接收到了串行数据后,由接收时钟进行数据位的划分和定界,在接收时钟的控制和检测下将数据逐位传入接收端内部的位移寄存器,再转换回并行数据传送到芯片内部总线上
-
波特率
码元:携带数据信息的信号单元;
每秒钟通过信道传输的码元数称码元传输速率,简称波特率
对于同一个信号,根据编码方式不同得到码元个数也不同,计算方法:波特率RB=log2N(N进制),例如对于二进制,1波特=1位/秒
-
比特率
又称信息速率,用以表示通信信道上每秒传输信息量多少,即是二进制情况下的波特率,计算机领域使用二进制表示信息,于是不必特地区分波特率和比特率
-
波特率因子
在通信建立前,数据按指定波特率送入单片机内部的输入或输出移位寄存器中(每几个时钟周期就位移一次)这就要求接收/发送时钟的时钟频率是波特率倍数关系
公式为:时钟频率F=n波特率因子*B数据传输波特率
所谓波特率因子即发送或接收一个数据位所需的时钟脉冲个数
波特率因子可以设定,异步串行通信时常设为16:即时钟频率要比设定的波特率高n倍,表示16个个时钟周期数据位移一次;同步串行通信波特率因子必须为1
串行信道数据编码格式
-
信道的分类
信道是连接发送端和接收端的介质,可以根据介质特性分为传播电或光信号的有线信道和传播电磁波的无线信道
也可根据传输信号类型不同分为模拟信道(如早期电话线)与数字信道(如同轴电缆)
根据信号不同有不同适用的信号,这就需要信号间转换
-
编码的意义
对于传输的数字信号,编码指用特定方式把信号所代表的内容转换为数码或电脉冲信号、光信号、无线电波等的过程
解码是编码的逆过程,将数码、电脉冲信号等还原为它所代表的信息、数据
通过编码,原始的数据信号可以可以变为更适合在数字信道中传输的数字信号,并且使得接收端具备对传输而来的数据检测和纠错的能力
-
编码的方式
最简单、最常用的方式是用不同的电平来表示两个二进制数字1和0,即用电压变化带来的矩形脉冲来表示数字信号
-
根据信号是否归零,可以划分归零码与非归零码
归零码码元之间的信号回归到零电平;双极性归零码则使用正、负二个电平分别来描述信号0和1,信号之间归零
而非归零码不使用零电平,遇到高电平翻转,低电平时不变
-
不归零编码NRZ是一种常用编码,STM8的串口数据编码就使用这一标准
在这种传输方式中,高电平1用正电压表示,低电平0用负电压表示,表示完一个码元后电压不需要回到0,一个码元与一个时钟脉冲宽度相同,因此NRZ是一种全宽码
-
串行信道的电平标准
-
各种电平标准
各种电平标准划分的高低电平阈值不同,哪怕同种电压系列对应的电平参数也不一样,具体情况需要参阅单片机数据手册
- 5V TTL电平标准 :驱动器输出电压2.4V以上为高电平,0.4V以下为低电平
- 5C CMOS电平标准:4.44V以上为高电平,0.5V以下为低电平
- RS-232电平标准:与上两种正逻辑电平标准(高电压对应高电平,低电压对应低电平)相反,它是负逻辑电平标准:+3至+15V电压表示逻辑0,-3至-15V电压表示逻辑1,不在这两区间内的电压值无意义
-
数据通信电平转换
随着技术进步,为了提升速度和降低功耗,低电压供电的数字集成电路芯片涌现,多种内核与结构的处理器采用不同的电压与电平标准,这就是电平标准数值不定的原因,为此需要进行逻辑电平转换
常见的转换方式有:
- 采用晶体管搭配阻容元件搭建转换电路;这种方法会受到寄生电容的影响,所以一般应用于低速通信场合
- 一些芯片引脚为了安全能承受较高电压,借此间接实现降低电压的电平转换,但这种方法并不安全,使用不当可能超出承受范围烧毁芯片
- 采用专用的电平转换芯片,这是较为推荐的方法
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/untit1ed/p/18661877
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
请注意: 特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?