自己用C語言寫RH850 F1L serial bootloader

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

  由於有了RH850 F1KM bootloader的經驗,F1L C語言bootloader的開發比較順利。由於上位機是HyperTerminal, 這個bootloader 我叫它hyperbootloder_F1L, 下面就簡單介紹下,相比較hyperbootloader_F1KM, 它有以下不同

1. hdwinit

2. memory map

3. FCL 宏

首先介紹hdwinit的不同,在boot.asm文件中,代碼都是彙編,但是看懂問題不大。比較坑人的是,新建CS+工程時,已經選擇了正確的芯片型號,完了,自動生成的boot.asm文件中hdwinit, 既然還有以下提示:

 

;-----------------------------------------------------------------------------
;    hdwinit
; Specify RAM addresses suitable to your system if needed.
;-----------------------------------------------------------------------------

 

CS+, 太蠢,爲什麼就不能生成完成可用的? 通過查看datasheet後,我的改動如下

RETENTION_RAM_ADDR    .set    0xfee00000
RETENTION_RAM_END    .set    0xfee07fff

.align    2
_hdwinit:
    mov    lp, r14            ; save return address

        mov    RETENTION_RAM_ADDR, r6
    mov    RETENTION_RAM_END, r7
    jarl    _zeroclr4, lp        ; clear Retention RAM

    mov    r14, lp
    jmp    [lp]


接下來是介紹memory map的不同, F1KM R7F701684 是1M 的code flash, 容量非常大,memory map 隨手定義的,bootloader 是 0~0x17FFF, application 是 0x18000 ~ 0xFFFFF。 bootloader 實際上不需要那麼大的空間。F1L我用的是 R7F701011, code flash 只有256K的容量,bootloader 區間是0~0x0FFFF, application 區間是 0x10000~0x3FFFF. 實際上bootloader區間還可以縮小很多。

 

接下了就是最大的坑了,在FCL library 裏面有個文件 fcl_cfg.h. 在這個文件中一定不能define R_FCL_NO_BFA_SWITCH, 否則調用FCL API時一直會有exception. debug時的現象就是FCL OPEN時會跳到exception handler (中斷程序)中去,具體是哪種exception我沒有去探究。總之這個一定要注意,在FCL user manual中有提到F1KM 等一些芯片需要得define R_FCL_NO_BFA_SWITCH 這個宏。 F1L 不需要,所以一定不要define.

//#define R_FCL_NO_BFA_SWITCH

hyperbootloder_F1L 和 hyperbootloader_F1KM 一樣非常簡單好用,不需要寫上位機,直接用超級終端hyperTerminal就可以,很適合實驗室或開發階段使用。

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