chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

系統(tǒng)時鐘配置不當(dāng)導(dǎo)致OTFAD加密啟動失敗的解決方案

西西 ? 來源:與非網(wǎng) ? 作者:痞子衡 ? 2021-03-07 13:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天痞子衡給大家分享的是系統(tǒng)時鐘配置不當(dāng)會導(dǎo)致i.MXRT1xxx系列下OTFAD加密啟動失敗問題。

我們知道,i.MXRT1xxx家族早期型號(RT1050/RT0160/RT1020)的硬件解密外設(shè)名字叫BEE,這個外設(shè)主要是配合FlexSPI外設(shè)去實(shí)現(xiàn)外接串行NOR Flash在線解密XIP執(zhí)行用的。而到了最近的i.MXRT1xxx新型號(RT1010/RT1170)上,BEE外設(shè)被替換成了OTFAD外設(shè),功能不變,解密效率得到了很大提升,但客戶在使能OTFAD加密啟動時常常遇到App無法正常運(yùn)行問題,這其實(shí)跟OTFAD自身的一個時鐘小限制有關(guān)(這個限制在BEE上不存在),今天痞子衡就來好好聊一聊OTFAD的這個小限制:

一、問題描述

我們以i.MXRT1010為例,從恩智浦官網(wǎng)下載一個SDK包(痞子衡下的是v2.9.1),隨便選擇其中一個例程,就以最簡單的 \SDK\boards\evkmimxrt1010\demo_apps\led_blinky 為例吧。編譯這個 led_blinky 工程(選擇 flexspi_nor_debug build,即XIP工程),得到可執(zhí)行文件(實(shí)際bin文件大小為10KB左右),使用 NXP-MCUBootUtility 工具將可執(zhí)行文件(led_blinky.out)下載進(jìn)MIMXRT1010-EVK開發(fā)板中(下載時啟動模式為2'b01,啟動時切換到2'b10),可以看到板載綠色LED小燈(D25)會閃,例程是可以正常工作的。

現(xiàn)在讓我們嘗試使能OTFAD加密,回到芯片下載模式依然借助 NXP-MCUBootUtility 工具,將工具 Secure boot type 選項(xiàng)切換為 OTFAD Encrypted Image Boot,其他設(shè)置均默認(rèn)(此時加密范圍是 0x60001000 - 0x60001fff,僅加密IVT等啟動頭,不含app),再次下載可執(zhí)行文件(led_blinky.out),換到芯片啟動模式復(fù)位板子,例程依舊是正常工作的,看起來OTFAD加密啟動似乎沒有問題。

讓我們再進(jìn)一步,將加密范圍設(shè)置為0x60002000 - 0x60004fff,這時加密區(qū)域覆蓋到了整個app,重新按上述流程操作一遍,發(fā)現(xiàn)例程沒能正常工作,這時候OTFAD加密啟動出了問題,難道app區(qū)域不能被加密?那OTFAD加密還有啥意義?

app區(qū)域當(dāng)然可以被加密,跟著痞子衡再做一次實(shí)驗(yàn),在 led_blinky.c 文件的 main() 函數(shù)中,我們將時鐘配置函數(shù) BOARD_BootClockRUN() 直接注釋掉或者在鏈接文件里將其全部搞成 __ramfunc(即在芯片內(nèi)部RAM里執(zhí)行這部分時鐘配置代碼),這個例程僅是利用SysTick定時翻轉(zhuǎn)GPIO,因此時鐘配置代碼去掉不影響正常運(yùn)行,重新編譯工程再按上面流程操作一遍,這時候例程又能正常工作了,說明加密后的app是能被OTFAD正常解密執(zhí)行的。

現(xiàn)在的問題變成了為何OTFAD加密啟動時,BOARD_BootClockRUN() 函數(shù)不能在Flash里執(zhí)行,這就是問題所在。

二、原因分析

關(guān)于上述問題的原因,痞子衡先直接給答案,這是OTFAD外設(shè)本身的時鐘小限制,當(dāng)OTFAD被使能時,如果被加密的app代碼是XIP執(zhí)行,app里做系統(tǒng)時鐘配置時要始終保證Core時鐘高于FlexSPI外設(shè)時鐘。如果Core時鐘低于FlexSPI時鐘,此時Core去訪問加密Flash區(qū)域,OTFAD無法正常解密,會導(dǎo)致指令錯亂,發(fā)生系統(tǒng)故障。

