CAN****模塊的開發歷程
當時在開發MCAL相關模塊的時候,偶爾會看下CAN整個模塊的配置,由于CAN相關的模塊一直同事在配置,當時感覺內容好多,各種CANxxx模塊在配置工具里,感覺如果能有機會配置下的話一定是一件非常偉大的事情,到了18年年底,我終于分到了CAN模塊的配置任務,負責一個CAN通道的配置。由于前邊同事已經配置了一個通道,我在他基礎上繼續配置,當時我已經處于無人管理的狀態了,開始自己的瞎發揮,可能內容比較多,一直沒有配置好,嘗試了ECUM的Flex模式和Fix模式,手動修改了好多BSWM的Rules,當時也不是很懂,看程序在哪有問題就直接手動改代碼,后來問同事,也知道了一些注意的地方,然后我就開始擼代碼看,發現好多CAN通信的變量值沒變化,后來在地鐵上看COMM的AutoSAR文檔,發現需要請求通道的通信,當時瞬間感覺找到了問題的所在,果然第二天一大早早早去公司試了下,居然成功了,當時別提多開心了,在自己稀里糊涂的琢磨了大概一個月終于看到了CAN的信號,當時真的很開心,因為這算是我自己獨立搞出來的,成就感瞬間爆棚。也從這一刻開始心中對AutoSAR配置的害怕感漸漸的消失,大概從19年開始到7月份就一直在做CAN相關的配置。從CAN最底層的驅動到CANTrcv、CANIf、PDUR、COM、CANSM、ComM等基本的CAN相關的模塊都配置了解了一遍,雖然中間做了一些架構相關的工作也支持了別的項目的開發,但是每天都會花點時間看一些CAN相關的技術資料,配一些基本的功能,并立馬調試、擼代碼、解決Bug,漸漸的對CAN通信在AutoSAR架構的實現理解也加深了。其中在CANSM的配置中也明白了CAN相關的BusOff以及恢復機制,雖然自己在大學學了一點CAN通信的東西,但一直到配置CAN模塊的時候才算有了全面的了解,之前也做過一些STM32的CAN通信的程序,但是當時也并沒有深入的研究,在和同事測試CAN BusOff以及恢復中漸漸的對CAN通信有了更深的理解,隨后也通過抓取CAN總線上的波形對數據和時間進行了分析,理解了CAN總線的空閑、校驗、位填充、位時間等概念。對于普通CAN信號不帶相關協議和網絡管理的信號)的傳輸模塊配置可參考之前的公眾號《淺析TC277CAN模塊在AutoSAR的應用》。
除了做基本的CAN信號的配置(不帶相關協議和網絡管理的信號),在那段時間里也完成了J1939TP、XCP以及CANNM的配置。在配置J1939TP的時候當時連基本的J1939協議也不是完全懂,在磕磕碰碰中實現了J1939TP的功能,后來也對J1939協議結合在AutoSAR的實現有了基本的認識,雖然不是很透徹,但是基本的原理和實現都明白了。其中走J1939TP的CAN信號在CANIf層后不能直接到PDUR層,必須要經過J1939TP這個模塊,然后將信號傳輸到PDUR,一般走特殊協議的CAN信號都會在CANIf與PDUR之間加一層特殊的協議模塊(J1939TP、UDS等)。
為了滿足一些測試的目的做了XCP的配置,在XCP的配置的過程中更加對AutoSAR的分層理念有了更深的理解,XCP的配置不同于其他的一般CAN信號,直接從CANIf層到XCP進行傳輸,然后與RTE、APP層進行交互。對CAN的一些基本的模塊配置完成后,發現診斷和網絡管理這兩部分也是比較重要的,時至今日,對于診斷模塊的配置也沒有深入的研究,只是簡單的看下課同事配置的CANTP和DCM的東西,這部分后期也會在公眾號內分享。網絡管理模塊大概是19年4月份做的吧,一開始自己對網絡管理和喚醒也不是很懂,剛開始認為喚醒就是網絡管理把CAN模塊的通信喚醒,只要CAN的通信能正常工作就達到了網絡管理和喚醒的目的,后來漸漸的提高了自己的認知,喚醒就是把MCU從睡眠的狀態進入到正常的工作模式,而網絡管理更是一種整車層面的多個ECU的進行通信的策略,在某些特定的情況下實現部分ECU的休眠減少消耗。
之后開始將CANNM和NM功能集成到了配置環境中,并嘗試了一些喚醒的功能,此時只是單純的CAN信號層面實現報文的收發和總線休眠,那個時侯由于自己對整個AutoSAR下的BSWM、ECUM、OS等模塊控制的下電過程還一無所知,因此只是實現了簡單的CAN信號的禁用和開啟,結合AutoSAR的網絡管理流程基本上能跑的通,一些網絡管理相關的狀態機可以根據自己的測試和外部條件進行轉換,后來自己做了整個系統的上下電功能后基本上也可以實現部分網絡管理和喚醒的功能了。一直延續到19年7月份,在利用一些零碎或者特定的時間段下基本上對CAN相關的AutoSAr模塊的整個配置(除了診斷)都熟悉了一遍。
在配置中有好幾個時間段確實遇到了比較大的挑戰,并且那段時間手上還有別的任務,好幾次都在抱怨一群神經病發明了AutoSAR,大家好好手寫代碼不好嗎,抱怨也好,發牢騷也罷,想到自己身上的房貸,想到當初自己從機械專業轉入到汽車軟件開發的初衷,想到未來還有很多人也會有我這樣的煩躁和抱怨,就又老老實實的在看AutoSAR的技術手冊,開始通過各種途徑來請教別人,確實也得到了同事和好多未曾謀面人的幫助,這段配置階段,我就想以后一定要分享一些自己的問題和遇到的坑,盡可能的幫助那些像我一樣笨的AutoSAR開發工程師。有時候感覺從0做一些事情,對人的心理也是一個挑戰。經歷過整個CAN模塊的配置后,感覺心理上對AutoSAR的害怕或者迷茫也減少了,基本知道了它的一些方法論和小竅門,在AutoSAR的配置中自信心也漸漸的增強了,也更加的喜歡和堅定了自己的選擇。
說了幾句廢話,言歸正傳,下面簡單總結下CAN相關的模塊相關配置。
CAN
CAN模塊的配置主要配置CAN的中斷優先級(中斷模式下使用)或者Polling模式下的周期處理函數;CAN消息在控制器中使用了多少個郵箱,進行收發數據;選擇硬件上CAN消息的通道;喚醒功能的使能;CAN的濾波器;CAN通信的時鐘;CANFD相關功能的配置等
CANTrcv
CANTrcv 模塊主要配置CANTrcv外部芯片,一般CANTrcv芯片有兩種模式,一種自帶喚醒功能的CANTrcv和不帶喚醒功能的CANTrcv。帶有喚醒CANTrcv模塊主要的是選擇和喚醒功能相關Pin腳,Pin腳要與硬件上與CANTrcv芯片相連的引腳一一對應。如果是不帶Wak功能的主要選擇Rx的Pin即可。
CANIf
CANIf模塊主要定義了上/下層的CAN信號在發送和接收時候的標準接口。AutoSAR中CANIf模塊一個重要的功能就是和WakeUp有密切的關系,要根據實際情況進行配置。CANIf模塊要對下層的CANDrv和CANTrcv進行定義,區分CANIf下層的交互模塊。如果CANIf中對應的CAN通道配置了CANTrcv則要選擇與之對應的CANTrcv通道,表明該CAN通道是通過CANTrcv發出去的,CANIf的狀態變換也是與CANTrcv密切相關的。如果沒有CANTrcv通道,那么該模塊中不需要添加相應的CANTrcv。CANIf要定義數據接收和發送的Buffer,對于CAN信號收發采用的郵箱也需要定義。同時支持回調函數功能;對于CAN信號在CANIf這一層對上面一層交互的模塊(XCP、PDUR、CANNM、CANTP/J1939等)也要定義清楚。根據實際信號在使用的時候的路由進行選擇即可,XCP的就選XCP,J1939協議的選擇J939TP等等。同時CANSM會對CANIf狀態進行控制,達到對CAN信號的使能和禁用。
CANSM
CANSM配置模塊中對CANSM與CANIf之間進行Mode邊變化的時間做了限制,同時定義了BusOff處理的相關時間參數。定義相關CAN模塊的BusOff段短恢復和長恢復機制。
COM
COM模塊主要為應用層(或者RTE)模塊提供信號傳輸的接口,提供的接口主要是以Signal的形式存在,同時也包含信號組的形式,信號組一般對應應用層的結構體變量,在COM層實現了Signal在I_PDU中的打包和解包;定義了信號傳輸的權限;信號傳輸的模式和信號傳輸的過濾器設置;信號傳輸的延遲時間;超時的監控機制;與其他模塊的調用和被調用函數等。在COM層可以實現信號的組管理,實現信號使能或者禁用的成組控制。
ComM
ComM模塊的主要作用在于:實現對總線的管理和控制。如果網絡管理功能使能的情況下,實現對網絡管理模式的配置和選擇。
PDUR
在PDUR配置中,主要建立COM層與下面具體的傳輸層(CANTP、J1939、CANIf等)之間的路由。也可以將PDUR作為一個網關使用,實現不同ECU在PDUR層的信息傳遞,不需要再往上傳輸在APP做信號傳輸轉換的網關。
XCP
將與XCP相關的PDU進行關聯,XCP的信號可以直接被RTE調用,根據XCP相關的協議在XCP的配置中定義好具體的內容,定義XCP處理的時間相關的參數,時間周期、時間基準等。同時將XCP通信的處理放到特定的處理事件中;定義具體的XCP實現方式(DAQ、STIM等)。
J1939TP
在J1939TP模塊中根據J1939協議的內容配置到具體的參數中即可。
CANNM
CANNM要關聯到具體的CAN通道,同時特定幀喚醒的情況下要關聯具體的CAN報文,定義周期的處理時間和超時時間等。根據實際的需求定義發送的網絡管理報文的具體內容,發送的網絡管理報文一般因OEM不同會有稍微的區別。對于PN網絡管理的相關參數根據具體的需求進行使能和不定義。
NM
NM模塊的主要適應ComM模塊和各種總線的NM模塊,實現函數的Call和Callback;定義是否使能總線網絡管理的協調機制,參考的ComM的總線通道;定義ShutDown的時間,定義總線的同步機制等。由于這個模塊是所有的總線相關的,在實際的配置中主要采用了它的CAN的網絡管理的請求和釋放通信功能。
-
CAN通信
+關注
關注
5文章
93瀏覽量
17811 -
AUTOSAR
+關注
關注
10文章
350瀏覽量
21479 -
XCP
+關注
關注
0文章
11瀏覽量
11715 -
DAQ
+關注
關注
6文章
91瀏覽量
32156 -
過濾器
+關注
關注
1文章
427瀏覽量
19559
發布評論請先 登錄
相關推薦
評論