通信总线协议学习整理

一、UART

UART是一个大家族,其包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。

嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。常用的就三根引线:发送线TX、接收线RX、电平参考地线GND。

 1.1    电路示意图

 

1.2    通信协议

将传输数据的每个字符一位接一位地传输。

 

起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。

数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。

奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。

空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

波特率:数据传输的速率。有以下几个档位:300、600、1200、2400、4800、9600、19200、38400、43000、56000、57600、115200.当然也可以自定义。在数据传输和接收双方,需要预先统一波特率,以便正确的传输数据。

 

二、IIC 总线

I²C (Inter-Integrated Circuit)。其拥有一根数据线SDA和一根时钟线SCL。其总线通过上拉电阻与电源相连接。每个接到I2C总线上的器件都有唯一的地址。其中,主动发起操作的一方为主机,另外一方为从机。

1.1   电路示意图

 

1.2 数据传输

当没有数据传输的时候,两根总线都为高电平;当采集IIC上的数据时,其时钟线SCL必须是高电平且SDA的数据必须保持稳定不变---将SDA的电平与SCL的高电平进行“与”操作后,以便确定SDA上是1还是0;在SCL为低电平的时候,SDA上的数据可以进行跳变。

数据传输开始时,需要发送一个起始信号;数据传输结束后,需要发送一个终止信号;每8bit数据传输结束,都需要一个ACK。起止信号都有Master发出,而ACK则可能由Master或者SLAVE来发出。数据的传输采用大端传输。

开始信号:SCL为高电平,SDA的电平由高跳到低表示开始信号。

终止信号:SCL为高电平,SDA的电平由低跳到高表示终止信号。

                  

 

1.3 数据协议

        

 

1.4   I2C读写流程

 

参考:

http://dpinglee.blog.163.com/blog/static/14409775320112239374615

https://en.wikipedia.org/wiki/I%C2%B2C

http://wenku.baidu.com/view/7c310976f46527d3240ce0e5

http://wenku.baidu.com/view/bdb46aa60029bd64783e2c6f

 

三、SPI总线

SPI(Serial Peripheral Interface)是一种串行串行同步通讯协议,由一个主设备和一个或多个从设备组成。其拥有四根(类)硬脚引线,分别为 SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(片选)。因为一个主设备可以挂多个从设备,则通过片选引脚对从设备进行选择。从设备的工作时钟则是来自于主设备的SCK线。

1.1    电路示意图

 

 

1.2    数据的传输

SPI在数据传输的时候,需要确定两件事情:其一,数据是在时钟的上升沿采集还是下降沿采集;其二,时钟的初始(空闲)状态是为高电平还是低电平。而I2C的空闲状态,时钟线为高电平;数据采集的时候,时钟线也为高电平。但SPI给出了更自由的方式。

CPOL:时钟极性, 表示 SPI 在空闲时, 时钟信号是高电平还是低电平。

CPHA:时钟相位, 表示 SPI 设备是在 SCK 管脚上的时钟信号变为上升沿时触发数据采样, 还是在时钟信号变为下降沿时触发数据采样。

那么,SPI CPOL有两种可能,CPHA有两种可能,则SPI数据传输就有四种可能---按照标准的说法,SPI数据传输就有四种模式。

 

1.3    SPI读写

SPI在硬件设计上采用的双数据线制,根据设计,在SPI通信过程中,主从设备之间会形成一个数据环形链路---也即是,主设备向从设备写一次数据,从设备就会回一次数据(至于该从设备回复的数据是否有效,则另当别论---如果有效,主设备就把它读入;如果无效,则丢弃即可)。

 

<think>好的,我现在要处理用户关于CAN总线通信协议的提问。首先,我需要理解用户的需求:他们想要一个概述和关键知识点。根据用户提供的引用资料,我需要整合这些信息,并确保符合系统级指令,比如正确使用LaTeX格式和生成相关问题。 首先,用户引用了四篇资料,其中提到了CAN总线的物理层、数据链路层、数据帧结构、网络拓扑和应用层协议。我需要把这些内容组织成结构化的回答,确保每个部分都有对应的引用标识。例如,物理层和数据链路层的功能在引用[1]和[3]中都有提到,需要正确标注。 接下来,注意使用中文回答,并且数学表达式需要用$...$或$$...$$格式。例如,在解释位填充时,可能需要提到位速率,但用户提供的引用中没有具体的数学公式,所以可能不需要使用LaTeX数学表达式。不过,如果有提到任何技术参数,比如采样点或位时间,可能需要检查是否需要公式,但根据现有资料,似乎不需要。 然后,生成相关问题。根据用户提供的示例,问题应围绕CAN总线的关键知识点展开,比如帧类型、错误处理、应用场景等。要确保问题有针对性,并且基于提供的引用内容,比如引用[4]提到网络拓扑,可以生成相关问题。 同时,需要检查回答的结构是否清晰,分点列出关键知识点,每个知识点下再分小点,比如协议分层、数据帧结构等。代码块部分在用户示例中使用了Python,但CAN总线可能涉及其他类型的代码或结构,比如数据帧格式。不过用户提供的引用中没有代码示例,所以可能不需要代码块,但需要确认。 最后,确保所有引用正确标注,例如在提到物理层和数据链路层时引用[1]和[3],在数据帧结构时引用[2],网络拓扑引用[4]。需要避免遗漏引用,同时自然地将标识放在句末。 现在,我需要将以上思考整理成一个符合要求的回答,结构清晰,分点说明,并附上相关问题。同时,确保不添加任何用户不可见的内容,仅输出最终答案。</think>### CAN总线通信协议概述及关键知识点 #### 1. **协议分层与功能** - **物理层**:定义电气特性(如电压、传输速率)和总线拓扑结构(如线性总线或星型结构)。CAN网络通常由多个节点通过双绞线连接[^4]。 - **数据链路层**:负责数据帧的封装、错误检测、仲裁机制和位填充。通信接口通过**循环冗余校验(CRC)**、**优先级判别**等保证数据传输可靠性[^1][^3]。 - **应用层**:不同协议(如CANopen、J1939)定义具体消息格式与交互逻辑,例如诊断仪与ECU的通信规则。 #### 2. **数据帧结构** CAN数据帧包含以下关键字段: - **仲裁域**:包含标识符(ID),用于优先级仲裁。 - **控制域**:定义数据长度。 - **数据域**:传输实际数据(0-8字节)。 - **CRC域**:校验数据完整性。 - **ACK域**:接收节点确认帧接收成功[^2]。 #### 3. **关键机制** - **非破坏性仲裁**:通过ID优先级解决总线冲突,高优先级帧继续传输。 - **位填充**:每5个连续相同位后插入一个反向位,确保时钟同步。 - **错误检测**:包括CRC校验、帧格式校验和应答错误检测。 #### 4. **网络拓扑与性能** - **拓扑结构**:典型为线性总线,节点通过短支线连接主干,支持多主通信[^4]。 - **实时性**:短帧设计(最长8字节数据)和仲裁机制保障低延迟,适用于车辆控制等实时场景。 #### 5. **应用场景** - **汽车电子**:发动机控制、车身电子系统。 - **工业自动化**:PLC通信、传感器网络。 - **医疗设备**:设备状态监控[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值