CAN總線系列講座第六講——SJA1000的濾波器設置


CAN總線的濾波器設置就像給總線上的節點設置了一層過濾網,只有符合要求的CAN信息幀才可以通過,其余的一概濾除。
在驗收濾波器的幫助下,只有當接收信息中的識別位和驗收濾波器預定義的值相等時,CAN 控制器才允許將已接收信息存入RXFIFO。
驗收濾波器由驗收代碼寄存器(ACRn)和驗收屏蔽寄存器AMRn 定義,要接收的信息的位模式在驗收代碼寄存器中定義,相應的驗收屏蔽寄存器允許定義某些位為“不影響”,即可為任意值。
1、BasicCAN模式下SJA1000濾波器
在驗收濾波器的幫助下CAN 控制器能夠允許RXFIFO 只接收同識別碼和驗收濾波器中預設值相一致的信息,驗收濾波器通過驗收代碼寄存器ACR和驗收屏蔽寄存器AMR來定義。


<ignore_js_op> 

復位請求位被置高,驗收代碼寄存器ACR可以訪問(讀/寫)。



<ignore_js_op>

 

復位請求位被置高,驗收屏蔽寄存器AMR可以訪問(讀/寫)。驗收屏蔽寄存器定義驗收代碼寄存器的相應位對驗收濾波器是“相關的”或“無影響的”。
濾波的規則是:每一位驗收屏蔽分別對應每一位驗收代碼,當該位驗收屏蔽位為“1”的時候(即設為無關),接收的相應幀ID位無論是否和相應的驗收代碼位相同均會表示為接收;當驗收屏蔽位為“0”的時候(即設為相關),只有相應的幀ID位和相應的驗收代碼位值相同的情況才會表示為接收。只有在所有的位都表示為接收的時候,CAN控制器才會接收該報文。
舉例:如何設置濾波器,接收標識符為0000 1010的CAN幀?
在SJA1000復位模式下,設置寄存器CDR.7為“0”,即設置CAN控制器SJA1000工作於BasicCAN模式。
設置驗收代碼寄存器ACR0=0x0A;
根據濾波器信息幀與濾波器的位對應關系,將需要參與濾波的信息位對應的驗收屏蔽寄存器位設置為0,設置AMR=0x00;
如此設置,SJA1000接收標識符ID.10~ID.3為0000 1010的CAN幀。
2、PeliCAN模式下SJA1000濾波器
有兩種不同的過濾模式可在模式寄存器中選擇MOD.3, AFM。
單濾波器模式:AFM 位是1;
雙濾波器模式:AFM 位是0。
SJA1000驗收濾波器由4個驗收碼寄存器ACR0、ACR1、ACR2、ACR3和4個驗收屏蔽寄存器AMR0、AMR1、AMR2、AMR3組成。ACR的值是預設的驗收代碼值,AMR值用於表征相對應的ACR值是否用作驗收濾波,這8個寄存器在SJA1000的復位模式下設置。
濾波的規則和BasicCAN模式下的濾波規則相同。濾波的方式有兩種,由模式寄存器中的AFM( MOD.3 )位選擇:單濾波器模式(AFM 位是1)、雙濾波器模式(AFM 位是0)。
(1)、單濾波器的配置
這種濾波器配置定義了一個長濾波器(4字節、32位),由4個驗收碼寄存器和4個驗收屏蔽寄存器組成的驗收濾波器,濾波器字節和信息字節之間位的對應關系取決於當前接收幀格式。
接收CAN標准幀時單濾波器配置:
對於標准幀,11位標識符、RTR位、數據場前兩個字節參與濾波;
對與參與濾波的數據,所有AMR為0的位所對應的ACR位和參與濾波數據的對應位必須相同才算驗收通過;
如果由於置位RTR=1 位而沒有數據字節,或因為設置相應的數據長度代碼而沒有或只有一個數據字節信息,報文也會被接收。對於一個成功接收的報文,所有單個位在濾波器中的比較結果都必須為“接受”;
注意AMR1 和ACR1 的低四位是不用的,為了和將來的產品兼容,這些位可通過設置AMR1.3、AMR1.2 、AMR1.4和AMR1.0 為1 而定為“不影響”。

 


<ignore_js_op>

 

舉例:如何設置單濾波,接收標識符為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標准幀。
接收CAN擴展幀時單濾波器配置:
對於擴展幀,29位標識符和RTR位參與濾波;
對與參與濾波的數據,所有AMR為“0”的位所對應的ACR位和參與濾波數據的對應位必須相同才驗收通過濾波;
必須注意的是AMR3和ACR3的最低兩位是不用的。為了和將來的產品兼容,這些位應該通過置位AMR3.1和AMR3.0為“1”來定為“不影響”。
<ignore_js_op>

 

舉例:如何設置單濾波,接收標識符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)、雙濾波器的配置
這種配置可以定義兩個短濾波器,由4個ACR和4個AMR構成兩個短濾波器。總線上的信息只要通過任意一個濾波器就被接收。
濾波器字節和信息字節之間位的對應關系取決於當前接收的幀格式。
接收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 位在內的整個標准識別碼。
<ignore_js_op>

 

舉例:如何設置雙濾波,接收標識符ID.28~ID.18為0000 1010,010和ID.28~ID.18為01101011,111的兩類CAN標准幀?
在SJA1000復位模式下,設置寄存器CDR.7為“1”,即設置CAN控制器SJA1000工作於PeliCAN模式。
設置模式寄存器的驗收濾波器模式位(AFM)為0,選擇雙濾波器模式;
設置驗收代碼寄存器ACR0=0x0A、ACR1=0x40、ACR2=0x6B、ACR3=0xE0;
根據雙濾波器時信息幀與濾波器的位對應關系,將需要參與濾波的信息位對應的驗收屏蔽寄存器位設置為0,設置AMR0=0x00,AMR1=0x0F、AMR2=0x00、AMR3=0X0F;
接收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;
 
來源https://bbs.21ic.com/icview-837976-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM