衡阳派盒市场营销有限公司

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

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

3天內不再提示

利用i.MXRT1xxx系列ROM集成的DCD功能可輕松配置指定外設

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 2023-04-21 09:40 ? 次閱讀

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是利用i.MXRT1xxx系列ROM集成的DCD功能可輕松配置指定外設

關于 i.MXRT1xxx 系列芯片 BootROM 中集成的 DCD 功能這個話題,痞子衡早就想寫了,但是一直沒有動筆,畢竟這個話題比較生澀,單獨講會比較枯燥。最近痞子衡在支持一個 i.MXRT1170 客戶,需要在客戶板卡上跑其應用代碼的壓力測試,但是客戶因為保密的緣故僅提供了應用可執行文件,而我們又需要在客戶應用里額外加一些配置代碼做測試,測試過程中會涉及多次斷電上電,如果掛外部調試器去做額外配置又太繁瑣,這時候 DCD 功能就派上用場了。

Note:文中貼圖、代碼主要以 i.MXRT1170 為例,其余 i.MXRT1xxx 系列原理類似。

一、DCD是什么及其應用場景

DCD 是 Device Configuration Data 縮寫,這是 i.MXRT1xxx 系列芯片 BootROM 里帶的一個附加功能,主要用于 App 啟動前系統外設的用戶定制化配置。我們知道 i.MXRT1xxx 系列芯片上電永遠都是 BootROM 代碼先執行,然后由 BootROM 再去加載 App 執行。如果希望在 App 執行前系統就已經被配置到指定狀態(即不需要在 App 里去做這方面系統設置),那就需要借助 DCD 功能,你只需要按格式將 DCD 數據放到 Boot Device 指定偏移處即可,BootROM 會自動去解析執行。

翻看芯片參考手冊 Device Configuration Data (DCD) 章節,你會發現 DCD 數據設計特別簡單,它總共支持三類命令:Write data(Tag 是 0xCC)、Check data(Tag 是 0xCF)、NOP(Tag 是 0xC0),這三類命令就是為了讀寫芯片外設寄存器而設計的,我們需要做的就是組合這三類命令完成指定外設模塊寄存器的設置序列。任意打開一個 RT1170 SDK 示例工程,都會包含 dcd.c/h 文件(僅當工程選項預編譯宏里有 XIP_BOOT_HEADER_DCD_ENABLE=1 才會被使能)。

facaaa18-df6c-11ed-bfe3-dac502259ad0.png

隨便摘其中兩句分析下,第一句表明是 Write data 命令的 *address = val_msk 動作合集,第二句是執行 *((uint32_t *)0x40CC0200) = 0x00000703,也就是 CCM->CLOCK_ROOT[kCLOCK_Root_Semc].CONTROL = 0x703。

/*#1.1-129,commandheaderbytesformerged'Write-value'command*/
0xCC,0x04,0x0C,0x04,
/*#1.1,command:write_value,address:CCM_CLOCK_ROOT4_CONTROL,value:0x703,size:4*/
0x40,0xCC,0x02,0x00,0x00,0x00,0x07,0x03,

接著這個示例 dcd.c 內容繼續聊,這其實是配置芯片 SEMC 外設去初始化外部 SDRAM 的全部序列。有了這個 DCD 設置,那么 App 里就可以不用管外部 SDRAM 初始化工作了,直接讀寫訪問 SDRAM 完成相應應用業務功能即可,這也是 DCD 的典型應用場景。如果應用代碼直接是全部在 SDRAM 執行,在不設計用戶二級 Bootloader 做加載的情況下,DCD 是必選的解決方案。

二、以實際客戶案例代入DCD使用

現在回到客戶的實際案例,客戶 RT1170 板卡上用了一顆來自 MXIC 的 Octal Flash,代碼是執行在 Flash 上,現在我們需要測試不同 FlexSPI1->DLLACR[SLVDLYTARGET] 設置下的工作情況,而我們手頭僅有客戶可執行文件。

