通信协议基础知识
硬件通信协议基础知识
通讯协议又称通信规程,是指通信双方对数据传送控制的一种约定。约定中包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守,它也叫做链路控制规程。
在嵌入式开发中常常需要不同硬件组件之间的数据交互,这都需要通信协议来规范和管理数据传输,电子工业历史衍生了繁多的协议,既有行业公认的标准协议,也有企业自研的内部通信协议。
硬件通信协议与网络通信协议既有相同点与不同点。两者都是通信协议,通信计算机网络以及通信原理相关知识概念可以归纳繁多通信协议的特点,如按照 OSI 七层模型,硬件通信协议一般对应物理层和部分数据链路层相关功能。其不同在于,网络协议强调适应不同硬件的计算机系统的适用性,硬件通信协议则根据不同硬件芯片进行高度定制化。在复杂的嵌入式系统开发中,既需要考虑底层硬件的适配性,又要考虑其适用性,如开发上下位机通信系统中,从底层考虑何种硬件通信协议,如 uart、usb;从软件根据具体业务角度则考虑相关业务数据的传输格式等。重要的是要认识到分层而治的思想。
串行 & 并行通信
在串行通信中要传输的数据逐位按顺序传送,其特点为数据位传送、按位传送、最少仅一根数据线传输即可,节约了信号线开销但其传输速度较慢,串行信号本身也可以带有时钟信息,并且可以通过算法校正时钟。因此不需要额外的时钟信号进行控制。
而并行通信相对于串行通信使用更多的数据线,在一次可以发送更多的比特位,一般数据线宽度为 8/16/32 位,大大提高了数据传输速度。并行通讯中,数据信号中无法携带时钟信息,为了保证各对信号线上的信号时序一致,并行设备需要严格同步时钟信号,或者采用额外的时钟信号线。
串行通讯很简单,但是相对速度低;并行通讯比较复杂,但是相对速度高。更重要的是,串行线路线路成本低并且抗干扰能力强,因此可以用在长距离通讯上;而并行线路使用多对信号线(还不包括额外的控制线路),线路成本高并且抗干扰能力差,因此对通讯距离有非常严格的限制。
同步 & 异步通信
同步通信中:
- 要求双方共用一个的时钟,总线上按照统一的时序和周期完成信息传输。
- 将许多字符组成一个信息组,这个信息组分成一个个字符进行传输,同步字符加在信息组中,而不是每一个字符。
- 在同步传输中,需前约定一个字符可以对应N位(一般是5-8)位。且在同一个传输过程中,发送和接收按同样的数位进行解析。
- 在同步通讯中,收发设备在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。
- 同步通讯的数据信号所传输的内容绝大部分是有效数据,通信效率较高
- 同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱
- 同步通信可用于点对多点
异步通信中:
- 每传输一个字符,都包含起始位和停止位。字符之间没有固定的时间要求,通信效率较低
- 接收方并不知道数据什么时候会到达,收发双方可以有各自自己的时钟。
- 异步通讯双方的时钟允许误差较大
- 异步通信适用于点对点
双工模式
通信双方的数据交互方向
单工
通信数据单方向传送
半双工
数据能双方传输但不能同时进行,如对讲机
全双工
通信双方能同时相互传输数据
流控制
这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。 pc机中常用的两种流控制是硬件流控制(包括rts/cts、dtr/dsr等)和软件流控制xon/xoff(继续/停止)。
通信物理接口
通信逻辑电平
通信逻辑电平规定逻辑 ”0“ 以及 逻辑 ”1“ 的电压范围,同一种通信协议可能其通信逻辑电平有所区别,如UART的TTL电平以及RS232电平区别。通信注意各方的电平是否匹配,如不匹配可能导致传输异常。
信号IO特性
- 漏极开路 (OC门)
输出侧上拉电阻(pull-up resistor)连接的电压不一定需要使用与输入侧IC同样的电源(VCC),可以是用更低或更高的电压来代替。因此,集电极开路电路有时用于连接不同工作电位、或用于外部电路需要更高电压的场合。
可以将几个 OC 连接在一起形成“线与(wired AND)”(正逻辑,即高电平代表真)或“线或(wired OR)”(负逻辑,低电平代表真)。
OC 唯一的问题就是功率耗损。因为这样的配置往往需要较高的电流才能正确的工作,即使在关闭的状态,也通常会有几个 nA 的泄漏电流,更不用说输出侧上拉电阻所带来的损耗。
一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)
OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
- 推挽输出
导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流(拉电流)。推拉式输出级既能提高电路的负载能力,又能提高开关速度。
差分传输 & 单端信号传输
是一种信号传输的技术,区别于传统的一根信号线一根地线的单端信号传输,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。在这两根线上的传输的信号就是差分信号。信号接收端比较这两个电压的差值来判断发送端发送的逻辑状态。在电路板上,差分走线必须是等长、等宽、紧密靠近、且在同一层面的两根线。
单端信号传输就是一个信号线与一根地线构成信号回路进行传输
在信号线夹带时钟,时间隙区分”0“与”1“
如 1-Wire 通信协议,其空闲保持高电平,当拉低后表示同步传送一位数据,根据”0“与”1“的时间隙区分比特数据,这种通信对时间精度要求比较苛刻。
协议栈
协议套件中的一个协议通常是只为一个目的而设计的,这样可以使得设计更容易。因为每个协议模块通常都要和上下两个其他协议模块通信,它们通常可以想象成是协议栈中的层。最低级的协议总是描述与硬件的物理交互。每个高级的层次增加更多的特性。用户应用程序只是处理最上层的协议。
总线
总线一般指计算机组件之间进行数据传送以及控制逻辑的公共数据交互路径,如果是某两个设备或设备之间专用的信号连线,就不能称之为总线。现场总线则是许多工业通信协议的总称。
对等通信 & 主从通信
对等通信就是没有特定的通信发起者,通信协议中的任一角色都可以发起通信,但需要一定仲裁以避免出现通信冲突竞争现象。
主从通信在流行的硬件通信协议中比较广泛,通信必须由主机发起,单个或多个从机接收并作出响应(不一定需要响应)。
硬件通信协议网络拓扑
相关网络拓扑可参考计算机网络拓扑结构,一般为点对点、点对多点、总线拓扑、菊花链拓扑等