從參考手冊中了解到,在軟件運行時才能設置eFuse。如何設置BT_FUSE_SEL,使用Keil MDK燒寫 eFuse進行批量生產呢?這樣保持每次固定只從外部的 QSPI Flash引導,而不需要判斷外部BOOT GPIO引腳電平,可以減少外部下拉電阻的設置,對于原理圖設計會簡化許多。根據手冊,BT_FUSE_SEL位于熔絲地址 0x460的第四位。
當配置Boot_Mode在內部引導(b10)時,BT_FUSE_SEL的狀態確定引導配置是否取自熔絲位或引腳狀態。如果BT_FUSE_SEL=0,boot_cfg是從GPIO獲取的。如果BT_FUSE_SEL=1,則從熔絲中獲取引導配置cfg。
當配置Boot_Mode為BOOT_MODE[1:0]=b00:
——BT_FUSE_SEL=0,引導器件中沒有應用程序,BootROM進入串行下載模式
——BT_FUSE_SEL=1,引導器件中有應用程序,BootROM從FUSE獲取所有引導設備信息
當配置Boot_Mode為BOOT_MODE[1:0]=b10:
——BT_FUSE_SEL=0,引導器件中的有效應用程序,BootROM從boot_cfg引腳獲取引導設備信息
——BT_FUSE_SEL=1,引導器件中的有效應用程序,BootROM從熔絲位獲取所有引導設備信息
即使配置了 BT_FUSE_SEL=1,當配置了 BOOT_MODE[1:0]=01b時,仍然可以進入串行下載器模式,這與BT_FUSE_SEL沒有關系,僅當配置BOOT_MODE[1:0]=00b時,ROM引導加載程序將檢查BT_FUSE_SEL。所以,如果有BOOT_MODE兩個引腳,仍然可以進入串行下載模式。
在MDK IDE環境下運行如下固件代碼,該代碼在固件首次啟動時燒寫BT_FUSE_SEL。在批量生產中,調試器對Flash進行編程并第一次調用啟動。所以不再需要引導 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)
}
那么如何在生產中做到這一點呢?使用MIMXRT1021CAG4B,之前BT_CFG_xx信號與GND相連,目前想利用這些GPIO 去連接外部的GPIO或者是LCD或者是ADC芯片,上面介紹的代碼可以做到這一點。注意,當編程到外部 Flash中時,如何讓MCU 執行這些代碼?BT_CFG_xxx信號最初是否不需要正確設置才能執行代碼,或者是否需要額外使用調試器工具進行了一些設置?在后臺啟動keil的批處理文件,也可以在下載到flash后開始代碼處執行(參見如下μVision用戶指南:命令行)。因此,它在編程Flash 后第一次使用調試器啟動,屆時熔絲位將被寫入。
μ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位的數值0x00000008 寫入到 OTP 區0, 字6 (ADDR = 0x06)。在參考手冊中,生產配置OTP Bank0 Word6 (HW_OCOTP_CFG5)] ,表示熔絲位的偏置是 460h 。
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17317瀏覽量
352643 -
熔絲位
+關注
關注
0文章
19瀏覽量
11273 -
Fuse
+關注
關注
0文章
11瀏覽量
12307
原文標題:在MIMXRT1020CAG4B中設置BT_FUSE_SEL熔絲位
文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
SD SRD104模式不可用的原因?
BLHost從NOR執行應用程序無法正常啟動的原因?
如果SJC被禁用,MCU i.MXRT 1051加密的XIP啟動在軟件重置后失敗怎么解決?
MIMXRT1021CAG4A無法正常啟動是為什么?
如何使用SD卡啟動MIMXRT1024CAG4B?
熔絲位(Fuse)快速入門
![<b class='flag-5'>熔</b><b class='flag-5'>絲</b><b class='flag-5'>位</b>(<b class='flag-5'>Fuse</b>)快速入門](https://file.elecfans.com/web2/M00/48/D0/pYYBAGKhtCaANrJqAAApvWaQGvc747.jpg)
關于AVR單片機熔絲位的設置和拯救方法大全 AVR單片機熔絲位的設置和詳細的拯救方法
![關于AVR單片機<b class='flag-5'>熔</b><b class='flag-5'>絲</b><b class='flag-5'>位</b>的<b class='flag-5'>設置</b>和拯救方法大全 AVR單片機<b class='flag-5'>熔</b><b class='flag-5'>絲</b><b class='flag-5'>位</b>的<b class='flag-5'>設置</b>和詳細的拯救方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論