332_S32K144 CAN FIFO接收實現接收全部ID

完整的S32K144的學習彙總如下:

https://github.com/GreyZhang/g_s32k144

    最初看文檔的時候,幾種不同的FORMAT以及掩碼把我看糊塗了。

    先看看三種不同的format,其實這個還是好理解的。這三種format,決定了filter的作用。如果是選擇A的話,那麼就是所有ID的bit都是100%匹配的。如果是選擇B或者C,那麼只有一部分ID的bit是匹配的。

    如果我想做一個簡單的CAN驅動,能夠收各種ID,接下來的過濾分析都是軟件實現,那麼比較容易的是選擇A格式。其他的格式,似乎在J1939等類似的協議棧實現的時候可能會實用一些。

    如果選擇了A格式,其實還是有一個問題的。那就是table的數目是有限制的,也就是說我們只能夠接收有限的ID。那怎麼辦呢?其實,這個table的作用一定程度上是在設置掩碼,而掩碼在這裏需要明確說明一下。如果掩碼設置爲1,那麼相應的bit必須與設置一致的時候纔會被接收。如果設置爲0,那麼會被忽略。因此,一個簡單的方法就有了:我們把所有的掩碼全都設置爲0,這樣就可以接收所以的CAN ID了。

    SDK中有一個相應的接口,可以設置FIFO模式下的全局掩碼:

    如此設置之後,我測試了ID 爲0~9的標準幀以及擴展幀共20個ID,全都可以接收到。這個測試不算充分,但是看起來應該是實現了我想要的功能。

    我把接收到的報文通過串口打印出來了,上面是其中一次的結果。

    現在,基本的CAN驅動已經差不多了,接下來其實還有一個性能問題。比如,發的頻率高的時候是否能夠接收到。我手頭沒有現成的PC軟件編程環境,如果能夠自己基於CAN卡設計一個測試的話這個測試將會很容易。後面,我可以嘗試找一個平臺嘗試一下。

    今天又好累,最近壓力也不小。學習的路上也是很辛苦的,比較累。有時候,我們很難快速找到我們想要的答案。祝福看到我學習筆記的人,希望你們學習快樂無壓力。也希望哪怕有那麼一點可能,我的學習筆記恰好是你們要找的答案!

完整的S32K144的學習彙總如下:

https://github.com/GreyZhang/g_s32k144

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章