遇到的問題
問題的發(fā)現(xiàn)
最近在開發(fā)Canopen項(xiàng)目中,進(jìn)行一主多從設(shè)備通信時,主站發(fā)送同步幀,兩個從站往往只有幀ID優(yōu)先級高的設(shè)備可以讓主站接收到數(shù)據(jù),而另一個從設(shè)備的數(shù)據(jù)往往接收不到。但當(dāng)我關(guān)閉其中一個can從設(shè)備,另一個就可以和主站設(shè)備通信正常。經(jīng)過排查發(fā)現(xiàn),是由于Can的沖突解決機(jī)制的問題。
在CAN多機(jī)通信中,兩個設(shè)備同時發(fā)送數(shù)據(jù),幀ID優(yōu)先級高的CAN設(shè)備會“搶占”總線,而另外的設(shè)備需要選擇沖突解決策略。
CAN總線的一般沖突機(jī)制
- 非破壞性搶占機(jī)制(Non-Destructive Arbitration): CAN 使用一種非破壞性的仲裁機(jī)制,這意味著當(dāng)兩個節(jié)點(diǎn)同時發(fā)送消息時,通過識別消息標(biāo)識符中的位的值來確定哪個消息具有更高的優(yōu)先級。具體來說,CAN總線上的每個節(jié)點(diǎn)都會根據(jù)其消息標(biāo)識符的比特值來判斷是否能夠“搶占”總線。
- 標(biāo)識符比較: 在CAN總線上,每個節(jié)點(diǎn)在發(fā)送消息之前會監(jiān)測總線上的信號電平。如果一個節(jié)點(diǎn)正在發(fā)送1,而另一個節(jié)點(diǎn)正在發(fā)送0,那么正在發(fā)送1的節(jié)點(diǎn)會發(fā)現(xiàn)沖突,并會停止發(fā)送消息。這種標(biāo)識符比較機(jī)制有助于節(jié)點(diǎn)在發(fā)送消息時檢測沖突并進(jìn)行沖突解決。
- 仲裁場(Arbitration Field): CAN消息包含一個仲裁場,它包含消息標(biāo)識符。在這個字段中,CAN節(jié)點(diǎn)通過比較消息標(biāo)識符中的位來決定哪個節(jié)點(diǎn)具有更高的優(yōu)先級。較低優(yōu)先級的節(jié)點(diǎn)將會自動停止發(fā)送,并等待較高優(yōu)先級的節(jié)點(diǎn)完成其消息的發(fā)送。
- 回退機(jī)制: 如果多個節(jié)點(diǎn)嘗試同時發(fā)送消息,沖突解決后,較低優(yōu)先級的節(jié)點(diǎn)會等待一段隨機(jī)時間后重新嘗試發(fā)送消息。這種回退機(jī)制有助于減少沖突的再次發(fā)生,提高總線的效率。
總的來說,CAN總線的沖突機(jī)制通過使用非破壞性的仲裁和標(biāo)識符比較,以及回退機(jī)制,確保了多個節(jié)點(diǎn)之間的有序通信,使得總線上的消息能夠按照優(yōu)先級順序進(jìn)行傳輸。這種設(shè)計(jì)使得CAN總線非常適用于要求實(shí)時性和可靠性的應(yīng)用,例如汽車控制系統(tǒng)。
STM32中的CAN沖突機(jī)制
我們在進(jìn)行CAN的多機(jī)通信時,往往希望不會丟幀。遇到CAN總線沖突時,受阻的CAN從設(shè)備進(jìn)行自動回傳是我們需要的。而打開沖突回傳只需要在CAN初始時對AutoRetransmission 進(jìn)行使能。
hcan1.Init.AutoRetransmission = ENABLE;
AutoRetransmission 是用于配置CAN控制器的自動重傳(Automatic Retransmission)功能。在CAN通信中,當(dāng)節(jié)點(diǎn)發(fā)送消息但未收到確認(rèn)時,可以選擇是否自動進(jìn)行重傳。當(dāng) AutoRetransmission 被啟用(ENABLE)時,如果CAN控制器未收到確認(rèn),則會自動重傳先前的消息。這有助于提高消息的可靠性,特別是在有可能發(fā)生干擾或沖突的環(huán)境中。當(dāng) AutoRetransmission 被禁用(DISABLE)時,如果發(fā)送的消息未收到確認(rèn),控制器將不會自動進(jìn)行重傳。在這種情況下,需要由軟件來處理重傳邏輯,開發(fā)者可以通過程序來控制何時以及如何進(jìn)行重傳。
-
CAN總線
+關(guān)注
關(guān)注
145文章
1980瀏覽量
132706 -
CAN
+關(guān)注
關(guān)注
57文章
2916瀏覽量
467514 -
通信
+關(guān)注
關(guān)注
18文章
6201瀏覽量
137722 -
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364246
發(fā)布評論請先 登錄
淺談CAN總線外圍電路設(shè)計(jì)



CAN總線學(xué)習(xí)①-總線仲裁機(jī)制 精選資料分享
can總線故障一般原因及問題解決方法
淺談局部網(wǎng)絡(luò)管理 基于CAN總線的局部網(wǎng)絡(luò)管理機(jī)制設(shè)計(jì)
can總線仲裁機(jī)制詳解

淺談總線通訊數(shù)據(jù)沖突的問題的解決
CAN總線與一般的通訊系統(tǒng)總線相比,它的優(yōu)勢是什么
CAN總線終端電阻為什么是120Ω
淺談CAN總線終端電阻的作用

評論