CANOpen系列教程05_CAN匯流排同步與位填充、優先順序的決定
該系列教程已經在我的個人微信公眾號**「strongerHuang」**整理並分享。因在這裡分享文章,還需單獨整理一遍,時間有限,就不再一一重複整理出來了。
想要檢視更多相關教程,可以關注我的個人微信公眾號「strongerHuang」,回覆【CANOpen系列教程】即可檢視。
申明:該文件由作者「strongerHuang」原創釋出,僅供個人學習使用,轉載請公眾號聯絡作者授權。版權所有,禁止商用。
一、寫在前面
繼續為大家更新CAN匯流排協議相關內容,這些內容其實也比較重要,會直接影響到你後期CAN匯流排的程式設計,誇張一點的說會影響到你的軟體架構。
本文內容相對來說比較容易理解,初學者有必要了解一下。
二、位填充
位填充是為防止突發錯誤而設定的功能。當同樣的電平持續 5 位時則新增一個位的反型資料。
這個功能很好理解,如下圖所示。位填充的資料不需要程式設計控制,由控制器自動完成。其目的也是提高CAN匯流排的穩定性。
(1) 傳送單元的工作
在傳送資料幀和遙控幀時, SOF~CRC 段間的資料,相同電平如果持續 5 位,在下一個位(第 6 個位)則要插入 1 位與前 5 位反型的電平。
(2) 接收單元的工作
在接收資料幀和遙控幀時, SOF~CRC 段間的資料,相同電平如果持續 5 位,需要刪除下一個位(第 6 個位)再接收。如果這個第 6 個位的電平與前 5 位相同,將被視為錯誤併發送錯誤幀。
三、優先順序的決定
前面講述“CAN 匯流排差分訊號”時描述了顯性和隱性,其實這是CAN匯流排的特點,也是決定CAN匯流排優先順序比較重要的功能。
在CAN匯流排空閒態,最先開始傳送訊息的單元獲得傳送權。
多個單元同時開始傳送時,各發送單元從仲裁段的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續傳送。
上圖描述了CAN控制仲裁的過程,單元2最終獲得了搶佔CAN匯流排的權利,也就是說單元2具有更高的優先順序。
當單元1 仲裁失利時,自動轉換為接收(本來該傳送,優先順序比別人低,就開始接收資料了。 同時,控制器將會在下一輪繼續傳送這次未完成的資料)。
3.1 資料幀和遙控幀的優先順序
具有相同 ID 的資料幀和遙控幀在總線上競爭時,仲裁段的最後一位(RTR)為顯性位的資料幀具有優先權,可繼續傳送。
資料幀和遙控幀的仲裁過程如下圖:
3.2 標準格式和擴充套件格式的優先順序
標準格式 ID 與具有相同 ID 的遙控幀或者擴充套件格式的資料幀在總線上競爭時,標準格式的 RTR 位為顯性位的具有優先權,可繼續傳送。
提示:
不明白資料幀和遙控幀,標準格式和擴充套件格式之間差異的朋友,建議參看我上一篇文章《CANOpen系列教程04》。
四、其他
CAN匯流排協議的重要內容在這前面基本是講述的差不多了,還有一些不是很重要的內容,比如硬體設計需要在CAN_H和CAN_L之間新增一個120歐電阻,匯流排的傳輸距離等。
接下來的文章會結合STM32晶片整合CAN控制器、例程講述如何程式設計控制CAN匯流排資料的收發等。
五、說明
1.該文件部分文字來自網路,僅供個人學習使用,版權所有,禁止商用。
2.本文由我一個人編輯並整理,難免存在一些錯誤。
3.為了方便大家平時公交、地鐵、外出辦事也能用手機隨時隨地檢視該教程,該系列教程已更新於微信公眾號【strongerHuang】,關注微信公眾號回覆【CANOpen系列教程】即可檢視全系列教程。
六、最後
我的微信公眾號(ID:strongerHuang)還在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩內容,如果想檢視更多內容,可以關注我的微信公眾號。