電子產業(yè)一站式賦能平臺

PCB聯盟網

搜索
查看: 54|回復: 0
收起左側

單片機加載Bootloader做OTA實現的方法

[復制鏈接]

305

主題

305

帖子

2325

積分

三級會員

Rank: 3Rank: 3

積分
2325
跳轉到指定樓層
樓主
發(fā)表于 2024-9-21 11:45:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
關注+星標公眾,不錯過精彩內容

作者 | Carter Liu
來源 | 瑞薩嵌入式小百科
隨著物聯網的發(fā)展,單片機產品在很多場景下都會用到OTA功能,今天就來結合RL78系列單片機給大家講講加載Bootloader做OTA實現的方法。
一、概述
RL78系列MCU有兩個boot cluster,支持多種編譯環(huán)境和多種方式的bootloader,本文以常用的CS+環(huán)境配合CC-RL編譯器,給大家介紹一種OTA的MCU端的實現方式。

二、基本原理
RL78系列MCU的內存映射,以64K flash的R5F100LE為例,如圖

可以看到分為2個boot Cluster:Boot cluster 0和Boot cluster 1。程序啟動時,從Boot cluster 0開始執(zhí)行。
這兩個Boot cluster在程序運行過程中可以通過調用瑞薩自編程庫(Flash Self-Programming Library)里面的boot swap函數來翻轉,即Boot cluster 0可以變成1而Boot cluster 1變成Boot cluster 0,基于此,我們可以將bootloader程序存放于boot cluster 1里面,應用程序則從Boot cluster 0執(zhí)行,當程序判斷相關條件,需要OTA時候,可以調用boot swap函數翻轉boot cluster,這樣翻轉后reset,則原來的bootloader段變成了Boot cluster 0,可以執(zhí)行OTA相關操作,將新程序的Boot cluster 0內容寫入Boot cluster 1,應用程序段寫入地址0x2000開始的flash;
OTA完成后,再調用boot swap,這時bootloader段自動翻轉到原來的Boot cluster 1區(qū)域,新程序的boot區(qū)域回到Boot cluster 0,其中斷向量表不受影響。
整個OTA過程:


三、實現方式
1
Bootloader程序編寫:代碼大小限制在1個boot cluster內(4k)
作用:用來接收新程序的代碼并擦除老程序、更新老程序。
Bootloader工程segment劃分:

需要注意檢查生成代碼應該在0-0xfff內,不能越界

2
Bootloader生成的hex文件轉換成.c文件(J-Link工具可用來轉換),輸出一個大數組,備用。
如下圖,保存為.c文件:

即可生成大數組:


3
Application應用程序段代碼編寫與集成bootloader:應用程序段的代碼編寫無需考慮中斷向量表偏移等問題,因為程序正常跑,與即將放在Boot cluster 1區(qū)的bootloader無關。但是需要將與boot swap相關的代碼放置在Boot cluster 0區(qū)域內。
App工程Segment劃分:

I. 0x1000-0x1fff不能存放其他數據,該區(qū)域為boot cluster 1,定義段為.constBOOTAREA_f,如上圖。程序代碼中,使用如下預編譯指令將bootloader放入Boot cluster 1中
  • #pragma section BOOTAREA__far const unsigned char bootloader[]={xx,xx};//bootloader itself#pragma section
    II. 劃分一個App區(qū)域的boot區(qū),把這個區(qū)域放在0x0000 to 0xFFF. 如上圖,.BOOT_f段。程序中可以使用預編譯指令#pragma section來將相關代碼放入這個區(qū)域,例如在編寫代碼時候加入如下代碼:
  • #pragma section text .BOOT/* write your code here */#pragma section
    III. 那么這段代碼會放入.BOOT_f區(qū)域。請注意,需要從生成的map文件去判斷這個區(qū)域不超過0xfff,即不與0x1000-0x1fff Boot cluster 1段重合。

    4
    Application代碼燒入MCU,則MCU內便集成了bootloader。
    5
    新的應用程序編寫:與第3步驟大致相同,但是不需要加入III的Boot cluster 1區(qū)域大數組。
    6
    有新的應用程序需要OTA更新,則先與Application程序握手成功,然后執(zhí)行第二章的OTA流程;也可在Boot cluster 0里完成握手,執(zhí)行OTA。

    Note
    使用fsl自編程庫和fdl data flash庫時候需要注意代碼段劃分。

    ------------ END ------------

    ●瑞薩RA8系列教程 | 初識瑞薩 RA8 系列單片機●瑞薩RA8系列教程 | 瑞薩 RA8 開發(fā)環(huán)境搭建●瑞薩RA8系列教程 | 基于 Keil 開發(fā) RA8單片機瑞薩RA8系列教程 | 基于e2s實現RA8串口輸出配置
  • 回復

    使用道具 舉報

    發(fā)表回復

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則

    關閉

    站長推薦上一條 /1 下一條


    聯系客服 關注微信 下載APP 返回頂部 返回列表