2017-07-25 55 views
0

我使用MK24F12。我調整了Flexcan模塊以使用Fleet Management Systems Interface從設備收集消息。 我打開了RxFIFO並將ID接受模式設置爲格式A.然後我用ID填充過濾表(它從第7個郵箱開始),並根據帶有掩碼的RXIMR寄存器填充。其餘的過濾器我填充0x40000000和其餘掩碼寄存器0x5FFFFFFF。 當我開始聽設備時,我得到了一些幀,但這裏的問題是我沒有收到所有發送的消息設備,儘管它們匹配過濾器。 我知道,因爲如果我設置任何掩碼寄存器爲零,我得到總線上的所有消息。 我注意到命中過濾器(RXFIR寄存器)是(0,1,4,5,...),所以換句話說,我得到的消息與存儲在寄存器CSn和IDn中的過濾器匹配。Flexcan不適用所有過濾器

下面是日誌,在這裏我添加了7個過濾器,我只有4種類型的消息。然後我刪除了所有過濾器,並且您可以看到我跳過了許多應該被捕獲的消息。

[1.003] Filter added (Type: Ext, ID: 0x00FEE900, Mask: 0x00FFFF00) 
[1.004] Filter added (Type: Ext, ID: 0x00FEFC00, Mask: 0x00FFFF00) 
[1.005] Filter added (Type: Ext, ID: 0x00FEEE00, Mask: 0x00FFFF00) 
[1.006] Filter added (Type: Ext, ID: 0x00FEC100, Mask: 0x00FFFF00) 
[1.007] Filter added (Type: Ext, ID: 0x00F00400, Mask: 0x00FFFF00) 
[1.008] Filter added (Type: Ext, ID: 0x00FEE500, Mask: 0x00FFFF00) 
[1.008] Filter added (Type: Ext, ID: 0x00FEEA00, Mask: 0x00FFFF00) 

[1.935] CAN.Got frame (Type: Ext, ID: 0x18F00420, Data: FF FF FF 80 0C FF FF FF, Filter: 4) 
[2.436] CAN.Got frame (Type: Ext, ID: 0x18FEE520, Data: 58 1C 00 00 FF FF FF FF, Filter: 5) 
[2.938] CAN.Got frame (Type: Ext, ID: 0x18FEE920, Data: FF FF FF FF 59 1C 00 00, Filter: 0) 
[3.439] CAN.Got frame (Type: Ext, ID: 0x18FEFC20, Data: FF 48 FF FF FF FF FF FF, Filter: 1) 
[4.944] CAN.Got frame (Type: Ext, ID: 0x18F00420, Data: FF FF FF C0 12 FF FF FF, Filter: 4) 
[5.445] CAN.Got frame (Type: Ext, ID: 0x18FEE520, Data: 59 1C 00 00 FF FF FF FF, Filter: 5) 
[6.950] CAN.Got frame (Type: Ext, ID: 0x18FEE920, Data: FF FF FF FF 5A 1C 00 00, Filter: 0) 
[7.452] CAN.Got frame (Type: Ext, ID: 0x18FEFC20, Data: FF 46 FF FF FF FF FF FF, Filter: 1) 
[8.957] CAN.Got frame (Type: Ext, ID: 0x18F00420, Data: FF FF FF 00 19 FF FF FF, Filter: 4) 
[9.458] CAN.Got frame (Type: Ext, ID: 0x18FEE520, Data: 5A 1C 00 00 FF FF FF FF, Filter: 5) 


at this point i removed all filters 

[34.186] CAN.Got frame (Type: Ext, ID: 0x18F00420, Data: FF FF FF 00 4B FF FF FF, Filter: 0) 
[34.688] CAN.Got frame (Type: Ext, ID: 0x18FEE520, Data: 62 1C 00 00 FF FF FF FF, Filter: 0) 
[35.190] CAN.Got frame (Type: Ext, ID: 0x18FEE920, Data: FF FF FF FF 63 1C 00 00, Filter: 0) 
[35.691] CAN.Got frame (Type: Ext, ID: 0x18FEFC20, Data: FF 34 FF FF FF FF FF FF, Filter: 0) 
[36.193] CAN.Got frame (Type: Ext, ID: 0x18FEEE20, Data: 56 FF FF FF FF FF FF FF, Filter: 0) 
[36.694] CAN.Got frame (Type: Ext, ID: 0x18FEC120, Data: AD 05 00 00 FF FF FF FF, Filter: 0) 
[37.196] CAN.Got frame (Type: Ext, ID: 0x18F00420, Data: FF FF FF 40 51 FF FF FF, Filter: 0) 
[37.698] CAN.Got frame (Type: Ext, ID: 0x18FEE520, Data: 63 1C 00 00 FF FF FF FF, Filter: 0) 
[39.203] CAN.Got frame (Type: Ext, ID: 0x18FEE920, Data: FF FF FF FF 64 1C 00 00, Filter: 0) 
[39.704] CAN.Got frame (Type: Ext, ID: 0x18FEFC20, Data: FF 32 FF FF FF FF FF FF, Filter: 0) 
[40.206] CAN.Got frame (Type: Ext, ID: 0x18FEEE20, Data: 58 FF FF FF FF FF FF FF, Filter: 0) 
[40.707] CAN.Got frame (Type: Ext, ID: 0x18FEC120, Data: AD 05 00 00 FF FF FF FF, Filter: 0) 

這裏是FlexCAN registers' values

回答

0

圖片我發現,我讀MB的CS寄存器的碼位是1的過濾器2,3,6,7 ......這意味着BUSY。但是,如果MB引擎使用FIFO引擎,它不包含CODE位,我們不應該檢查消息緩衝區代碼。 他們可能會不使用一些位保持清晰。

問題已關閉。 這裏的圖片MB and FIFO structure