從參考手冊中了解到,在軟件運行時才能設(shè)置eFuse。如何設(shè)置BT_FUSE_SEL,使用Keil MDK燒寫 eFuse進行批量生產(chǎn)呢?這樣保持每次固定只從外部的 QSPI Flash引導(dǎo),而不需要判斷外部BOOT GPIO引腳電平,可以減少外部下拉電阻的設(shè)置,對于原理圖設(shè)計會簡化許多。根據(jù)手冊,BT_FUSE_SEL位于熔絲地址 0x460的第四位。
當配置Boot_Mode在內(nèi)部引導(dǎo)(b10)時,BT_FUSE_SEL的狀態(tài)確定引導(dǎo)配置是否取自熔絲位或引腳狀態(tài)。如果BT_FUSE_SEL=0,boot_cfg是從GPIO獲取的。如果BT_FUSE_SEL=1,則從熔絲中獲取引導(dǎo)配置cfg。
當配置Boot_Mode為BOOT_MODE[1:0]=b00:
——BT_FUSE_SEL=0,引導(dǎo)器件中沒有應(yīng)用程序,BootROM進入串行下載模式
——BT_FUSE_SEL=1,引導(dǎo)器件中有應(yīng)用程序,BootROM從FUSE獲取所有引導(dǎo)設(shè)備信息
當配置Boot_Mode為BOOT_MODE[1:0]=b10:
——BT_FUSE_SEL=0,引導(dǎo)器件中的有效應(yīng)用程序,BootROM從boot_cfg引腳獲取引導(dǎo)設(shè)備信息
——BT_FUSE_SEL=1,引導(dǎo)器件中的有效應(yīng)用程序,BootROM從熔絲位獲取所有引導(dǎo)設(shè)備信息
即使配置了 BT_FUSE_SEL=1,當配置了 BOOT_MODE[1:0]=01b時,仍然可以進入串行下載器模式,這與BT_FUSE_SEL沒有關(guān)系,僅當配置BOOT_MODE[1:0]=00b時,ROM引導(dǎo)加載程序?qū)z查BT_FUSE_SEL。所以,如果有BOOT_MODE兩個引腳,仍然可以進入串行下載模式。
在MDK IDE環(huán)境下運行如下固件代碼,該代碼在固件首次啟動時燒寫B(tài)T_FUSE_SEL。在批量生產(chǎn)中,調(diào)試器對Flash進行編程并第一次調(diào)用啟動。所以不再需要引導(dǎo) Boot引腳判斷。
//寫熔絲位
if (!(SRC->SBMR2 & SRC_SBMR2_BT_FUSE_SEL_MASK))
{
int timing = OCOTP_TIMING_STROBE_PROG(1325) | OCOTP_TIMING_RELAX(2) | OCOTP_TIMING_STROBE_READ(11) |OCOTP_TIMING_WAIT(24); //ipg_clk=132MHz
OCOTP->TIMING = timing;
while ((OCOTP->CTRL & (1<
ocotp_ctrl &= ~OCOTP_CTRL_ADDR_MASK;
ocotp_ctrl|= OCOTP_CTRL_ADDR(6);
ocotp_ctrl &= ~OCOTP_CTRL_WR_UNLOCK_MASK ;
ocotp_ctrl|= OCOTP_CTRL_WR_UNLOCK(0x3E77);
OCOTP->CTRL = ocotp_ctrl; //寫地址,解鎖
OCOTP->DATA = (long)((1<<4)|(1<<16));//寫入 BT_FUSE_SEL (1<<4) 和FORCE_INTERNAL_BOOT (1<<16)
}
那么如何在生產(chǎn)中做到這一點呢?使用MIMXRT1021CAG4B,之前BT_CFG_xx信號與GND相連,目前想利用這些GPIO 去連接外部的GPIO或者是LCD或者是ADC芯片,上面介紹的代碼可以做到這一點。注意,當編程到外部 Flash中時,如何讓MCU 執(zhí)行這些代碼?BT_CFG_xxx信號最初是否不需要正確設(shè)置才能執(zhí)行代碼,或者是否需要額外使用調(diào)試器工具進行了一些設(shè)置?在后臺啟動keil的批處理文件,也可以在下載到flash后開始代碼處執(zhí)行(參見如下μVision用戶指南:命令行)。因此,它在編程Flash 后第一次使用調(diào)試器啟動,屆時熔絲位將被寫入。
μVision User's Guide (arm.com)
當然 MCU BootUtility或者MFG都是比較好的燒錄Fuse的工具。
參考文檔"i.MX MCU Manufacturing User's Guide.pdf"Rev. 1, 01/2018, 第8部分有 load fuse命令,例如load fuse 0x00000008 -> 0x06
意味著將32位的數(shù)值0x00000008 寫入到 OTP 區(qū)0, 字6 (ADDR = 0x06)。在參考手冊中,生產(chǎn)配置OTP Bank0 Word6 (HW_OCOTP_CFG5)] ,表示熔絲位的偏置是 460h 。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17123瀏覽量
350978 -
熔絲位
+關(guān)注
關(guān)注
0文章
19瀏覽量
11228 -
Fuse
+關(guān)注
關(guān)注
0文章
11瀏覽量
12296
原文標題:在MIMXRT1020CAG4B中設(shè)置BT_FUSE_SEL熔絲位
文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論