国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    1971

    瀏覽量

    135004
  • 時鐘配置
    +關注

    關注

    1

    文章

    14

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    軟起動器啟動失敗的原因都有哪些?

    軟起動器作為電動機控制的重要設備,在工業領域廣泛應用,但其啟動失敗問題常困擾用戶。
    的頭像 發表于 02-28 16:02 ?90次閱讀
    軟起動器<b class='flag-5'>啟動</b><b class='flag-5'>失敗</b>的原因都有哪些?

    LMK04000 系列時鐘抖動清理器:高精度時鐘解決方案深度剖析

    LMK04000 系列時鐘抖動清理器:高精度時鐘解決方案深度剖析 引言 在當今的電子系統中,高精度時鐘信號對于數據轉換器、無線基礎設施、網絡
    的頭像 發表于 02-09 16:30 ?120次閱讀

    LMK01801雙時鐘分頻緩沖器:高精度時鐘解決方案

    ,它以極低的噪聲、靈活的配置和出色的性能,為各類時鐘系統提供了理想的解決方案。 文件下載: lmk01801.pdf 產品概述 LMK01801是一款專為需要精密
    的頭像 發表于 02-09 11:10 ?162次閱讀

    賽思分享時鐘服務器的解決方案及其優勢

    隨著科技的不斷發展,各種應用場景對于時間同步和精確性的要求也越來越高。在這種情況下,時鐘服務器應運而生,為各行各業提供了高效、穩定、可靠的時間同步解決方案。本文將詳細介紹時鐘服務器的解決方案
    的頭像 發表于 01-06 17:35 ?5650次閱讀
    賽思分享<b class='flag-5'>時鐘</b>服務器的<b class='flag-5'>解決方案</b>及其優勢

    DC-DC電源模塊常見故障及解決方案(二)

    、異常發熱、快速失效及上電燒毀四類典型故障,提供深入分析和實用解決方案。一、電源模塊啟動異常模塊無法正常啟動啟動緩慢,常與外部電路配置直接
    的頭像 發表于 01-05 11:14 ?1091次閱讀
    DC-DC電源模塊常見故障及<b class='flag-5'>解決方案</b>(二)

    RE時鐘高次諧波解決方案

    字電路的邏輯功能沒有直接影響,但在電磁兼容(EMC)和信號完整性(SI)中帶來了顯著的危害與痛點。圖1時鐘時鐘高次諧波解決方案針對這種高次諧波的時鐘最有效的手段
    的頭像 發表于 12-23 11:34 ?394次閱讀
    RE<b class='flag-5'>時鐘</b>高次諧波<b class='flag-5'>解決方案</b>

    野戰通信設備-55℃瞬時開機用高壓電解電容解決方案

    我們有個客戶的設計方案計劃用于邊境巡邏的野戰通信設備 ,要求在-55℃戰備環境下能保證瞬時開機,但現有高壓電解電容在低溫下容量衰減嚴重導致系統無法啟動,有匹配的鋁電解電容
    發表于 12-08 07:52

    系統從DeepSleep下喚醒時鐘默認為原時鐘,如果原時鐘頻率特別高,是否有存在啟動不穩定問題?

    1.系統從DeepSleep下喚醒時鐘默認為原時鐘,如果原時鐘頻率特別高,是否有存在啟動不穩定問題?這個地方目前有沒有需要特別注意的地方?
    發表于 11-28 07:36

    CW32時鐘啟動過程

    SYSCTRL_HSE.STABLE 被置 1;如果在一定時間內未檢測到 SYSCTRL_HSE.WAITCYCLE 個時鐘信號則認為 HSE 振蕩器起振失敗。 其它時鐘振蕩器的時鐘
    發表于 11-13 07:49

    Intel? Ethernet E830 控制器:引領后量子加密時代的網絡安全解決方案

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

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

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

    存儲示波器觸發電平設置不當導致什么后果?

    觸發電平(Trigger Level)是存儲示波器捕獲穩定波形、定位關鍵事件的核心參數。若設置不當,會導致波形顯示異常、觸發不穩定、關鍵信號丟失等問題,甚至影響測試結果的準確性。以下為詳細分析及應對
    發表于 05-29 14:13

    AS32X601驅動系列教程 SMU_系統時鐘詳解

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

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

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

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

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