將客戶可執行文件下載進板卡,并設置啟動模式為從 Flash 啟動(2'b10),然后掛上 JLINK 調試器讀取 FlexSPI1->DLLACR 寄存器值(該寄存器地址是 0x400cc0c0),得到 0x00400079,其中 SLVDLYTARGET 是默認的理想值 4'b1111,這個值是 BootROM 自動配置的,我們無法通過 FDCB 啟動頭來更改設置。

fae51ec0-df6c-11ed-bfe3-dac502259ad0.png

為了做壓力測試,我們需要更改不同的 FlexSPI1->DLLACR[SLVDLYTARGET] 值,比如將其設為 4'b1000,這時候可以借助 DCD 來實現,我們直接使用 MCUBootUtility 工具(需要使用 v4.1.1 版本及以上)來使能 DCD。

下載地址:https://github.com/JayHeng/NXP-MCUBootUtility/archive/refs/tags/v4.1.1.zip

將客戶板卡啟動模式改為 Serial Download (2'b01),插上 UART/USB 下載線,打開 MCUBootUtility 工具,在 DCD 設置界面里啟用 "Use DCD description" 選項,并在動作框里直接輸入下面語句(這里直接是類 C 語法,會被工具自動轉成 DCD 數據),然后連接、下載。

*(uint32_t*)0x400cc0c0=0x00400041;
faf696aa-df6c-11ed-bfe3-dac502259ad0.png

將板卡設為從 Flash 啟動模式后重新上電,掛上 JLINK 再去讀取,此時 FlexSPI1->DLLACR 已經是期望的 0x00400041,說明 DCD 功能生效了。這里還有一個注意事項,即 BootROM 利用 FDCB 啟動頭配置 FlexSPI 外設在前,解析執行 DCD 數據在后,所以我們才能借助 DCD 實現這樣的更改測試。

fb0f99de-df6c-11ed-bfe3-dac502259ad0.png

三、DCD能配置全部外設嗎?

看起來 DCD 特別強大,那么它能幫助操作 ARM 4GB 系統空間里的全部地址嗎?答案是否定的,出于安全考慮,BootROM 里做了地址限制,我們僅能用 DCD 操作如下指定的一些外設(不同 i.MXRT 系列有所不同):

fb252f10-df6c-11ed-bfe3-dac502259ad0.png

至此,利用i.MXRT1xxx系列ROM集成的DCD功能可輕松配置指定外設痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯:湯梓紅

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

    關注

    31

    文章

    5363

    瀏覽量

    121167
  • ROM
    ROM
    +關注

    關注

    4

    文章

    575

    瀏覽量

    85991
  • 命令
    +關注

    關注

    5

    文章

    696

    瀏覽量

    22110
  • DCD
    DCD
    +關注

    關注

    0

    文章

    8

    瀏覽量

    2428
  • bootrom
    +關注

    關注

    0

    文章

    6

    瀏覽量

    3767

原文標題:日常炫技!DCD功能可輕松配置i.MXRT指定外設!

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    i.MX RT1xxx 系列的時鐘系統以及相關功能引腳

    目前 i.MXRT1xxx 系列主要分為 i.MX RT10xx 和 i.MXRT11xx 兩大分支。這兩個分支的時鐘系統設計是有一些差異的,不過總體來說,架構差別不大,我們以如下
    發表于 07-08 17:01 ?815次閱讀

    i.MXRT1170 的時鐘架構

    目前 i.MXRT1xxx 系列主要分為 i.MX RT10xx 和 i.MXRT11xx 兩大分支。這兩個分支的時鐘系統設計是有一些差異的,不過總體來說,架構差別不大,我們以如下
    發表于 07-08 17:05 ?1059次閱讀

    恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動。
    發表于 08-21 09:20 ?357次閱讀
    恩智浦<b class='flag-5'>i.MXRT1xxx</b><b class='flag-5'>系列</b>MCU的Serial NAND啟動

    為什么改動i.MXRT1xxx里IOMUXC_GPR寄存器保留位會造成系統異常呢

    為什么改動i.MXRT1xxx里IOMUXC_GPR寄存器保留位會造成系統異常呢?怎樣去解決在i.MXRT1062應用程序里動態調整FlexRAM導致WDOG模塊工作異常的問題呢?
    發表于 11-29 06:34

    i.MXRTxxx系列ROM中靈活的串行NOR Flash啟動硬復位引腳選擇

    篇非常詳細的文章 《深入i.MXRT1050系列ROM中串行NOR Flash啟動初始化流程》,這篇文章主要針對 i.MXRT1xxx 四位數系列
    發表于 12-21 06:34

    如何解決i.MXRT1xxx系列啟動應用程序發生異常跑飛問題?

    i.MXRT1xxx系列啟動應用程序如何解決異常跑飛問題?
    發表于 12-23 07:41

    i.MXRT1xxx Boot的Serial Downloader模式相關資料分享

    (sdphost, mfgtool) 里痞子衡為大家介紹了i.MXRT1xxx Boot的Serial Downloader模式,這種模式主要是用來引導啟動Flashloader,那么Flashlo...
    發表于 01-26 08:12

    系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗的解決辦法

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗問題。  我們知道,i.MXRT1xxx家族早
    發表于 02-08 06:09

    i.MXRT1xxx上的普通GPIO與高速GPIO的差異是什么?

    i.MXRT1xxx上的普通GPIO與高速GPIO的差異是什么?
    發表于 02-08 06:54

    i.MXRT1xxx系列里暗藏的Product ID寄存器介紹

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx系列里暗藏的Product ID寄存器。  MCU 廠商在定義一個產品系列時,通常是會預先規劃產品發展路線
    發表于 02-11 06:24

    i.MXRT系列ROM API設計

    的 FlexSPI driver API 輕松 IAP》、《其實 i.MXRT1050,1020,1015 系列 ROM 也提供了 Fle
    的頭像 發表于 10-30 10:52 ?649次閱讀

    痞子衡嵌入式:改動i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能會造成系統異常

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是改動i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能會造成系統異常。  痞子衡的嵌入式技術交流群里有一位非常活躍的朋友
    發表于 12-04 17:36 ?8次下載
    痞子衡嵌入式:改動<b class='flag-5'>i.MXRT1xxx</b>里IOMUXC_GPR寄存器保留位可能會造成系統異常

    痞子衡嵌入式:系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是系統時鐘配置不當會導致i.MXRT1xxx系列下OTFAD加密啟動失敗問題。  我們知道,i.MXRT1xxx家族早
    發表于 12-04 19:36 ?1次下載
    痞子衡嵌入式:系統時鐘<b class='flag-5'>配置</b>不當會導致<b class='flag-5'>i.MXRT1xxx</b><b class='flag-5'>系列</b>下OTFAD加密啟動失敗

    利用i.MX RT1xxx系列ROM集成DCD功能輕松配置指定外設

    關于i.MX RT1xxx系列芯片BootROM中集成DCD功能這個話題,早就想寫了,但是一直
    的頭像 發表于 04-20 15:54 ?1343次閱讀

    Serial NAND i.MX RT1xxx啟動

    。 Note:文中貼圖、代碼主要以 i.MXRT1050 為例,其余 i.MXRT1xxx 系列原理類似 支持的Serial NAND SerialNAND 對應的芯片型號很
    的頭像 發表于 08-17 08:50 ?710次閱讀
    Serial NAND <b class='flag-5'>i</b>.MX RT<b class='flag-5'>1xxx</b>啟動
    巍山| 赌百家乐容易的原| 百家乐网上真钱娱乐| 德州扑克现金桌视频| 百家乐官网最低压多少| 唐人街百家乐官网的玩法技巧和规则 | 百家乐官网无损打法| 网络百家乐官网会输钱的多吗| 逍遥坊百家乐官网的玩法技巧和规则| 百家乐看不到视频| 大发888官方指定| 足球系统出租| 澳门百家乐官网国际娱乐城| 百家乐官网网上真钱娱乐平台| 免邮百家乐官网布桌| 大发888玩法| 百家乐官网桌德州扑克桌| 网上百家乐洗码技巧| 星空棋牌下载| 游戏机百家乐官网庄闲| 玩百家乐犯法| 大发888下载客户端| 全椒县| 迷你百家乐官网的玩法技巧和规则 | 粤港澳百家乐娱乐平台| 拉斯维加斯娱乐| 百家乐官网玩法百科| 百家乐官网园36bol在线| 娱百家乐下载| 百家乐园选百利宫| 南阳市| 百家乐赌钱| 微山县| 百家乐开庄几率| 百家乐官网赌牌技巧| 亚洲百家乐论坛| 百家乐官网最低下注| 做生意怎样看风水| 红利来| 网页百家乐官网的玩法技巧和规则| 百家乐赌场赌场平台|