CAN总线技术 | 数据链路层04 - CAN节点状态与错误处理机制
文章目錄
- 一、前言
- 二、錯誤檢測區域
- 三、錯誤幀
- 四、CAN節點狀態
- 4.1、FDCAN錯誤計數器寄存器(FDCAN_ECR)
- 4.2、FDCAN協議狀態寄存器(FDCAN_PSR)
一、前言
CAN的錯誤類型有如下圖所說的5種,其中:
- 應答錯誤與位發送錯誤會出現在CAN發送的節點(CAN發送端)
- CRC錯誤與位填充錯誤會出現在CAN接收的節點(CAN接收端)
二、錯誤檢測區域
如下是每一個錯誤發生在CAN報文中的區域,5種錯誤類型可以同時發生。位檢測的區域最長,可以看到采樣點的匹配是多么的重要(一般不建議相差超過6% - 7%)。
三、錯誤幀
錯誤幀長什么樣子?一共有兩種錯誤幀,那到底發哪一種錯誤幀呢?取決于CAN節點的狀態,是主動錯誤狀態還是被動錯誤狀態。
四、CAN節點狀態
正常情況下,CAN節點處于主動錯誤的狀態,在主動錯誤狀態下發生錯誤時,發送錯誤幀(6個連續顯性電平位+8個連續隱性電平位)。
CAN節點在發送錯誤計數器或接收錯誤計數器大于127時,CAN節點將進入“被動錯誤”狀態,并發送錯誤幀(6個連續隱性電平位+8個連續隱性電平位)。在發送錯誤或者接收錯誤減少之后,又會切換回“主動錯誤”狀態。當發送錯誤計數器大于255時,CAN節點將進入“總線關閉(Bus_Off)”狀態,脫離CAN總線,不影響其他CAN節點的通訊。值得注意的是,應用程序負責將CAN控制器切換到“總線關閉(Bus_Off)”的狀態,CAN控制器不會自動切換到“總線關閉”狀態。
4.1、FDCAN錯誤計數器寄存器(FDCAN_ECR)
最近正在使用STM32H743開發CANopen節點,看看FDCAN控制器到底有沒有REC與TEC寄存器。通過查看STM32H743的編程參考手冊,找到錯誤計數器寄存器。在這個計數器里面能找到TREC(接收錯誤計數器)與TEC(發送錯誤計數器),如下圖所示。
4.2、FDCAN協議狀態寄存器(FDCAN_PSR)
CAN節點的狀態,從這個寄存器可以了解CAN節點在哪個錯誤狀態(主動錯誤或被動錯誤)。
接著,也找到了總線關閉(Bus_Off)寄存器。經過測試看到,當接收錯誤或發送錯誤一直累加到最后不能累加時,Bus_Off寄存器并沒有發生變化,所以Bus_Off是需要應用程序去修改的。
最后,也能看到從LEC位找到上一個CAN錯誤的類型。當然啦,LEC位等于000最好!
總結
以上是生活随笔為你收集整理的CAN总线技术 | 数据链路层04 - CAN节点状态与错误处理机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python后台返回cookie_Dja
- 下一篇: ADB投屏_最强开源投屏神器,跨平台电脑