芯片通讯接口大全(在写中)
目录
CAN通讯:
串口通讯:
iic通讯:
spi通讯:
LIN通讯:
One-Wire通讯:
SWD通讯:
JTAG通讯:
SDIO通讯:
CAN通讯:
主要应用功能:
多主机一总线:
一条总线上每个节点都可独立的收发,并且自带仲裁机制,谁优先级高谁先通讯
数据异常校验(自动):
can控制器会自动对要传输的数据进行计算添加crc,对要接收的数据校验crc
高传输速度:
高达1Mbps
高抗干扰:
使用差分信号传输
超长通讯距离:
低速10公里,高速40米
参考资料:
CAN控制器
CAN控制器是CAN通信的“协议处理器”,负责执行CAN协议的相关操作。其主要功能包括:
数据帧处理:构建、解析和校验数据帧。仲裁:控制多个节点对总线的访问,优先级较高的节点会先发送数据。错误检测与处理:通过CRC、位错误检测等确保数据的完整性。数据传输控制:发送数据帧和接收数据帧,管理FIFO缓存。
主要任务:生成、解析数据帧,处理协议层的逻辑,包括错误检测、仲裁等。
CAN收发器
CAN收发器负责物理层信号的转换。其功能包括:
信号转换:将CAN控制器发送的数字信号转换为差分信号,发送到CAN总线上;将接收到的差分信号转换为数字信号,交给CAN控制器。总线驱动:驱动CAN总线的电平信号,保证信号稳定传输。电平监测:监测CAN总线的状态,确保电平正常,支持高速传输。
主要任务:进行数字信号与差分信号之间的转换,确保数据可靠传输。
数据帧
数据帧用于发送实际的数据,是CAN总线中最常用的帧类型。
字段名称长度描述起始位(SOF)1 位通知总线开始发送数据,所有节点同步检测此位。标识符(ID)11 位(标准帧)或 29 位(扩展帧)决定消息的优先级(ID越小优先级越高)。控制字段6 位包括帧类型(数据帧)及数据长度代码(DLC)。数据字段0-8 字节实际发送的数据内容(标准CAN最多8字节)。CRC 校验字段15 位用于错误检测,包括 CRC 段(14 位)和 CRC 定界符(1 位)。确认字段(ACK)2 位由接收方发送确认信号:1 位 ACK 槽,1 位 ACK 定界符。结束位(EOF)7 位固定为隐性位,表示帧结束。间隔段(IFS)可变(3 位)帧间间隔段,用于节点复位和准备发送下一帧。
示例 假设数据帧发送以下内容: 标识符:0x123(标准帧,优先级高)。 数据字段:0xDE, 0xAD, 0xBE, 0xEF(4 字节)。 数据长度:4 字节(DLC = 4)。
字段名称示例值长度起始位(SOF)01 位标识符(ID)0b00010010001111 位控制字段0b000001006 位数据字段0xDEADBEEF32 位CRC 校验字段0xABCDE15 位确认字段(ACK)0b102 位结束位(EOF)0b11111117 位
远程帧
远程帧用于请求其他节点发送指定标识符的数据。
字段名称长度描述起始位(SOF)1 位通知总线开始发送远程帧。标识符(ID)11 位(标准帧)或 29 位(扩展帧)请求数据的消息标识符。控制字段6 位包括帧类型(远程帧)和请求的数据长度代码(DLC)。数据字段0 字节无实际数据内容(远程帧的数据字段为空)。CRC 校验字段15 位用于检测帧传输中的错误。确认字段(ACK)2 位与数据帧相同,由接收方发送确认信号。结束位(EOF)7 位固定为隐性位,标志远程帧的结束。间隔段(IFS)可变(3 位)帧间间隔段,用于节点复位和准备。
示例 假设远程帧发送以下内容: 标识符:0x456(标准帧)。 请求数据长度:4 字节(DLC = 4)。 数据字段为空。
字段名称示例值长度起始位(SOF)01 位标识符(ID)0b01000101011011 位控制字段0b000011006 位数据字段空0 位CRC 校验字段0x1234515 位确认字段(ACK)0b102 位结束位(EOF)0b11111117 位
错误帧
错误帧由检测到错误的节点发送,用于通知总线上的所有节点发生了错误。
字段名称长度描述错误标志6 位(主动)或 6 位隐性(被动)表示发生错误的节点状态。错误定界符8 位隐性位,用于分隔错误标志与后续字段。
示例 假设发送一个主动错误帧: 错误标志:6 位显性位。 错误定界符:8 位隐性位。
字段名称示例值长度错误标志0b1111116 位错误定界符0b111111118 位
过载帧
过载帧用于通知总线当前节点无法处理接收数据。
字段名称长度描述过载标志6 位连续显性位,标志总线过载状态。过载定界符8 位隐性位,用于分隔过载帧与其他帧。
示例 假设发送一个过载帧: 过载标志:6 位显性位。 过载定界符:8 位隐性位。
字段名称示例值长度过载标志0b1111116 位过载定界符0b111111118 位
基本初始化可配置选项
波特率(Prescaler):
决定CAN总线的数据传输速率,通常为125kbps、250kbps、500kbps或1Mbps。通过时钟频率和分频器计算得到,可根据需要调整。 工作模式(Mode):
正常模式:普通通信模式,节点可正常发送和接收数据。回环模式:自检模式,数据不会发送到总线,而是回传到自身接收。静默模式:监听模式,只接收数据,不发送帧或参与仲裁。静默回环模式:结合回环和静默模式,用于自检和测试。 同步跳跃宽度(SyncJumpWidth):
定义CAN控制器在时钟不同步时允许的时间调整范围,用于提升总线的抗干扰能力。常见值为1个或2个时间量子(TQ)。 时间分段(TimeSeg1和TimeSeg2):
决定CAN帧的采样点位置。时间段1(TimeSeg1):采样点之前的信号处理时间,通常较长。时间段2(TimeSeg2):采样点之后的信号处理时间,通常较短。 自动功能:
自动关闭总线(AutoBusOff):当节点错误过多时,自动从总线中断开,避免影响其他节点。自动唤醒(AutoWakeUp):当总线恢复活动时,节点可自动恢复工作。自动重传(AutoRetransmission):发送失败时自动重试,直到发送成功或达到限制。
过滤器可配置选项
过滤器用于筛选接收的CAN帧,只接收感兴趣的消息,以减少CPU的处理负担。
过滤器标识符(Filter ID):
定义需要接收的消息标识符,通常为11位(标准帧)或29位(扩展帧)。 过滤器掩码(Filter Mask):
定义标识符中哪些位需要精确匹配,哪些位可以忽略。 过滤器模式:
掩码模式:通过掩码选择性接收消息,灵活性较高。列表模式:仅接收明确列出的标识符,精确但范围受限。 过滤器位宽:
16位过滤器:用于较小标识符范围的筛选(如标准帧)。32位过滤器:用于更大范围或扩展帧的筛选。 FIFO分配:
定义接收的消息存储在哪个FIFO缓冲区(FIFO0或FIFO1),便于分类处理。
数据帧和发送可配置选项
发送CAN帧时需要设置帧头信息和数据字段。
标识符类型:
标准标识符(Std ID):11位长度,适合简单网络。扩展标识符(Ext ID):29位长度,适合更复杂的网络拓扑。 帧类型:
数据帧:用于发送实际数据。远程帧:用于请求其他节点发送指定标识符的数据。 数据长度代码(DLC):
定义数据字段的字节数,范围为0~8字节(标准CAN)。 发送优先级:
通过标识符的数值控制优先级,值越小优先级越高。
接收可配置选项
接收帧时,CAN控制器会将帧解析后存入FIFO缓冲区,用户可根据需要进行处理。
接收FIFO:
CAN控制器有两个接收FIFO(FIFO0和FIFO1),可以根据过滤器分配消息存储到不同FIFO中。 FIFO模式:
锁定模式:FIFO满时丢弃新数据,保留旧数据。覆盖模式:FIFO满时覆盖旧数据,接收新数据。
错误处理可配置选项
CAN总线具有完善的错误检测和处理机制,可以配置相关选项以提高系统可靠性。
错误类型检测:
位错误:数据位和期望值不符。填充错误:数据填充规则被破坏。CRC错误:接收到的数据CRC校验失败。确认错误:未收到其他节点的ACK确认。 总线关闭:
当节点错误过多时自动关闭,避免影响总线。 错误恢复:
错误清除后节点可以自动恢复工作。
工作模式扩展功能选项
CAN的基本功能可以通过配置实现更多扩展功能。
时间戳:
在发送或接收帧时记录时间信息,用于同步或调试。 远程帧响应:
节点自动响应远程帧请求,发送对应标识符的数据帧。 回环自检:
配置回环模式进行自测试,检查CAN硬件功能是否正常。
CAN通信协议工作原理
数据帧的构造与发送
CAN总线采用的是非破坏性仲裁和基于优先级的消息传递。其数据帧由多个部分组成,包括起始位、标识符、控制字段、数据字段、CRC校验、ACK确认等。数据帧从控制器发出时,经过CAN收发器驱动到CAN总线上。
发送数据帧的过程简述如下:
数据准备:上层应用将数据送入CAN控制器,CAN控制器构建CAN帧(包括标识符、数据字段等)。仲裁阶段:多个节点同时请求发送数据时,CAN协议会根据标识符的优先级进行仲裁。优先级越高(标识符数值越小)的节点可以优先发送数据。发送过程:一旦仲裁成功,CAN控制器将数据帧发送到总线上。数据通过CAN收发器转换为差分信号,在总线上传输。
总线仲裁
在多节点的CAN网络中,多个节点可能同时尝试发送数据。CAN采用非破坏性仲裁机制来避免冲突。
每个数据帧的标识符包含优先级信息,标识符越小,优先级越高。当多个节点同时发送数据时,它们会从标识符的高位开始比较。低优先级的节点在发现自己发送的标识符较大的时候,会立即停止发送,从而避免冲突。由于CAN总线的仲裁是基于位的(bit-wise arbitration),这使得数据传输不会丢失,也不会破坏总线的其他通信。
错误检测与处理
CAN总线采用多种错误检测机制,确保数据传输的可靠性:
位错误检测:通过检测每一位的值是否符合预期来发现错误。填充错误检测:用于检测数据传输过程中是否违反了位填充规则(连续5个相同的位时,必须插入反向的填充位)。CRC校验:通过对数据帧进行CRC校验,检测传输过程中是否发生错误。确认错误检测:接收节点在成功接收数据后通过ACK位进行确认。如果发送节点没有收到确认,表明数据发送失败。
在出现错误时,CAN控制器会通过错误标志告知上层应用,并根据配置执行错误处理,如重新发送数据、关闭总线等。
总线通信的典型工作流程
数据发送
数据生成:应用层或上层协议生成需要发送的数据,送入CAN控制器。帧构建:CAN控制器将数据封装成CAN帧,包括起始位、标识符、数据、CRC校验等。仲裁:如果多个节点同时请求发送,CAN控制器进行标识符优先级仲裁,优先级低的节点退让。数据传输:数据帧经过CAN控制器驱动,通过CAN收发器转换为差分信号在总线上传播。确认接收:接收节点解析数据帧,并发送ACK确认帧。如果未收到ACK确认,则重新发送数据。
数据接收
信号接收:CAN收发器接收总线上的差分信号并转换为数字信号。帧解析:CAN控制器对接收到的数据进行解析,提取标识符、数据字段等。错误检测:CAN控制器对接收到的数据进行CRC校验、位错误检查等,确保数据的完整性。数据传递:如果数据帧有效,CAN控制器将数据传递给上层应用处理。
注意点:
CAN通讯的竞争,优先级等先进的功能是通过CAN控制器完成的,我们难以撰写底层的驱动程序,我们是根据芯片厂家提供的sdk寻找CAN通讯配置示例,按照同样的方式去配置CAN控制器,数据收发都是通过can控制器直接传递到芯片内存中。要注意是,这个和串口通讯是不太一样的,串口通讯或许我们还能通过配置内部的寄存器调整波特率,校验位等,但CAN通讯太复杂了,一般只能依靠厂家的写好的CAN驱动去使用,无法配置寄存器,厂家一般也不给这部分的寄存器信息。配置好CAN控制器后,我们需要收发的数据会直接出现在你设定的内存位置上面。
串口通讯:
主要应用功能:
参考资料:
注意点:
iic通讯:
主要应用功能:
参考资料:
注意点:
spi通讯:
主要应用功能:
参考资料:
注意点:
LIN通讯:
主要应用功能:
参考资料:
注意点:
One-Wire通讯:
主要应用功能:
参考资料:
注意点:
SWD通讯:
主要应用功能:
参考资料:
注意点:
JTAG通讯:
主要应用功能:
参考资料:
注意点:
SDIO通讯:
主要应用功能:
参考资料:
注意点: