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