了解更多關於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造成擦除無法完成,不調用就沒有問題,然后發現此時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 握手成功后就按照自定義的協議發送應用程序完成升級。凡是購買了我的Z-Box CAN 硬件的客戶,都可以免費使用zFlash, zFlash界面如下:
使用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保存等等強大的功能。我在其開源代碼v3.2.2的基礎上進行添加,使其可以識別並連接我開發的Z-Box CAN。打開bumaster我的版本,找到Driver Selecion,選擇Z-Box CAN,點擊Connect, 既可以開始收發數據,測量,或自動化測試等等,有詳細的用戶手冊和案例。