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, 既可以開始愉快的使用了。