CAN总线控制器配置说明
文章首先介紹了CAN鏈路層報文的格式,然后針對NXP芯片的CAN控制器實現寄存器配置進行了相關說明,能夠幫助讀者能夠快速調通新板卡上的CAN總線。
目錄
CAN鏈路層報文格式
CAN主控制器的寄存器組成。
控制類寄存器
收發相關寄存器
?“濾波功能”相關寄存器。
CAN鏈路層報文格式
? ?說起CAN總線通信,就不得不說明一下CAN設備之間通信的報文格式。如同我們通常接觸的RS-232串口通信,當我們通過串口嘗試發送“Hello world”的時候,其實串口線上幀組成由起始位+數據位(這里的例子就是"Hello world"的ASSIC碼)+奇偶校驗位以及停止位。我們的CAN總線上的報文格式比串口的上的幀格式要復雜的多,BOSCH 公司《CAN Specification V2.0》文檔分為A、B兩個部分來介紹兩種在CAN總線上會出現的幀格式。A部分按照CAN1.2規范的定義,說明了CAN的報文格式,也有人稱為CAN2.0A協議。B部分對比A部分定義的標準幀格式,介紹擴展幀以及擴展幀與標準幀的兼容設計。總得來說,符合B部分定義的CAN控制器可以不適用擴展幀,依舊通過標準幀與根據A部分設計的CAN控制器進行通信。
? ? 在這兩種報文的格式下,CAN總線上的報文(幀)種類又分為下面的四種:
? ? 1.數據幀:數據幀攜帶數據,由發送器傳送至接收器。下圖簡單說明了數據幀所包含的場空間有那些。
????數據幀根據遵循協議的不同,分為標準格式幀和擴展格式幀,他們的區別在于仲裁場以及控制場,具體的內容分布如下:
? ??????? ??
- RTR為遠程發送請求位,數據幀為顯性,遙控幀為隱性位。
- SRR是一隱性位。它在擴展格式的標準幀RTR位的位置,因此,標準幀與擴展幀的沖突是通過標準幀優先于擴展幀這一途徑得以解決的,擴展幀的基本ID如同標準幀的識別符。
- IDE:標準幀格式里的IDE為“顯性”,而擴展格式里的IDE為隱性。
2.遠程幀:遠程幀用以請求總線上的相關單元發送具有相同標示的數據幀。
3.出錯幀:由檢測出總線錯誤的單元發送。
4.超載幀:超載幀用于提供當前和后續的數據幀的附加延遲。
CAN主控制器的寄存器組成。
? ? 我們以NXP公司的LPC21xx處理器的CAN控制器為例說明。
? ? 因為CAN控制有一個比較特殊的“濾波功能”,所有我們把CAN控制器的寄存器組成分為“濾波功能”相關以及接收發送數據相關寄存器和控制類寄存器。
控制類寄存器
? ? ? ?針對其他類寄存器。咱們首先討論配置類寄存器,包括CAN模式配置寄存器,總線時序寄存器,錯誤警告閾值寄存器等。
????? ? CAN模式配置寄存器能夠配置的內容主要包括CAN控制器的使能以及相關的運行模式,模式包括偵聽模式(Can控制器不會發送ACK在CAN總線上,即使完整的收到一個幀,并且節點處于被動錯誤模式,這個偵聽模式是為了波特率的監測以及熱插拔。)、自檢測模式(發送幀不需要收到ACK即算發送成功)、睡眠模式以及回環測試模式。其中自測試的模式分為全局自測試和局部自測試,全局自測試設置自接收請求位(控制器在發送的時候并不停止接收功能,所以如果發送的幀滿足幀過濾的要求,即被接收)就可以,這樣不僅能接收到自己發送的報文,還能接收到遠端發送的報文, 局部自測試為測試模式+自接收模式,這樣就不需要總線上掛接其他的CAN設備,只需要轉發器就可以了。我們常用的模式一般為回環測試模式,用于測定CAN控制器初始化正常。
? ?總線時序寄存器。首先介紹一個基本概念,對于總線上傳輸的數,一位有效的數據(1或者0)由四個段構成,同步段(SS)、傳播時間段(PTS)、相位緩沖段1(PBS1)、相位緩沖段2(PBS2)這些段又由稱之為Time Quantum(以下稱Tq最小時間單位構成。1位分為4個段,每個段由若干個Tq構成,這稱為位時序。
????????同步段SS:隱形電平到顯性電平的變化邊沿被期望出現在本段。
????????傳輸時間段PTS:用于吸收網絡上的物理延遲的段。
????????PBS1與PBS2:當信號邊沿不能出現在SS 段時,此段用來矯正誤差。由于各單元以各自獨立的時鐘來工作,細微的時鐘誤差都會累積起來,PBS 段可用于吸收此誤差。為了吸收一個時鐘誤差,在SJW設置的范圍內增減PBS1和PBS2,PBS1和PBS2越大,允許誤差越大,但是通訊速度會降低。
? ??總線時序寄存器配置包括預分頻,以及四段相關的參數,針對NXP 的LPC21XX的Can通信的位時間等于位TESG1+TESG2+3。
? ? 中斷使能寄存器,包括CAN控制器能發出的中斷(接收中斷,發送中斷,總線錯誤中斷等)。
? ? 錯誤警告閾值寄存器,在CAN工作時,這個值將一直跟TX和RX的錯誤計數值進行比較,如果有一致的情況,則發送錯誤警告。當發生CAN錯誤的時候,控制器遞增接收錯誤計數器或者發送錯誤計數器,當沒有檢測到錯誤的時候遞減。如果發送錯誤計數器計數到了255并且又有一個錯誤發生,則CAN控制器被強制置為Bus-Off狀態。并且這個時候的發送錯誤計數為127,并且接收錯誤計數器為0.軟件必須清除RM這一位。在那之后錯誤計數器會從128往下遞減證明是否在總線的空閑狀態下(11個連續的隱形位)。BS置位的時候,往其寫入任意的0到254的數據清除BUS-OFF狀態,當軟件在清除BUS-OFF狀態時,則只需要檢測一個數據總線空閑即可以繼續。RM置位并且Can控制器被禁能大部分的功能,并且發送總線錯誤中斷。總線上的設備根據TX和RX的錯誤計數值會進入不同的狀態,如下圖所示:
????? ?
????? ? 主動錯誤模式當檢測到總線發生錯誤的時候,會發送錯誤幀,而被動錯誤模式作為一種過渡模式,其不能主動向其他設備發送錯誤幀,并且在發送正常的報文的時候還需要在間隔幀期間內必須插入“暫停發送期”(由8個位的隱性位組成)。
收發相關寄存器
?????????發送命令寄存器,包含三個發送緩存寄存器的選擇,控制發送,并且停止發送,釋放BUFF,發送寄存器的作用就是當準備好發送數據寫入相應寄存器之后,操作這個寄存器完成發送操作。
????? ? 接收幀數據寄存器,包含接收幀是否為旁路模式接收的數據,以及包含如果不是旁路模式,匹配AF中的過濾條目的index。包含接收幀是數據幀還是遙控幀。如果是遙控幀,則包含期待以相同ID發送的數據幀包含的數據個數,如果是數據幀則包含接收數據的字節數。同時還包含接收幀是標準幀還是擴展幀的信息。
????? ? 接收ID寄存器,包含接收幀的ID信息,標準幀為11位,擴展幀為29位。
? ? ? ? 接收數據寄存器A,接收到的低32位,4字節數據寄存器。
????????接收數據寄存器B,接收到的高32位,4字節數據寄存器。
????? ? 發送幀信息寄存器(三個,每個發送緩存區一個),包括發送幀是遙控幀還是數據幀,如果是遙控幀則包含發送的遙控幀期待以相同ID發送的數據幀包含的數據個數,如果是數據幀,則包含發送數據的字節數。以及發送數據為標準幀還是擴展幀,以及發送緩存區的優先級。
????? ? 發送幀的ID寄存器(三個),標準幀11位,擴展幀為29位。
????? ? 發送寄存器TDA和TDB:存儲需要發送的8字節數據。
????? ? 發送狀態寄存器CANTxSR:表征所有CAN控制器是正在發送數據,還是發送buff可以寫入,還是發送已經完成。
????? ? 接收狀態寄存器CANRxSR:表征所有CAN控制器是正在接收一個數據,還是完整的接收了一個數據,還是出現了接收數據溢出的情況。
????? ? 綜合狀態寄存器:表征TX與RX的錯誤值是否超出了設定的閾值,或者總線處在busoff狀態。
?“濾波功能”相關寄存器。
????? ? 首先介紹一下NXP的芯片特殊的一種概念“Full CAN”模式,類似STM的DMA,NXP將一個特殊的過濾表匹配的報文直接放到了RAM空間,程序能夠隨機存取。所以NXP的過濾表由4+2部分組成,分別為:
FullCAN 過濾表的條目組成如下圖,若CAN控制器接收到匹配其中條目的CAN ID,則放至FullCAN 接收數據表中:
?????????
? ? ??????
? ? ? ? 獨立11bit ID匹配條目,若接收到的標準幀匹配條目中的CAN ID 就將其接收,否則過濾掉:
????????
????? ? 組11Bit ID匹配條目,若接收到的標準幀在條目指示的ID范圍內,將接收報文,否則報文被過濾掉。
????
? ? ?? ? 獨立29bit ID匹配條目,若接收到的擴展幀與條目匹配,則接收。
????????
????? ? 組29bit ID匹配條目,若接收到的擴展幀在兩個條目指示的ID范圍之間,則接收,否則就會被過濾掉。
????????
????? ? 驗收濾波模式寄存器,包含了能夠關閉所有接收操作的控制位(只有在關閉CAN控制器的接收操作,才能修改過濾相關的寄存器),同時包含了旁路模式控制位(旁路模式下不進行過濾),是否使能FullCAN的控制。
????????獨立標準幀的過濾表起始地址寄存器,AF Lookup RAM中,獨立的標準幀起始的地址。如果這個表為空,則將這個值與組標準幀過濾表起始地址中的值寫成一樣。若使用Fullcan,則這一位也能指示Fullcan表的大小。
????????組標準幀過濾表起始地址寄存器,如果此表為空,則這個寄存的值與獨立擴展幀寄存器地址的值一樣。這個最大的值為0x800,此時為后邊的表都為空。
????????獨立擴展幀寄存器地址寄存器,獨立擴展幀過濾表起始地址。如果為空,則寫入與組擴展幀過濾表表起始地址一樣的值。最大值為0x800。
????????組擴展幀過濾表表起始地址寄存器,如果這個表為空,則將其與ENDofTable寄存器的值寫成一樣的。
????? ? 過濾表RAM結束地址寄存器,這個地址的上面是最后一個AF表。如果fullCAN沒有使用,這個值最大值為0x800。如果Fullcan得以使用,這個地址代表了AF將符合第一個fullcan表中的數據保存在這個地址的后邊。
????? ? 還有一些FullCan的中斷控制寄存器,以及過濾表訪問錯誤的寄存器,這里就不多做介紹了,各位讀者可在芯片手冊中看到相關的介紹,有什么看不明白的可以評論區留言討論。
?十六宿舍 原創作品,轉載必須標注原文鏈接。
?2023 Yang Li. ?All rights reserved.
歡迎關注『十六宿舍』,大家喜歡的話,給個👍,更多關于嵌入式相關技術的內容持續更新中。
總結
以上是生活随笔為你收集整理的CAN总线控制器配置说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Office Tool Plus软件运行
- 下一篇: vs2017旗舰版_2017年的所有旗舰