初探RT1061 flash remapping功能的使用
i.MXRT1060芯片支持flash重映射功能(flash remappingfunction),該功能允許用戶重新映射掛載在flexspi接口的閃存地址,能夠將當前閃存地址重新映射到預期的地址。
該功能有利于實現以下幾點:
? 可以下載多個固件到flash
? 可根據條件切換不同的固件運行
? 可應用于OTA遠程升級固件
一般升級流程是,通過app應用程序將固件接收之后燒寫到flash中,然后執行校驗檢查,最后切換到新的固件運行。重映射功能有助于直接運行固件,無論它位于XIP flash的什么位置。
以flash地址0x60000000和0x60010000為例,如果不設置這三個寄存器,即不使用重映射功能,我們通過下面這個圖片可以看到,訪問0x60000000地址的數據,返回就是實際物理地址0x60000000里面內容。
如果我們設置這三個寄存器值分別為:
IOMUXC_GPR_GPR30 = 0X60000000;
IOMUXC_GPR_GPR31 = 0X60010000;
IOMUXC_GPR_GPR32 = 0X10000;
再去訪問0X60000000地址數據,則返回的是0X60010000中的數據,如圖:
i.MX RT1061片內ROM支持flash重映射功能。它支持燒寫兩個固件到flash,并且實現兩個固件的任意切換運行。
使能此功能,只需要燒寫一下fuse熔絲位即可。
上表中,0x6E0[23:16]設置的是固件鏡像在flash中偏移地址。如果我們設置固件鏡像空間為1M,偏移地址也設置為1M,則可以設置0x6E0[23:16]為4,0x6E0[15:12]為0。這樣,我們可以把flash中前1M空間(0x0000000-0x00FFFFF)作為固件1存放空間,接下來的1M空間(0x0100000-0x01FFFFF)作為固件2存放空間。
程序運行之后,在固件1中調用固件切換函數,可以運行固件2,在固件2中調用固件切換函數,可以運行固件1。該功能可應用在OTA升級,使升級變得更可靠簡單。
這是一個基于飛凌OK1061-S的簡單的bootloder程序流程:
Flash空間分配memory map:
bootloder程序通過,啟動之后通過判斷更新標志,進行固件升級或者程序跳轉。如果更新標志為0x55667788則認為有新的固件升級包,程序需要升級,則開始校驗升級包,如果校驗成功,則將新的升級包燒寫到APP區域,同時也將更新標志更新為0xffffffff。然后,重啟系統,再次進入bootloder程序,程序判斷更新標志之后不需要升級程序,則直接跳轉到APP程序。
升級包接收一般在 APP 程序中進行, APP 程序通過通信接口(如網絡、 串口等) 接收服務器或上位機等其他設備發來的升級包, 經過校驗之后將每個升級包燒寫到 FLASH 中的升級包地址中。
相關產品 >
-
OK1061-S開發板
528MHz主頻,高速GPIO,原生數據加密|飛凌推出iMXRT1060系列開發板,RT1061開發板,基于iMX RT1061核心板設計,搭載ARM Cortex-M7內核,是一款工業級開發板,主頻528MHz, 配備了一系列特別適合實時應用的功能,例如高速GPIO、CAN-FD以及同步并行 NAND/NOR/PSRAM 控制器。
了解詳情 -
OKMX6ULL-C開發板
40*29mm,雙網雙CAN,8路串口| i.MX6ULL開發板是基于NXP i.MX6ULL設計開發的的一款Linux開發板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應場景豐富。 了解詳情