我們配合上面的i.MXRT1010系統(tǒng)時鐘樹來認(rèn)真分析下OTFAD這個時鐘限制問題。芯片上電總是從BootROM執(zhí)行,BootROM會先將Core配置到396MHz,將FlexSPI時鐘根據(jù)用戶放置在Flash偏移0x400處的FDCB里的設(shè)定配到30MHz - 200MHz不等,再讀取Flash偏移0地址處OTFAD DEK KeyBlob數(shù)據(jù)使能OTFAD,然后讀取IVT等頭信息去跳轉(zhuǎn)到App。很顯然只加密IVT部分根本不受OTFAD限制的影響,這部分解析是在BootROM里完成的,BootROM里時鐘配置符合OTFAD時鐘限制要求。

// BootROM里對Core時鐘配置
CCM_ANALOG->PFD_528[PFD3_FRAC] = 24,   PLL2 PFD3輸出 (528MHz * 18) / 24 = 396MHz
CCM->CBCMR[PRE_PERIPH_CLK_SEL] = 2,    時鐘來自PLL2 PFD3
CCM->CBCDR[PERIPH_CLK_SEL]     = 0,   內(nèi)核時鐘來自CCM->CBCMR[PRE_PERIPH_CLK_SEL]
CCM->CBCDR[AHB_PODF]           = 0,   內(nèi)核時鐘不分頻

// BootROM里對FlexSPI時鐘配置
CCM_ANALOG->PFD_480[PFD0_FRAC] = x,    PLL3 PFD0輸出 (480MHz * 18) / x
CCM->CSCMR1[FLEXSPI_CLK_SEL]   = 3,    時鐘來自PLL3 PFD0
CCM->CSCMR1[FLEXSPI_CLK_SRC]   = 0,   FlexSPI時鐘來自CCM->CSCMR1[FLEXSPI_CLK_SEL]
CCM->CSCMR1[FLEXSPI_PODF]      = y,   FlexSPI時鐘做(y+1)分頻

當(dāng)BootROM跳轉(zhuǎn)到了App之后,我們再來看看App里對時鐘是怎么配置的,就是BOARD_BootClockRUN()函數(shù),可以看到這個函數(shù)里將內(nèi)核頻率從BootROM設(shè)置的396MHz切換到外部OSC 24MHz。無論此時用戶FDCB里對FlexSPI時鐘是多少配置,至少也會大于30MHz,那么此時24MHz內(nèi)核頻率一定會低于FlexSPI時鐘頻率,此時只要發(fā)生內(nèi)核對Flash加密區(qū)域的訪問(時鐘配置代碼就在Flash里執(zhí)行),就觸發(fā)了OTFAD時鐘限制問題,App就會跑飛。

三、解決方案

知道了原因,解決方案就簡單了,在App時鐘配置里,不要按照尋常套路去先將內(nèi)核時鐘源切換到外部OSC再切到PLL,而是直接切到PLL上。比如i.MXRT1010內(nèi)部有個PLL6(也叫Audio PLL),固定500MHz,正好是App要的最終內(nèi)核頻率,我們在BOARD_BootClockRUN()里將Audio(Enet) PLL初始化設(shè)置代碼提到前面,刪掉原來的切換OSC設(shè)置代碼即可。

voidBOARD_BootClockRUN(void)
{
//此處略去...
/*SetOscillatorreadycountervalue.*/
CCM->CCR=(CCM->CCR&(~CCM_CCR_OSCNT_MASK))|CCM_CCR_OSCNT(127);
-/*SettingPeriphClk2MuxandPeriphMuxtoprovidestableclockbeforePLLsareinitialed*/
-CLOCK_SetMux(kCLOCK_PeriphClk2Mux,1);/*SetPERIPH_CLK2MUXtoOSC*/
-CLOCK_SetMux(kCLOCK_PeriphMux,1);/*SetPERIPH_CLKMUXtoPERIPH_CLK2*/

//此處略去...
/*SetIPG_PODF.*/
CLOCK_SetDiv(kCLOCK_IpgDiv,3);
+/*InitEnetPLL.*/
+CLOCK_InitEnetPll(&enetPllConfig_BOARD_BootClockRUN);
+/*Setpreperiphclocksource.*/
+CLOCK_SetMux(kCLOCK_PrePeriphMux,3);

//此處略去...
/*EnableAudioPLLoutput.*/
CCM_ANALOG->PLL_AUDIO|=CCM_ANALOG_PLL_AUDIO_ENABLE_MASK;
-/*InitEnetPLL.*/
-CLOCK_InitEnetPll(&enetPllConfig_BOARD_BootClockRUN);
-/*Setpreperiphclocksource.*/
-CLOCK_SetMux(kCLOCK_PrePeriphMux,3);

//此處略去...
/*SetSystemCoreClockvariable.*/
SystemCoreClock=BOARD_BOOTCLOCKRUN_CORE_CLOCK;
}

