在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

系統時鐘配置不當導致OTFAD加密啟動失敗的解決方案

西西 ? 來源:與非網 ? 作者:痞子衡 ? 2021-03-07 13:00 ? 次閱讀

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

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

一、問題描述

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

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

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

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

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

二、原因分析

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

我們配合上面的i.MXRT1010系統時鐘樹來認真分析下OTFAD這個時鐘限制問題。芯片上電總是從BootROM執行,BootROM會先將Core配置到396MHz,將FlexSPI時鐘根據用戶放置在Flash偏移0x400處的FDCB里的設定配到30MHz - 200MHz不等,再讀取Flash偏移0地址處OTFAD DEK KeyBlob數據使能OTFAD,然后讀取IVT等頭信息去跳轉到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,   內核時鐘來自CCM->CBCMR[PRE_PERIPH_CLK_SEL]
CCM->CBCDR[AHB_PODF]           = 0,   內核時鐘不分頻

// 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)分頻

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

三、解決方案

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

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上同樣存在,解決思路與上面類似,痞子衡就不再贅述了。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 時鐘
    +關注

    關注

    11

    文章

    1747

    瀏覽量

    131803
  • 時鐘配置
    +關注

    關注

    1

    文章

    14

    瀏覽量

    8663
收藏 人收藏

    評論

    相關推薦

    SSM開發中的常見問題及解決方案

    配置文件存在錯誤,如語法錯誤、路徑錯誤或格式錯誤,導致軟件系統無法正常運行。 解決方案 : 仔細檢查配置文件的語法、路徑和格式,確保其
    的頭像 發表于 12-17 09:16 ?560次閱讀

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

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

    UID加密安全啟動原理分析

    本文導讀 ZDP14x0系列芯片是內置開源GUI引擎的圖像顯示專用驅動芯片,在實際產品開發中需要加密保護,防止應用程序被讀取和盜用,本文將介紹如何實現UID加密安全啟動。 UID加密
    的頭像 發表于 11-11 11:49 ?575次閱讀
    UID<b class='flag-5'>加密</b>安全<b class='flag-5'>啟動</b>原理分析

    soc開發流程常見問題及解決方案

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

    C2000 F28004x系列MCU PLL鎖相失敗問題解決方案

    電子發燒友網站提供《C2000 F28004x系列MCU PLL鎖相失敗問題解決方案.pdf》資料免費下載
    發表于 09-27 11:24 ?0次下載
    C2000 F28004x系列MCU PLL鎖相<b class='flag-5'>失敗</b>問題<b class='flag-5'>解決方案</b>

    ensp啟動失敗,錯誤代碼40怎么回事

    ENSP(Enterprise Network Simulation Platform)啟動失敗并顯示錯誤代碼40,通常是由多種原因引起的。以下是一些可能的原因及相應的解決方法: 一、可能的原因
    的頭像 發表于 08-30 14:29 ?9498次閱讀

    晶閘管逆變失敗的原因和解決方案

    晶閘管逆變失敗是電力電子領域中的一個常見問題,它可能由多種因素引起,并可能對系統造成嚴重的損害。以下是對晶閘管逆變失敗原因及解決方法的詳細探討,旨在提供全面且深入的理解。
    的頭像 發表于 08-27 16:26 ?1759次閱讀

    人臉識別模型訓練失敗原因有哪些

    : 1.1 數據量不足 人臉識別模型需要大量的數據進行訓練,以提高模型的泛化能力。如果數據量不足,模型可能無法學習到足夠的特征,導致訓練失敗解決方案是增加數據量,可以通過數據增強、數據合成等方法來增加數據量。 1.2
    的頭像 發表于 07-04 09:17 ?751次閱讀

    esp32-c3開啟安全啟動和flash加密概率不啟動是什么原因導致的?

    esp32-c3開啟安全啟動和flash加密概率不啟動,重新上電就好了,啟動時候簽名校驗錯誤,硬件sha256 返回全0,懷疑是燒efuse影響了硬件sha,把硬件sha替換為軟件sh
    發表于 06-19 06:42

    瑞薩電子推出全新超低25fs-rms時鐘解決方案

    全球半導體解決方案領域的佼佼者瑞薩電子今日重磅推出FemtoClock? 3,一款專為有線基礎設施、數據中心和工業應用打造的超低25fs-rms時鐘解決方案。這一創新產品不僅擴展了瑞薩電子的
    的頭像 發表于 05-10 11:12 ?598次閱讀

    鴻蒙OpenHarmony開發板:【產品配置規則】

    產品解決方案為基于開發板的完整產品,主要包含產品對OS的適配、部件拼裝配置啟動配置和文件系統配置等。產品
    的頭像 發表于 05-09 10:32 ?1222次閱讀
    鴻蒙OpenHarmony開發板:【產品<b class='flag-5'>配置</b>規則】

    基于 FPGA 的光纖混沌加密系統

    加密解決方案,采用 L1 層加密技術,對業務層透明,采用高強度的 AES256 算法,確保各行業的數據安全性。此方案雖然實現簡單,但缺點是吞吐量小、端口少、速率低。 對于 ASE 算法
    發表于 04-26 17:18

    STM32 foc2.0無感啟動電流過大導致啟動失敗怎么解決?

    STM32 foc2.0無感啟動電流過大導致啟動失敗
    發表于 04-22 06:26

    高性價比的時鐘解決方案——SC6301,兼容LMK04828

    高性價比的時鐘解決方案——SC6301,兼容LMK04828
    的頭像 發表于 04-12 10:06 ?689次閱讀
    高性價比的<b class='flag-5'>時鐘</b><b class='flag-5'>解決方案</b>——SC6301,兼容LMK04828

    STM32L552系統時鐘或外設時鐘配置錯誤導致系統不穩定的原因?怎么解決?

    系統時鐘或外設時鐘配置錯誤導致系統不穩定
    發表于 03-20 07:59
    主站蜘蛛池模板: 99久久精品免费看国产免费 | 在线观看视频在线观看 | 中文字幕在线播放不卡 | 亚洲精品你懂的 | 成人夜色 | 国产爱搞 | 91三级在线 | 午夜在线观看视频 | 高清成人| 国产黄网站在线观看 | 欧美性生交xxxxx久久久 | 美女被免费视频网站九色 | 小草影院亚洲私人影院 | 亚洲 丝袜 制服 欧美 另类 | 日本黄色免费在线 | 午夜精品在线免费观看 | 欧美在线你懂的 | 在线观看网站国产 | 成人性视频网站 | 黄色录像大全 | 亚洲伊人久久综合影院2021 | 日本三级全黄 | 欧美激情综合色综合啪啪五月 | 亚洲国产一区二区三区在线观看 | 4hc44四虎www亚洲 | 天天做天天爱天天爽天天综合 | 中文永久免费看电视网站入口 | 97人人在线视频 | 色欲麻豆国产福利精品 | 九色愉拍自拍 | 四虎永久在线精品 | 日本最顶级丰满的aⅴ艳星 日本最好的免费影院 | 成人午夜亚洲影视在线观看 | 久久亚洲免费视频 | 永久免费av网站 | 操操操操操 | 色综合亚洲天天综合网站 | 边做饭边被躁欧美三级小说 | 色综合久久久高清综合久久久 | 91aaa免费观看在线观看资源 | 午夜精品视频在线 |