目錄
CAN簡介
CAN總線拓撲圖
CAN總線特定
CAN應(yīng)用場景
CAN的物理層
CAN的協(xié)議層
CAN數(shù)據(jù)幀介紹
CAN位時序介紹
數(shù)據(jù)同步過程
硬件同步
再同步
CAN總線仲裁
stm32的CAN控制器
CAN控制器介紹
CAN控制器模式
CAN控制器框圖
接收過濾器
CAN控制器波特率計算
CAN相關(guān)寄存器
CAN主控制寄存器(CAN_MCR)
CAN位時序寄存器(CAN_BTR)
CAN 標(biāo)識符寄存器(CAN_(T/R)IxR)
數(shù)據(jù)長度和時間戳寄存器(CAN_(T/R)DTxR)
CAN低位數(shù)據(jù)寄存器(CAN_(T/R)DLxR)
CAN高位數(shù)據(jù)寄存器(CAN_(T/R)DHxR)
CAN過濾器模式寄存器(CAN_FM1R)
CAN過濾器位寬寄存器(CAN_FS1R)
CAN 過濾器FIFO關(guān)聯(lián)寄存器(CAN_FFA1R)
?CAN 過濾器激活寄存器(CAN_FA1R)
CAN 過濾器組x寄存器(CAN_FxR(1/2))
CAN簡介
????????CAN(Controller Area Network),是IOS國際標(biāo)準(zhǔn)化的串行通信協(xié)議 。為了滿足汽車產(chǎn)業(yè)的“減少線束的數(shù)量”、“通過多個LAN,進行大量數(shù)據(jù)的高速通信”的需求。
CAN總線的發(fā)展史:
- 低速CAN(ISO11519)通信速率10~125Kbps,總線長度可達1000米
- 高速CAN(ISO11898)通信速率125Kbps~1Mbps,總線長度≤40米(經(jīng)典CAN)
- CANFD 通信速率可達5Mbps,并且兼容經(jīng)典CAN,遵循ISO 11898-1 做數(shù)據(jù)收發(fā)
CAN總線拓撲圖
CAN總線由兩根線( CANL 和 CANH )組成,允許掛載多個設(shè)備節(jié)點(低速CAN:20 高速CAN:30)。
CAN總線特定
- ? 多主控制? 每個設(shè)備都可以主動發(fā)送數(shù)據(jù)
- ? 系統(tǒng)的柔軟性? 沒有類似地址的信息,添加設(shè)備不改變原來總線的狀態(tài)
- ? 通信速度? 速度快,距離遠
- ? 錯誤檢測&錯誤通知&錯誤恢復(fù)功能
- ? 故障封閉? 判斷故障類型,并且進行隔離
- ? 連接節(jié)點多? 速度與數(shù)量找個平衡
CAN應(yīng)用場景
CAN總線協(xié)議已廣泛應(yīng)用在汽車電子、工業(yè)自動化、船舶、醫(yī)療設(shè)備、工業(yè)設(shè)備等方面。
CAN的物理層
- CAN使用差分信號進行數(shù)據(jù)傳輸,根據(jù)CAN_H和CAN_L上的電位差來判斷總線電平。
- 總線電平分為顯性電平(邏輯0)和隱性電平(邏輯1),二者必居其一。
- 顯性電平具有優(yōu)先權(quán)。發(fā)送方通過使總線電平發(fā)生變化,將消息發(fā)送給接收方。
電平 |
高速CAN |
低速CAN |
顯性電平(0) |
UCAN_H – UCAN_L=? 2V |
UCAN_H – UCAN_L = 3V |
隱性電平(1) |
UCAN_H – UCAN_L = 0V |
UCAN_H – UCAN_L = - 1.5V |
CAN的協(xié)議層
CAN總線以“幀”形式進行通信。CAN協(xié)議定義了5種類型的幀:數(shù)據(jù)幀、遙控幀、錯誤幀、過載幀、間隔幀,其中數(shù)據(jù)幀最為常用。
幀類型 |
幀作用 |
數(shù)據(jù)幀(Data Frame) |
用于發(fā)送單元向接收單元傳輸數(shù)據(jù)的幀 |
遙控幀(Remote Frame) |
用于接收單元向具有相同ID的發(fā)送單元 請求數(shù)據(jù)的幀 |
錯誤幀(Error Frame) |
用于當(dāng)檢測出錯誤時向其他單元通知 錯誤的幀 |
過載幀(Overload Frame) |
用于接收單元通知其尚未做好接收準(zhǔn)備 的幀 |
間隔幀(Inter Frame Space) |
用于將數(shù)據(jù)幀 及遙控幀與前面的幀 分離開來的幀 |
CAN數(shù)據(jù)幀介紹
- 幀起始:表示數(shù)據(jù)幀開始的段,顯性信號
- 數(shù)據(jù)段:數(shù)據(jù)的內(nèi)容,一幀可發(fā)送0~8字節(jié)數(shù)據(jù)
- 仲裁段:表示該幀優(yōu)先級的段,優(yōu)先級
- CRC段:檢查幀的傳輸錯誤的段
- ACK段:表示確認正常接收的段
- 控制段:表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段
- 幀結(jié)束:表示數(shù)據(jù)幀結(jié)束的段,7個隱性信號
CAN位時序介紹
? CAN總線以“位同步”機制,實現(xiàn)對電平的正確采樣。位數(shù)據(jù)都由四段組成:同步段(SS)、傳播時間段(PTS)、相位緩沖段1(PBS1)和相位緩沖段2(PBS2),每段又由多個位時序Tq組成。
?采樣點是指讀取總線電平,并將讀到的電平作為位值的點。
?根據(jù)位時序,就可以計算CAN通信的波特率。
?注意 : 節(jié)點監(jiān)測到總線上信號的跳變在SS段范圍內(nèi),表示節(jié)點與總線的時序是同步,此時采樣點的電平即該位的電平。
數(shù)據(jù)同步過程
CAN為了實現(xiàn)對總線電平信號的正確采樣,數(shù)據(jù)同步分為硬件同步和再同步。
硬件同步
節(jié)點通過CAN總線發(fā)送數(shù)據(jù),一開始發(fā)送幀起始信號??偩€上其他節(jié)點會檢測幀起始信號在不在位數(shù)據(jù)的SS段內(nèi),判斷內(nèi)部時序與總線是否同步。如果起始信號不在SS段內(nèi),采樣點獲取的電平是不正確的,節(jié)點會采用硬件同步機制進行調(diào)整,把自己的SS段平移到檢測到邊沿的地方,此時采樣點獲取的電平是正確的。
再同步
再同步利用普通數(shù)據(jù)為的邊沿信號進行同步。再同步的情況分為兩種,邊沿信號相對于SS段的位置即超前和滯后。
再同步時,PSB1和PSB2中增加或減少的時間被稱為“再同步步長寬度(SJW)”,其范圍時1-4Tq,限定了SJW的值后,再同步時,不能增加限定長度的SJW值,SJW值較大時,吸收誤差的能力更強,但是通信速率會下降。
CAN總線仲裁
當(dāng)CAN總線處于空閑時,最先開始發(fā)送消息的單元獲取發(fā)送權(quán),當(dāng)多個單元同時發(fā)送時,從報文ID的第一位開始進行仲裁,連續(xù)輸出顯性電平最多的單元可以繼續(xù)發(fā)送,即首先出現(xiàn)隱形電平的單元失去對總線的控制權(quán),變?yōu)榻邮?。競爭失敗的單元自動檢測總線是否空閑,當(dāng)總線空閑會第一時間再次檢測發(fā)送。
stm32的CAN控制器
CAN控制器介紹
?STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本協(xié)議。
?CAN 2.0A 只能處理標(biāo)準(zhǔn)數(shù)據(jù)幀且擴展幀的內(nèi)容會識別錯誤,而CAN 2.0B Active 可以處理標(biāo)準(zhǔn)數(shù)據(jù)幀和擴展數(shù)據(jù)幀。CAN 2.0B Passive只能處理標(biāo)準(zhǔn)數(shù)據(jù)幀且擴展幀的內(nèi)容會忽略。
?bxCAN主要特點:
- ? 波特率最高可達1M bps
- ? 支持時間觸發(fā)通信(CAN的硬件內(nèi)部定時器可以在TX/RX的幀起始位的采樣點位置生成時間戳)
- ? 具有3級發(fā)送郵箱
- ? 具有3級深度的2個接收FIFO
- ? 可變的過濾器組(最多28個)
CAN控制器模式
CAN控制器的工作模式有三種:初始化模式、正常模式和睡眠模式。
CAN控制器的測試模式有三種:靜默模式、環(huán)回模式和環(huán)回靜默模式,這三種測試模式需要再初始化模式下進行配置。
CAN控制器框圖
- CAN內(nèi)核:包含各種控制/狀態(tài)/配置寄存器,可以配置模式、波特率等
- 發(fā)送郵箱:用來緩存待發(fā)送的報文,最多可以緩存3個報文
- 接收FIFO:緩存接收到的有效報文
- 接收過濾器:篩選有效報文?
發(fā)送處理
發(fā)送優(yōu)先級由郵箱中報文的標(biāo)識符決定。標(biāo)識符數(shù)值越低有最高優(yōu)先級。如果標(biāo)識符值相同,郵箱小的先被發(fā)送。
接收處理
?有效報文指的是(數(shù)據(jù)幀直到EOF段的最后一位都沒有錯誤),且通過過濾器組對標(biāo)識符過濾。
接收過濾器
當(dāng)總線上報文數(shù)據(jù)量很大時,總線上的設(shè)備會頻繁獲取報文,占用CPU。過濾器的存在,選擇性接收有效報文,減輕系統(tǒng)負擔(dān)。
每個過濾器組都有兩個32位寄存器CAN_FxR1和CAN_FxR2。根據(jù)過濾器組的工作模式不同(位寬和選擇模式),寄存器的作用不盡相同。
?位寬可設(shè)置32位或16位,寄存器存儲的內(nèi)容就有所區(qū)別。
過濾器組Reg |
32位 |
16位(寄存器由兩部分組成) |
CAN_FxR1 |
STDID[10:0]、EXTID[17:0]、 IDE、RTR |
STDID[10:0]、EXTID[17:15]、 IDE、RTR |
CAN_FxR2 |
STDID[10:0]、EXTID[17:0]、 IDE、RTR |
STDID[10:0]、EXTID[17:15]、 IDE、RTR |
?? ? ? 選擇模式可設(shè)置屏蔽位模式或標(biāo)識符列表模式,寄存器內(nèi)容的功能就有所區(qū)別。
屏蔽位模式,可以選擇出一組符合條件的報文。寄存器內(nèi)容功能相當(dāng)于是否符合條件。
?標(biāo)識符列表模式,可以選擇出幾個特定ID的報文。寄存器內(nèi)容功能就是標(biāo)識符本身。
CAN控制器波特率計算
?STM32的CAN外設(shè)位時序分為三段:
- 同步段SYNC_SEG
- 時間段1 BS1(PTS +PBS1)
- ?時間段2 BS2?
波特率=1/(1tq+tq?(TS1[3:0]+1)+tq?(TS2[2:0]+1) )
CAN相關(guān)寄存器
CAN主控制寄存器(CAN_MCR)
CAN位時序寄存器(CAN_BTR)
CAN 標(biāo)識符寄存器(CAN_(T/R)IxR)
數(shù)據(jù)長度和時間戳寄存器(CAN_(T/R)DTxR)
CAN低位數(shù)據(jù)寄存器(CAN_(T/R)DLxR)
CAN高位數(shù)據(jù)寄存器(CAN_(T/R)DHxR)
CAN過濾器模式寄存器(CAN_FM1R)
CAN過濾器位寬寄存器(CAN_FS1R)
CAN 過濾器FIFO關(guān)聯(lián)寄存器(CAN_FFA1R)
?CAN 過濾器激活寄存器(CAN_FA1R)
文章來源:http://www.zghlxwxcb.cn/news/detail-822927.html
CAN 過濾器組x寄存器(CAN_FxR(1/2))
文章來源地址http://www.zghlxwxcb.cn/news/detail-822927.html
到了這里,關(guān)于CAN總線基礎(chǔ)詳解以及stm32的CAN控制器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!