通信简介
通信方式分为两种:
l 串行(字符数据按位传输,区别高低位,控制时序稍复杂-)
l 并行(数据位一次传输完成,传输中需要其他控制信号线完成,速度快)
通信协议:
包含数据格式,同步方式,传输速率,校验方式等。
串行通信同步方式
l 同步(发送接收方使用同一套时钟)
同步通信时要建立发送方时钟对接收方时钟的直接控制。
n 外同步:有一单独的时钟信号
n 内同步:数据与时钟信号一同发送
面向字符同步(IBM 的二进制同步规程 BSC)
面向位同步(HDLC 和 IBM 的同步数据链路控制规程 SDLC)
l 异步(发送接收使用各自的时钟)
异步通信的特点是不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个 字符要附加 2~3 位用于起止位,各帧之间还有间隔,因此传输效率不高。
通信方向
单工,半双工,全工。
校验方式
l 奇偶校验
n 奇校验 包含校验位,累计的1为偶数个
n 偶校验 包含校验位,累计的1为奇数个
l CRC校验
l 累加和校验
传输速率(波特率与比特率)
比特率是每秒钟传输二进制代码的位数, 单位是: 位/秒( bps)。 如每秒钟传送 240 个字符,而每个字符格式包含10 位(1 个起始位、 1 个停止位、 8 个数据位),这时的比特率为10 位×240 个/秒 = 2 400 bps bit/s
参考文档 关于波特率与比特率的概念
传输速率应该用比特率。
比特率 = 波特率 X 单个调制对应的二进制位数。
接口通信
RS232(全双工)
机械特性:阳头为计算机端
电气特性:
RS-422A (全双工)
与RS232区别是收发双方的信号地不再共用。 另外, 每个方向用于传输数据的是
两条平衡导线。
所谓“ 平衡”, 是指输出驱动器为双端平衡驱动器。如果其中一条线为逻辑“ 1” 状态,另一条线就为逻辑“ 0”, 比采用单端不平衡驱动对电压的放大倍数大一倍。 驱动器输出允许范围是 ±2~±6V。
差分电路能从地线干扰中拾取有效信号,差分接收器可以分辨 200mV 以上的电位差。 若传输过程中混入了干扰和噪声,由于差分放大器的作用,可使干扰和噪声相互抵消。 因此可以避免或大大减弱地线干扰和电磁干扰的影响。
RS-485 (半双工)
点对多(最多32)。差模信号。
抗干扰以及电阻匹配
参阅 WIZ_ RS232 RS485 电气特性与抗干扰设计
8051串口通信
UART(Universal Asynchronous Receiver/Transmitter)通用异步收发器
工作方式
l 方式0, 8位移位寄存器,同步通信,一般配合移位器件或其他器件使用。
l 方式1, 8位异步全双工,可变比特率。
l 方式2, 9位异步,全双工。固定比特率。可使用奇偶校验或多机通信。
l 方式3, 9位异步全双工,可变波特率。可使用奇偶校验或多机通信。
内部实现简单机制:参见文档
软件设计
数据(一字节)传输低位在前,高位在后。
串口接收的时候,接收器以所选择波特率的 16 倍速率(波特率因子)采样 RXD引脚电平。
在发送数据时,发送器在发送时钟的下降沿将移位寄存器的数据串行移位输出;在接收数据时,接收器在接收时钟的上升沿对接收数据采样,进行数据位检测,
数据格式
(1)起始位:起始位必须是持续一个比特时间的逻辑0电平,标志传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步。
(2)数据位:数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双方共同约定,一般可以是5位、7位或8位,标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。传输数据时先传送字符的低位,后传送字符的高位。
(3)奇偶校验位:奇偶校验位仅占一位,用于进行奇校验或偶校验,奇偶检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。由此可见,奇偶校验位仅是对数据进行简单的置逻辑高位或逻辑低位,不会对数据进行实质的判断,这样做的好处是接收设备能够知道一个位的状态,有可能判断是否有噪声干扰了通信以及传输的数据是否同步。
(4)停止位:停止位可以是是1位、1.5位或2位,可以由软件设定。它一定是逻辑1电平,标志着传输一个字符的结束。
(5)空闲位:空闲位是指从一个字符的停止位结束到下一个字符的起始位开始,表示线路处于空闲状态,必须由高电平来填充。
异步通信的数据发送过程
清楚了异步通信的数据格式之后,就可以按照指定的数据格式发送数据了,发送数据的具体步骤如下:
(1)初始化后或者无需发送数据,发送端输出逻辑1,可以有任意数量的空闲位。
(2)当需要发送数据时,发送端首先输出逻辑0,作为起始位。
(3)接着就可以开始输出数据位了,发送端首先输出数据的最低位D0,然后是D1, 最后是数据的最高位。
(4)如果设有奇偶检验位,发送端输出检验位。
(5)最后,发送端输出停止位(逻辑1)。
(6)如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则 转入步骤(2)。
异步通信的数据接收过程
在异步通信中,接收端以接收时钟和波特率因子决定每一位的时间长度。下面以波特率因子等于16(接收时钟每16个时钟周期使接收移位寄存器移位一次)为例来说明。
(1)开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时 钟计数。
(2)当计到8个时钟的时候,对输入信号进行检测,若仍然为低电平,则确认这是起 始位,而不是干扰信号。
(3)接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为 D0位数据。
(4)再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全 部数据位都输入。
(5)检验奇偶检验位。
(6)接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1), 若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没 有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出 送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志。
(7)本帧信息全部接收完,把线路上出现的高电平作为空闲位。
(8)当信号再次变为低时,开始进入下一帧的检测。
几个概念
(1)发送时钟:发送数据时,首先将要发送的数据送入移位寄存器,然后在发送时钟 的控制下,将该并行数据逐位移位输出。
(2)接收时钟:在接收串行数据时,接收时钟的上升沿对接收数据采样,进行数据位 检测,并将其移入接收器的移位寄存器中,最后组成并行数据输出。
(3)波特率因子:波特率因子是指发送或接收1个数据位所需要的时钟脉冲个数。在 同步传送方式,必须取n=1,即接收/发送时钟的频率等于收/发波特率。在异步传 送方式,n=1,16,64,即可以选择接收/发送时钟频率是波特率的1,16,64 倍。因 此 可由要求的传送波特率及所选择的倍数n 来确定接收/发送时钟的频率。
波特率误差分析
理论上一个字节发送或接收中BIT累加误差不能超过50%,传送9位数据格式+开始,停止位总共是11位。11*4%=48%约等于50%,实际上一般2%以内可以比较可靠通信(考虑对方误差)。
由于是异步通信,异步的波特率误差不会产生累积效应的。所以只要能保证一个字符的传送没有问题即可,反正都是先起始位,再数据位,最后是停止位。
“
串口波特率高输出容易误码
单片机以波特率16倍的速度对串口信号采样 当发现启始信号以后与外部同步 每个信号位采样16次 其中选择中间三位(7、8、9)的值做此传输位值 这三个位的值如果不同 也要3选2 选2位一致的电平值为信号值
采样3次,那么每一位中间t/2 已及前后各一次吧。那么当原本中间的这次采样偏差超过t/2 就必然有2次采样落到相邻的位上。落到相邻的2次采样结果必然一样
比如 A发 , B收 。 假设发送一位的时间是t .
B在接收时要不断采样,发现起始位后将试图以起始位的中点时刻开始每隔t时间取值一次。
假如A、B两者时钟精度一致,那么B取值时刻都在数据位的中点上,也就是每一位的t/2处。当A、B之间时钟有相对误差时,串口帧最后一位停止位时,B的采样时刻偏离这一位中点将达到最大值。但只要A、B之间最后累积偏差值 < t/2 时, B就不会采样到相邻的位,也就是不会出现错误。所以t值越大宽容度越高,也就是波特率越小越不容易出错
”当使用软件模拟的时候,需要注意。
误差来源有4:
n 串口时钟启动,停止的滞后。 T1
n 时钟发生器产生时钟的本身误差(1个机器周期)T2
n 晶振误差 T3
n 波特率发生器/定时器计算误差 T4
软件模拟串口通信(参考波特率因子)
|