CAN总线控制器SJA1000
CAN總線控制器SJA1000
- 1.CAN總線
- 1.1仲裁過程
- 1.2控制段
- 1.3數據段
- 1.4CRC段
- 1.5ACK段
- 1.6遠程幀
- 2.濾波器設置
- 2.1單濾波器設置
- 2.2雙濾波器設置
- 3.初始化設置
- 參考資料
1.CAN總線
控制器局域網總線(CAN,Controller Area Nerwork)是一種用于實時應用的串行通訊協議總線,它可以使用雙絞線來傳輸信號,是世界上應用最廣泛的現場總線之一。CAN協議用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束。該協議的健壯性使其用途延伸到其它自動化和工業應用。
CAN總線控制器分為兩種,一種是可以直接與MCU連接的控制芯片(如sja1000),另一種是集成在SOC中適用APB總線接口的CAN IP。
MCU控制的CAN總線系統結構如下所示。
CAN-bus通信幀共分為數據幀、遠程幀、錯誤幀、過載幀和幀間隔五種類型。數據幀由結構上由7個段組成,其中根據仲裁段ID碼長度的不同,分為標準幀(CAN2.0A)和擴展幀(CAN2.0B)。
在CAN總線上,默認保持高電平,只要有一個節點發出低電平,總線上的電平就變為低電平,只有當所有節點保持為電平時,總線上才會保持為高電平。所以,顯性為低電平,隱性為高電平。
幀起始和幀結束用于界定一個數據幀,無論是標準幀還是拓展幀,都有幀起始和幀結束。
1.1仲裁過程
仲裁有三大規則:
1.幀ID值越小,優先級越高。
2.數據幀優先級比遠程幀優先級高。
3.標準幀優先級比拓展幀高。
1.2控制段
1.3數據段
1.4CRC段
1.5ACK段
1.6遠程幀
2.濾波器設置
CAN總線的濾波器設置就像給總線上的節點設置了一層過濾網,只有符合要求的CAN信息幀才可以通過,其余的一概濾除。
在驗收濾波器的幫助下,只有當接收信息中的識別位和驗收濾波器預定義的值相等時,CAN 控制器才允許將已接收信息存入RXFIFO。
驗收濾波器由驗收代碼寄存器(ACRn)和驗收屏蔽寄存器AMRn 定義,要接收的信息的位模式在驗收代碼寄存器中定義,相應的驗收屏蔽寄存器允許定義某些位為“不影響”,即可為任意值。
在SJA1000復位模式下,設置寄存器CDR.7為“0”,即設置CAN控制器SJA1000工作于BasicCAN模式,CDR.7為1,即Pelican模式。
有兩種不同的過濾模式可在模式寄存器中選擇MOD.3, AFM。
單濾波器模式:AFM 位是1;
雙濾波器模式:AFM 位是0。
2.1單濾波器設置
(1)接收CAN標準幀時單濾波器配置:
對于標準幀,11位標識符、RTR位、數據場前兩個字節參與濾波;
對與參與濾波的數據,所有AMR為0的位所對應的ACR位和參與濾波數據的對應位必須相同才算驗收通過;
如果由于置位RTR=1 位而沒有數據字節,或因為設置相應的數據長度代碼而沒有或只有一個數據字節信息,報文也會被接收。對于一個成功接收的報文,所有單個位在濾波器中的比較結果都必須為“接受”;
注意AMR1 和ACR1 的低四位是不用的,為了和將來的產品兼容,這些位可通過設置AMR1.3、AMR1.2 、AMR1.4和AMR1.0 為1 而定為“不影響”。
舉例:如何設置單濾波,接收標識符為0000 1010 010的CAN標準幀?
在SJA1000復位模式下,設置寄存器CDR.7為“1”,即設置CAN控制器SJA1000工作于PeliCAN模式。
設置模式寄存器的驗收濾波器模式位(AFM)為1,選擇單濾波器模式;
設置驗收代碼寄存器ACR0=0x0A、ACR1=0x40、ACR2=ACR3=0x00;
根據單濾波器時信息幀與濾波器的位對應關系,將需要參與濾波的信息位對應的驗收屏蔽寄存器位設置為0,設置AMR0=0x00,AMR1=0x0F、AMR2=AMR3=0XFF;
如此設置,SJA1000接收標識符ID.28~ID.18為0000 1010 010的CAN標準幀。
(2)接收CAN擴展幀時單濾波器配置:
對于擴展幀,29位標識符和RTR位參與濾波;
對與參與濾波的數據,所有AMR為“0”的位所對應的ACR位和參與濾波數據的對應位必須相同才驗收通過濾波;
必須注意的是AMR3和ACR3的最低兩位是不用的。為了和將來的產品兼容,這些位應該通過置位AMR3.1和AMR3.0為“1”來定為“不影響”。
舉例:如何設置單濾波,接收標識符ID.28~ID.0為0000 1010,0100 1010,0110 1011,1110 1的CAN擴展幀?
在SJA1000復位模式下,設置寄存器CDR.7為“1”,即設置CAN控制器SJA1000工作于PeliCAN模式。
設置模式寄存器的驗收濾波器模式位(AFM)為1,選擇單濾波器模式;
設置驗收代碼寄存器ACR0=0x0A、ACR1=0x4A、ACR2=0x6B、ACR3=0XE8;
根據單濾波器時信息幀與濾波器的位對應關系,將需要參與濾波的信息位對應的驗收屏蔽寄存器位設置為0,設置AMR0=0x00,AMR1=0x00、AMR2=0x00、AMR3=0X03;
2.2雙濾波器設置
這種配置可以定義兩個短濾波器,由4個ACR和4個AMR構成兩個短濾波器??偩€上的信息只要通過任意一個濾波器就被接收。
濾波器字節和信息字節之間位的對應關系取決于當前接收的幀格式。
(1)接收CAN標準幀時雙濾波器配置:
如果接收的是標準幀信息,被定義的兩個濾波器是不一樣的。
第一個濾波器由ACR0、ACR1、AMR0、AMR1以及ACR3、AMR3低4位組成,11位標識符、RTR位和數據場第1字節參與濾波;
第二個濾波器由ACR2、AMR2以及ACR3、AMR3高4位組成,11位標識符和RTR位參與濾波。
為了成功接收信息,在所有單個位的比較時,應至少有一個濾波器表示接受。RTR 位置位“1”或數據長度代碼是“0”,表示沒有數據字節存在;只要從開始到RTR 位的部分都被表示接收,信息就可以通過濾波器1。
如果沒有數據字節向濾波器請求過濾,AMR1和AMR3的低4位必須被置為“1”,即“ 不影響”。此時,兩個濾波器的識別工作都是驗證包括RTR 位在內的整個標準識別碼。
舉例:如何設置雙濾波,接收標識符ID.28~ID.18為0000 1010,010或ID.28~ID.18為01101011,111,且DATA Byte1 = 0x55 的兩類CAN標準幀?
在SJA1000復位模式下,設置寄存器CDR.7為“1”,即設置CAN控制器SJA1000工作于PeliCAN模式。
設置模式寄存器的驗收濾波器模式位(AFM)為0,選擇雙濾波器模式;
濾波器1配置為:
ACR0=0x0A、ACR1=0x45、ACR3(bit3-bit0)=0x5;
AMR0= 0x00、AMR1=0x00、AMR3(bit3-bit0)=0x0;
濾波器2配置為:
ACR2= 0x6B、ACR3(bit7-bit4)=0xE;
AMR2=0x00、 AMR3(bit7-bit4)= 0x0;
(2)接收CAN擴展幀時雙濾波器配置:
如果接收到擴展幀信息,定義的兩個濾波器是相同的。
第一個濾波器由ACR0、ACR1和AMR0、 AMR1構成;
第二個濾波器由ACR2、ACR3和AMR2、 AMR3構成;
兩個濾波器都只比較擴展識別碼的前兩個字節,即29位標識符中得高16位。
為了能成功接收信息,所有單個位的比較時至少有一個濾波器表示接收。
舉例:如何設置雙濾波,接收標識符ID.28~ID.13為0000 1010,0100 1010和ID.28~ID.13為0110 1011,1110 1001的兩類CAN擴展幀?
在SJA1000復位模式下,設置寄存器CDR.7為“1”,即設置CAN控制器SJA1000工作于PeliCAN模式。
設置模式寄存器的驗收濾波器模式位(AFM)為0,選擇雙濾波器模式;
設置驗收代碼寄存器ACR0=0x0A、ACR1=0x4A、ACR2=0x6B、ACR3=0XE9;
根據雙濾波器時信息幀與濾波器的位對應關系,將需要參與濾波的信息位對應的驗收屏蔽寄存器位設置為0,設置AMR0=0x00,AMR1=0x00、AMR2=0x00、AMR3=0X00
3.初始化設置
在對CAN控制器進行初始化設置時,必須先設為復位模式。
(1)置位模式寄存器Bit0位進入復位模式;
(2)設置時鐘分頻寄存器選擇時鐘頻率、CAN模式;
(3)設置驗收濾波,設定驗證碼和屏蔽碼;
(4)設置總線定時器寄存器0、1設定CAN波特率;
(5)設置輸出模式;
(6)清零模式寄存器Bit0位退出復位模式;
(7)發送數據時,需要設置CMR寄存器,配置發送請求或者自測試請求,然后將發送數據寫入發送buffer(在寫入時,需要查看狀態寄存器,發送buffer是否為釋放狀態,如果是在鎖定狀態寫入數據,那么數據會丟失,并沒有任何提醒!);接收數據時,將數據從接收buffer讀取后,需要設置CMR寄存器,釋放接收buffer,這樣才可以讀取后面的數據。
初始化代碼如下所示:
參考資料
1.CAN總線系列講座第六講——SJA1000的濾波器設置
2.CAN-bus現場總線基礎教程【第3章】CAN控制器驅動-SJA1000初始化(11)
3.CAN協議,系統結構和幀結構
總結
以上是生活随笔為你收集整理的CAN总线控制器SJA1000的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络传输介质介绍
- 下一篇: 铁道通信、工矿、基建单位用的地下管线探测