CH577/CH578/CH579 實現用戶bootloader和用戶app


本文目的

  • 本文將記錄如何在沁恆的cortex-m0平台的藍牙芯片上實現用戶bootloader引導用戶app方式,並且變相解決中斷向量表重映射的問題
  • 用戶app包括一般的工程,和藍牙工程
  • 本bootloader跟wch芯片內置的bootloader不同,並不燒錄到芯片自帶的bootloader區域.
  • 在本例程的基礎上經過簡單的修改,既可以實現各種方式的DFU功能,諸如串口/BLE/USB/ETH方式等,只要實現傳輸,校驗,跳轉即可

適用芯片

  • CH577/CH578/CH579

實現過程

存儲配置

flash地址 備注
中斷二次跳轉固件 0 - 0x1FF 此部分已經包含在user_bootloader中的vector_remap.c 文件中
user_bootloader 0x200 - 0x3FFF
user_app 0x4000 -

中斷重映射

CH577/578/579 是arm cortex-m0內核的芯片,該內核並不提供原生的中斷重映射功能,一般各廠商都是自行實現(如STM32 系列的可以放在RAM的起始地址). WCH的"解決方法"是芯片提供了叫RB_ROM_CODE_OFS的寄存器標志位,使能該位后,flash控制器讀寫整體向后偏移32K(比如實際0x8000的地址,會變為0地址),此方法不在本文范疇內.

本文實現的方法是:在flash的0地址放入一段固定代碼,接管所有的中斷,然后根據標志位,再次跳轉到user_bootloader還是user_app的實際的中斷服務程序里. 該標志位對應關系:

//R8_GLOB_RESET_KEEP bit7=1  for this bootloader interrupt 
//R8_GLOB_RESET_KEEP bit7=0  for user app interrupt 

燒錄

使用hex合並工具把hex合並后然后用WCH 的isp工具進行燒錄即可

注意事項

  • wchisptool 對於hex文件處理方式:不連續的hex 填充0x00,而不是0xff,如果涉及到不連續的固件在自己實現的bootloader里進行校驗,可能需要燒錄時候用戶自己進行hex轉成bin文件燒錄.

工程源碼

https://gitee.com/iot-fan/iot-fan_at_cnblogs/tree/master/CH577_CH578_CH579/AN/CH577_578_579_user_bootloader_and_app

擴展資料

實現自定義的BLE OTA

根據blog:CH579/CH578/CH577/CH57x應用與協議棧分離方式實現,在本bootloader中啟動藍牙協議棧,實現藍牙傳輸,即可實現藍牙的DFU.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM