详解Can协议

①硬件构成:

高速CAN:两线电压相同、闭环网络 (120Ω电阻作用:防止回波反射、总线空闲时收紧两根信号线【恢复1状态】)

低速CAN:两线电压不同、开环网络(2.2kΩ电阻作用:防止回波反射)

②电平规范:

【高速CAN】

压差为0V:逻辑1(隐性电平)

压差为2V:逻辑0(显性电平)

【低速CAN】

压差为-1.5V:逻辑1(隐性电平)

压差为3V:逻辑0(显性电平)

③数据帧:

标准格式:

SOF[0] 报文ID[11bit] RTR[1bit] IDE[1bit] 保留位[1bit] DLC[4bit] 载荷[0-64] CRC[15bit] CRC界定符[0] ACK槽[1bit] ACK界定符[1bit] EOF[7bit个1]

SOF:因为总线默认为1所以帧起始为0表示帧开始

报文ID:区分消息类型、划分仲裁优先级

RTR:远程请求标志位[数据帧0、遥控帧1] 数据帧优先级高于遥控帧

IDE:区分标准格式[0]还是扩展格式[1]

DLC:数据段长度,单位为字节

ACK应答:发送方发1,接收方发0(收紧) 可被多从机应答(广播、线与特性)

界定符设计目的:为操作电平留出时间

EOF:结束标志

帧类型:

        ①数据帧

        ②遥控帧:RTR为1

        ③错误帧:位错误、填充错误、CRC错误、格式错误、应答错误时总线上的设备会发出错误帧来破坏数据,同时终止当前的发送【发送六个相同电平的bit】

主动错误:立刻发送6bit逻辑0 + 8bit 逻辑1错误标识

被动错误:立刻发送6bit逻辑1 + 8bit 逻辑1错误标识

根据线与特性,发送被动错误的设备不会影响其他设备【防止因单设备故障传染整个总线】

        ④过载帧:接收方接收到大量数据无法及时处理时发出过载帧,延缓发送方的数据发送

位填充:发送方每发送五个相同电平的位后,自动追加一个相反电平的填充位;接收方检测到填充位时,自动移除填充位,恢复出原始数据。如果填充后才出现五个相同的电平,则需要继续添加位填充

作用:①增加波形的定时信息,防止波形长时间无变化

          ②将正常数据流与错误帧和过载帧区别开来

             ③保持总线活跃状态【大于11个1状态即认定总线空闲】

④位同步:

        ①CAN将每个bit的时长进行了更细致的划分,划分的最小单位是Tq(可指定)

SS【1Tq】

PTS【1~8Tq】

PBS1【1~8Tq】

PBS2【2~8Tq】

SS:同步段,如果条边沿在SS端内则说明达成同步

PTS:用来抵消物网络的物理延迟【=(发送单元的输出延迟+传播延迟+输入延迟)*2】

PBS端:相位缓冲段,采样点在PBS1和PBS2之间,调整二者长度即可改变采样点

        ②硬同步:以SOF为准,将第一个采样点与第一位对齐【进入SS段】【仅发生在EOF】

        ③再同步:SJW【最大补偿的Tq数量(1-4个Tq)】 【发生在除SOF的每个跳变沿】

·跳变沿在SS之后:接收方时钟比发送方,在PBS1后添加SJW位以延后采样

·跳变沿在SS之前:接收方时钟比发送方,将PBS2减少SJW位以提前采样(让下一帧恢复正常)

        ④波特率=1/bit时长(即SS+PTS+PBS1+PBS2)

⑤仲裁

        ①先占先得:如果当前总线已被占用,则其他任何设备都不能再开始发送数据帧或遥控 帧(错误帧、过载帧破坏数据例外)

        ②非破坏性仲裁:若多个设备的发送请求同时到来,则CAN协议会根据仲裁段进行仲裁,ID号小点优先发送 (实现要求:线与、回读(每个设备发送一位数据后都会回读总线当前电平,确认已发出))

位填充不会改变优先级:如果原本A>B,要使填充后B>A,那么A和B前面的位都要进行填充,那么就不会影响优先级了

标准格式11位ID号和扩展格式的高11位一致时,标准格式的优先级更高(标准格式RTR为0,扩展格式SRR为1)

⑥错误处理

        ①错误类型

        ①位错误:回读时比较输出电平和总电平(不含填充位)不一致时(范围SOF-EOF)

        ②填充错误:在需要位填充的段(SOF-CRC)内检测到6位电平相同

        ③CRC错误:收到的crc码和计算出的不同

        ④格式错误:检测到与固定格式(CRC界定符、ACK界定符、EOF标志)电平状态相反 的位时

        ⑤ACK错误:发送方未等到ACK应答(即发送方释放总线后总线没有被拉开到状态‘0’)

②错误状态

        ①主动错误状态:正产参与通信、可以发送主动错误。每个设备初始都为主动错误状态

        ②被动错误状态:正常参与通信、但只能发送被动错误。设备发送过多主动错误后进入 被动错误状态

        ③总线关闭状态:不能参与通信、设备处于被动错误状态后依然频繁发送被动错误时进 入该状态【stm32f103添加了用来开关总线关闭状态的设备是否能自动返回主动错误状态】

Can如何实现错误状态切换?

每个设备维护TEC(Transmit Error count)和REC(Receive Error count)

发送或接收失败一次,对应的变量值+1;发送或接收成功一次,对应的变量值也会-1

主动错误状态 —[TEC或REC>127时]—> 被动错误状态 —[TEC>255]—> 总线关闭态

^                                                                                                                 |

|______________总线上检测到128次连续的11bit隐形位_____________|

⑦STM32f103中的can资源

发送邮箱状态机示意图:

RQCP:请求完成

TXOK:发送成功

TME:当前邮箱空

挂号1

挂号2

挂号3(溢出)

FMP=0b

FOVR=0

FMP=01b

FOVR=0

FMP=10b

FOVR=0

FMP=11b

FOVR=0(1)

FMP:报文数量

FOVR:FIFO溢出

NART自动重传:发送失败后再次进入预定状态(开启)发送还是直接进入空置状态(关闭)

TXFP优先级配置:发送优先级设置。置0:按标识符大小发送;置1:FIFO

RFLM锁定:置1:FIFO锁定,丢弃新数据;置0:FIFO不锁定,新数据总是覆盖最后收到的报文(邮箱2)

标识符过滤器:

共14个过滤器,每个过滤器具备两个32位寄存器

①列表模式:将需要的ID号写入,每个过滤器可选两个扩展id或四个标准id

②掩码模式:接收特定范围id的报文

测试模式:

①静默模式:用来分析总线的互动,不会对总线造成影响

②回环模式:自发自收,rx断开,但可以在tx上看到信息

③静默回环模式:自发自收,rx、tx均断开

工作模式:

①初始化模式:用于配置can外设,该模式下禁用报文的收发

②正常模式:收发报文

③睡眠模式:can外设时钟停止,可软件或硬件唤醒

④AWUM:置1:总线活动时自动唤醒;置0:手动唤醒

Stm32f103的can控制器位时序:

SS(1Tq)

PBS1(1-16Tq)

PBS2(1-8Tq)

波特率=时钟频率/SS+PBS1+PBS2

Stm32f103的can控制器中断:

①发送中断:发送邮箱空时进入

②FIFO 0中断:收到一个报文、FIFO 0满、FIFO 0溢出时进入

FIFO 1中断:收到一个报文、FIFO 1满、FIFO 1溢出时进入

④状态改变及错误中断:ERROE、唤醒、进入睡眠时进入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值