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