Linux串口编程:面向位的同步协议(HDLC)详解

需积分: 9 1 下载量 56 浏览量 更新于2024-07-12 收藏 1.09MB PPT 举报
"这篇文档详细介绍了面向bit的同步协议,特别是ISO的HDLC协议,并结合Linux串口编程进行了讨论。HDLC协议定义了帧的结构,包括标志场(F场)、地址场(A场)、控制场(C场)、信息场(I场)和帧校验场(FC场)。Linux串口编程涉及到串行I/O的基本概念,如串行通信的分类(单工、半双工、全双工)和同步方式(同步、异步),以及串行通信物理接口的任务,如数据格式化、串并转换、波特率控制、错误检测和电平转换。" 在面向bit的同步协议中,ISO的高级数据链路控制(HDLC)是一种广泛应用的通信协议。它主要用于数据网络中的点对点通信,以确保数据的正确传输。HDLC协议的关键在于其帧结构,这有助于识别帧的开始和结束,防止数据混淆。具体来说: 1. **标志场(F场)**:标志场由特定的8位序列01111110表示,用于标记帧的开始和结束,确保数据的完整性。 2. **地址场(A场)**:地址场指定帧的接收方,其长度可以是8的整倍位。每个地址字节的第1位用来指示是否还有后续地址字节,如果为0,则表示还有更多地址,为1则表示最后一个地址字节。 3. **控制场(C场)**:控制场指示信息场的类型,可以是8位或16位,其中第1字节的第1位为0表示还有第二个字节。 4. **信息场(I场)**:信息场包含实际要传输的数据,长度可变。 5. **帧校验场(FC场)**:16位的循环冗余校验码(CRC)用于检测传输过程中可能发生的错误。除了F场和自动插入的"0"位,所有其他位都参与CRC计算,以确保数据的准确性。 转向Linux串口编程,这是在嵌入式系统中进行通信的重要组成部分。Linux提供了丰富的API和工具来操作串行端口。串行I/O涉及的基本概念包括: - **串行通讯**:数据逐位按顺序传送,通常使用较少的线路,成本较低,但传输速度较慢。 - **通信方向**:串行通信可分为单工(单向)、半双工(双向但非同时)和全双工(双向同时)。 - **同步与异步**:同步通信按照固定的时间间隔传输数据,而异步通信则允许数据在不固定的时间间隔内发送,通常通过起始和停止位来定位数据。 串行通信物理接口的主要功能包括: - **数据格式化**:将并行数据转换为符合特定通信方式的串行格式。 - **串并转换**:在发送时将串行数据转为并行,接收时反之。 - **波特率控制**:调整数据传输速率。 - **错误检测**:通过奇偶校验或其他校验码确保数据的准确传输。 - **电平转换**:将TTL电平转换为EIA电平,以适应不同的硬件接口标准。 - **信号线提供**:根据需要提供EIA-RS-232C标准所需的信号线,以连接MODEM或终端。 串行接口电路通常由可编程串行接口芯片(如USAR和UART)、波特率发生器、电平转换器和地址译码电路构建,它们协同工作以实现串行通信。在Linux系统中,开发者可以利用`/dev/ttyS*`设备节点和`termios`结构体来配置串口参数并进行读写操作。