最后再提一下,這個OTFAD時鐘限制問題在i.MXRT1170上同樣存在,解決思路與上面類似,痞子衡就不再贅述了。

至此,系統(tǒng)時鐘配置不當(dāng)會導(dǎo)致i.MXRT1xxx系列下OTFAD加密啟動失敗問題便介紹完畢了
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 時鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1946

    瀏覽量

    134119
  • 時鐘配置
    +關(guān)注

    關(guān)注

    1

    文章

    14

    瀏覽量

    8913
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    當(dāng)ICE_DAT和ICE_CLK引腳配置為應(yīng)用編碼中的備用功能時,是否會導(dǎo)致編程失敗?

    當(dāng)ICE_DAT和ICE_CLK引腳配置為應(yīng)用編碼中的備用功能時,是否會導(dǎo)致編程失敗
    發(fā)表于 08-21 06:30

    叉車限速解決方案

    叉車的動力系統(tǒng),響應(yīng)迅速,限速效果穩(wěn)定可靠,且對叉車原有結(jié)構(gòu)改動較小,適配性較強(qiáng)。 三、聲光預(yù)警 聲光預(yù)警功能是限速解決方案中的重要輔助部分。當(dāng)叉車即將達(dá)到限速值或出現(xiàn)超速情況時,裝置會立即啟動聲光
    發(fā)表于 08-20 14:00

    Intel? Ethernet E830 控制器:引領(lǐng)后量子加密時代的網(wǎng)絡(luò)安全解決方案

    Intel? Ethernet 830 Controllers,其采用安全啟動、安全固件升級和雙硬件信任根等安全技術(shù),通過符合 CNSA 1.0 和 FIPS 140-3 1 級的后量子加密 (PQC) 解決方案以應(yīng)對未來的數(shù)據(jù)
    的頭像 發(fā)表于 08-11 17:55 ?6159次閱讀
    Intel? Ethernet E830 控制器:引領(lǐng)后量子<b class='flag-5'>加密</b>時代的網(wǎng)絡(luò)安全<b class='flag-5'>解決方案</b>

    寬溫啟動失敗?聚徽揭秘防爆顯示屏-40℃低溫啟動的加熱膜配置技術(shù)

    防爆顯示屏的低溫啟動難題,解析加熱膜配置的核心技術(shù),為工業(yè)場景提供可靠解決方案。 一、低溫啟動失敗的核心挑戰(zhàn) 1. 液晶材料性能衰減 在-4
    的頭像 發(fā)表于 06-18 16:17 ?440次閱讀

    存儲示波器觸發(fā)電平設(shè)置不當(dāng)導(dǎo)致什么后果?

    觸發(fā)電平(Trigger Level)是存儲示波器捕獲穩(wěn)定波形、定位關(guān)鍵事件的核心參數(shù)。若設(shè)置不當(dāng),會導(dǎo)致波形顯示異常、觸發(fā)不穩(wěn)定、關(guān)鍵信號丟失等問題,甚至影響測試結(jié)果的準(zhǔn)確性。以下為詳細(xì)分析及應(yīng)對
    發(fā)表于 05-29 14:13

    AS32X601驅(qū)動系列教程 SMU_系統(tǒng)時鐘詳解

    在現(xiàn)代嵌入式系統(tǒng)中,時鐘與復(fù)位管理是確保系統(tǒng)穩(wěn)定運(yùn)行的關(guān)鍵。我們的SMU(系統(tǒng)管理單元)模塊專注于此核心任務(wù),通過精準(zhǔn)的時鐘
    的頭像 發(fā)表于 05-23 16:01 ?493次閱讀
    AS32X601驅(qū)動系列教程 SMU_<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>時鐘</b>詳解

    愛普生SG2520HHN晶振數(shù)據(jù)中心服務(wù)器的理想解決方案

    系統(tǒng)宕機(jī)。愛普生SG2520HHN差分晶振憑借低抖動、寬頻段、高兼容性卓越性能,成為數(shù)據(jù)中心服務(wù)器的理想時鐘解決方案。SG2520HHN差分晶振特性與優(yōu)勢:1.超
    的頭像 發(fā)表于 04-29 17:32 ?371次閱讀
    愛普生SG2520HHN晶振數(shù)據(jù)中心服務(wù)器的理想<b class='flag-5'>解決方案</b>

    mxrt1176在為OTFAD編程保險絲后“半”變磚,怎么解決?

    在對一些保險絲進(jìn)行編程后,我在 imxrt1176(在 EVK 上)上遇到了一個奇怪的“問題”,主要是為了檢查此設(shè)備上的 OTFAD 加密和 XIP。 通過 flashloader 加載的加密圖像
    發(fā)表于 04-09 07:36

    RT1052芯片啟動失敗的原因?怎么解決?

    最近遇到RT1052芯片啟動失敗問題,10次里有5次啟動失敗,但接上示波器觀察RT1052電源時序波形后,啟動
    發(fā)表于 03-27 07:00

    芯知識|WT588F02B語音芯片燒錄失敗的原因解析及解決方案

    、線路長度三大核心因素出發(fā),深入分析燒錄失敗的原因并提供系統(tǒng)化的解決方案。一、檢查下載器與芯片的物理連接問題表現(xiàn)燒錄時提示"連接超時"或"設(shè)備未響應(yīng)",或燒錄進(jìn)度條卡
    的頭像 發(fā)表于 03-26 09:05 ?780次閱讀
    芯知識|WT588F02B語音芯片燒錄<b class='flag-5'>失敗</b>的原因解析及<b class='flag-5'>解決方案</b>

    鴻蒙原生頁面高性能解決方案上線OpenHarmony社區(qū) 助力打造高性能原生應(yīng)用

    Nodepool、HMrouter和DataCache 三大解決方案,并上架OpenHarmony開源社區(qū)分,分別針對應(yīng)用頁面滑動、跳轉(zhuǎn)、首頁冷啟動等關(guān)鍵性能場景提供高效易用的工具,助力伙伴和開發(fā)者打造
    發(fā)表于 01-02 18:00

    SSM開發(fā)中的常見問題及解決方案

    配置文件存在錯誤,如語法錯誤、路徑錯誤或格式錯誤,導(dǎo)致軟件系統(tǒng)無法正常運(yùn)行。 解決方案 : 仔細(xì)檢查配置文件的語法、路徑和格式,確保其
    的頭像 發(fā)表于 12-17 09:16 ?1658次閱讀

    aes加密的常見錯誤及解決方案

    的歸納以及相應(yīng)的解決方案: 常見錯誤 編碼問題 : 在將字節(jié)數(shù)組轉(zhuǎn)換成字符串時,如果使用了不同的編碼格式,可能會導(dǎo)致解密后的數(shù)據(jù)出現(xiàn)亂碼。 密鑰長度問題 : AES算法支持128位、192位和256位三種密鑰長度。如果加密和解密
    的頭像 發(fā)表于 11-14 15:13 ?5003次閱讀

    UID加密安全啟動原理分析

    本文導(dǎo)讀 ZDP14x0系列芯片是內(nèi)置開源GUI引擎的圖像顯示專用驅(qū)動芯片,在實(shí)際產(chǎn)品開發(fā)中需要加密保護(hù),防止應(yīng)用程序被讀取和盜用,本文將介紹如何實(shí)現(xiàn)UID加密安全啟動。 UID加密
    的頭像 發(fā)表于 11-11 11:49 ?1357次閱讀
    UID<b class='flag-5'>加密</b>安全<b class='flag-5'>啟動</b>原理分析

    soc開發(fā)流程常見問題及解決方案

    SOC(System on a Chip,系統(tǒng)級芯片)開發(fā)流程中常見問題及解決方案主要包括以下幾個方面: 一、環(huán)境問題 常見問題 : 開發(fā)環(huán)境配置復(fù)雜,新手難以快速上手。 依賴項(xiàng)缺失或版本不兼容
    的頭像 發(fā)表于 11-10 09:26 ?1917次閱讀