S32Kxxx bootloader之CAN bootloader

    瞭解更多關於bootloader 的C語言實現,請加我Q扣: 1273623966 (驗證信息請填 bootloader),歡迎諮詢或定製bootloader(在線升級程序)。

  最近完成了S32Kxxx CAN bootloader, 之前需要拆開外殼通過燒寫口才能更新應用程序。如果產品灌了膠,每更新一次應用程序都非常之麻煩。現在有了CAN bootloader, 可以通過Standard CAN 接口就能夠更新產品的應用程序,簡單又方便。就算產品已經出貨到了客戶端,更新程序也不繁瑣,成本也可接受。接下來分兩部分來介紹,第一部分介紹如何實現S32K CAN bootloader,碰到的問題,以及如何解決的。第二部分介紹如何使用S32K CAN bootloader。

       S32Kxxx CAN bootloader的實現

       NXP S32Kxxx 系列芯片的功能很強大, 開發環境也不錯, 特別是Processor Expert。 我的S32Kxxx CAN bootloader的所有底層driver,包括CAN driver都是通過Processor Expert 配置生成。S32Kxxx CAN bootloader 的開發環境:

      1. IDE: S32DS for ARM, Version: 2018.R1

      2. Compiler: GCC for ARM,  Version:gcc-6.3-arm32-eabi

      3. SDK: S32DS/S32SDK_S32K1xx_RTM_3.0.0

      S32Kxxx CAN bootloader 的上層代碼是手寫的,以下底層Components 代碼都是通過Processor Expert配置後自動生成:

     1, PIN (pin_mux)

     2. Clock (clock manager)

     3. Interrupt (interrupt manager)

     4. CAN (can_pal)

     5. Flash (flash driver)

     6. SBC  (external watchdog, can tranceiver uja1169)

       雖然大概一年前我有完成過S32Kxxx UART bootloader,  但此次S32Kxxx CAN bootloader 實現過程比我預想的要更難,實現花費的時間也比我預想的要更長。主要原因就是碰到了以下問題,解決它們花費了我不少時間。

     1。 CAN 通信始終收發都不成功。

            供電,硬件,can driver, sbc driver 一個一個去排查,最後查出不是硬件的問題,也不是can driver 的問題。

            供電有問題,我的板子是NXP官方出品EVA 板子,我是使用USB 口供電,但是如果需要CAN 通信成功,需要接上power adapter。

            sbc driver 有問題, sbc_init時,裏面的SBC_GetMode返回0,後面這個返回值0又通過SBC_SetMode()設置回去,造成sbc_init出錯。修正後就OK。

     2。 Flash 擦除不成功

            flash driver, watchdog, interrupt 一個一個去排查,查出不是flash driver的問題。

            Interrupt 管理有問題,FLASH_DRV_EraseSector調用前需要關Interrupt, 調用後再開Interrupt。否則會重啓(寄存器RCM提示是Lockup的Reset source)

            watchdog管理有問題, 擔心擦除時間長,每擦除塊後調用SBC_SetWatchdog就出現Reset造成擦除無法完成,不調用就沒有問題,然後發現此時

另外sbc_init完成後g_drvConfig.isInit既然等於false, g_drvConfig.isInit等於false, 之後調用SBC_SetWatchdog出問題。sbc_init完成後g_drvConfig.isInit既然等於false。將其改爲true。 問題消失。

       3。 程序卡死在SBC_SetWatchdog。 

              排查後發現SBC_SetWatchdog前不能關Interrupt。

Processor Expert 用起來很愉快,一旦生成的代碼使用起來,如果出了問題,也是讓人頭疼不已。

        S32Kxxx CAN bootloader的使用

  S32Kxxx CAN bootloader 使用很簡單。需要用到一個CAN盒子,Z-Box CAN,簡稱ZCAN。 是我開發的一個很強大的CAN總線分析工具。還需要在電腦端運行一個上位機zFlash。zFlash是我用C# 語言開發的一個Windows 軟件。 zFlash操作非常簡單,能夠自動查詢Z-Box CAN並建立連接。點擊zFlash界面上的下載按鈕,下發握手指令去查找bootloader。 和bootloder 握手成功後就按照自定義的協議發送應用程序完成升級。

     

     S32Kxxx CAN bootloader 時電腦和板子的連接如下圖。 電腦上運行zFlash, 中間的USB-2-CAN是CAN 總線分析儀Z-Box CAN。用戶板上燒錄了S32Kxxx CAN bootloader。我的用戶板上面的芯片是S32K116,是NXP的一款帶有CAN controller的ARM Cortex-M4核的32-bit 單片機。這個bootloader 移植到S32K118,S32K144等都很容易。

        Z-Box CAN 是一款強大的CAN 總線分析儀,其金屬外殼一邊是方形USB 口通過USB線連接電腦,一邊是DB9口連接CAN bus。內部是進口芯片,信號有隔離。可以安全可靠地工作在複雜的工業場所,或用來分析汽車上各ECU之間的CAN 總線。見圖:

        Z-Box CAN最強大的地方是busmaster 支持它。busmaster(又稱博世總線大師)是一種開源軟件工具,用於模擬,分析和測試CAN / LIN總線系統。 它支持DBC,LDF,CAPL語言,節點模擬,自動測試, C語言腳本,log保存等等強大的功能。我在其開源代碼的基礎上進行添加,使其可以識別並連接我開發的Z-Box CAN。打開bumaster我的版本,找到Driver Selecion,選擇Z-Box CAN,點擊Connect, 既可以開始愉快的使用了。

 

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