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

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

3天內不再提示

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

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2023-04-20 15:54 ? 次閱讀

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

注:文中貼圖、代碼主要以i.MX RT1170為例,其余i.MX RT1xxx系列原理類似。

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

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

翻看芯片參考手冊Device Configuration Data(DCD)章節(jié),你會發(fā)現(xiàn)DCD數(shù)據(jù)設計特別簡單,它總共支持三類命令:Writedata(Tag是0xCC)、Checkdata(Tag是0xCF)、NOP(Tag是0xC0),這三類命令就是為了讀寫芯片外設寄存器而設計的,我們需要做的,就是組合這三類命令,完成指定外設模塊寄存器的設置序列。

任意打開一個RT1170 SDK示例工程,都會包含dcd.c/h文件(僅當工程選項預編譯宏里有XIP_BOOT_HEADER_DCD_ENABLE=1才會被使能)。

12548202-df50-11ed-bfe3-dac502259ad0.png

隨便摘其中兩句分析下,第一句表明是Writedata命令的*address=val_msk動作合集,第二句是執(zhí)行*((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內容繼續(xù)聊,這其實是配置芯片SEMC外設,去初始化外部SDRAM的全部序列。

有了這個DCD設置,那么App里就可以不用管外部SDRAM初始化工作了,直接讀寫訪問SDRAM完成相應應用業(yè)務功能即可,這也是DCD的典型應用場景。如果應用代碼直接是全部在SDRAM執(zhí)行,在不設計用戶二級Bootloader做加載的情況下,DCD是必選的解決方案。

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

現(xiàn)在回到客戶的實際案例,客戶RT1170板卡上用了一顆來自MXIC的OctalFlash,代碼是執(zhí)行在Flash上,現(xiàn)在我們需要測試不同F(xiàn)lexSPI1->DLLACR[SLVDLYTARGET]設置下的工作情況,而我們手頭僅有客戶可執(zhí)行文件。 將客戶可執(zhí)行文件下載進板卡,并設置啟動模式為從Flash啟動(2'b10),然后掛上JLINK調試器讀取FlexSPI1->DLLACR寄存器值(該寄存器地址是0x400cc0c0),得到0x00400079,其中SLVDLYTARGET是默認的理想值4'b1111,這個值是BootROM自動配置的,我們無法通過FDCB啟動頭來更改設置。

127e0fc8-df50-11ed-bfe3-dac502259ad0.png

為了做壓力測試,我們需要更改不同的FlexSPI1->DLLACR[SLVDLYTARGET]值,比如將其設為4'b1000,這時候可以借助DCD來實現(xiàn),我們直接使用MCUBootUtility工具(需要使用v4.1.1版本及以上)來使能DCD。 下載地址:https://github.com/JayHeng/NXP-MCUBootUtility/archive/refs/tags/v4.1.1.zip 將客戶板卡啟動模式改為SerialDownload(2'b01),插上UART/USB下載線,打開MCUBootUtility工具,在DCD設置界面里啟用"UseDCDdescription"選項,并在動作框里直接輸入下面語句(這里直接是類C語法,會被工具自動轉成DCD數(shù)據(jù)),然后連接、下載。 *(uint32_t*)0x400cc0c0=0x00400041;

12968832-df50-11ed-bfe3-dac502259ad0.png

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

12a9bad8-df50-11ed-bfe3-dac502259ad0.png

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

看起來DCD特別強大,那么它能幫助操作Arm 4GB系統(tǒng)空間里的全部地址嗎?答案是否定的,出于安全考慮,BootROM里做了地址限制,我們僅能用DCD操作如下指定的一些外設(不同i.MX RT系列有所不同): 12bdb2b8-df50-11ed-bfe3-dac502259ad0.png
也就是說,寄存器地址落在這個區(qū)間的外設,可以通過DCD配置,其它的則不可以。

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

    關注

    31

    文章

    5343

    瀏覽量

    120377
  • ROM
    ROM
    +關注

    關注

    4

    文章

    572

    瀏覽量

    85773
  • 調試器
    +關注

    關注

    1

    文章

    305

    瀏覽量

    23741
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1036

    瀏覽量

    45951
  • DCD
    DCD
    +關注

    關注

    0

    文章

    8

    瀏覽量

    2407

原文標題:利用i.MX RT1xxx系列ROM集成的DCD功能可輕松配置指定外設

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    i.MX RT1xxx 系列的時鐘系統(tǒng)以及相關功能引腳

    目前 i.MXRT1xxx 系列主要分為 i.MX RT10xx 和 i.MXRT11xx 兩大分支。這兩個分支的時鐘系統(tǒng)設計是有一些差異的
    發(fā)表于 07-08 17:01 ?786次閱讀

    i.MX RT10xx系列外部晶振相關引腳的作用

    之前寫過一篇關于時鐘引腳的文章 《i.MX RT1xxx系列MCU時鐘相關功能引腳的作用》,里面簡單提及了外部晶振相關引腳的作用,但是并沒有詳細展開。
    的頭像 發(fā)表于 10-13 09:08 ?1477次閱讀

    介紹的是i.MX RT1xxx系列MCU的Parallel NOR啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR啟動?! ∩弦黄vi.MXRT1xxx從Raw NA
    發(fā)表于 02-22 06:31

    介紹i.MX RT1xxx系列MCU的Raw NAND啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Raw NAND啟動。  前面鋪墊了七篇啟動系列文章,終于該講具體Boot
    發(fā)表于 02-22 07:20

    02:i.MX RT系列產品的介紹與演示

    i.MX RT產品是今年市場上最受歡迎的跨界MCU產品。本講座將對i.MX RT系列做一個簡要的介紹,包括主要特性和主要
    的頭像 發(fā)表于 01-21 07:04 ?2311次閱讀
    02:<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b><b class='flag-5'>系列</b>產品的介紹與演示

    恩智浦i.MX RT1170在將該系列帶上了更高的層面

    的運算能力和多媒體功能與易用性和實時處理相結合。i.MX RT1170雙核MCU集成主頻高達1 GHz的Arm Cortex -M7內核和4
    的頭像 發(fā)表于 05-18 11:15 ?3782次閱讀

    i.MX RT開發(fā)筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)

    系列文章目錄i.MX RT開發(fā)筆記-01 | 初識 i.MX RT1062 跨界MCUi.MX
    發(fā)表于 12-01 13:51 ?2次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發(fā)筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(4)- Flashloader初體驗(blhost)...

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Flashloader。  在上一篇文章 Serial Downloader模式
    發(fā)表于 12-02 09:36 ?7次下載
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b><b class='flag-5'>系列</b>MCU啟動那些事(4)- Flashloader初體驗(blhost)...

    RT-Thread & NXP 發(fā)布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界處理器系列。該系列下又包括 i.MX RT1020、
    發(fā)表于 12-07 13:06 ?2次下載
    <b class='flag-5'>RT</b>-Thread & NXP 發(fā)布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> <b class='flag-5'>系列</b> BSP 新框架

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(9)- 從Parallel NOR啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR啟動?! ∩弦黄vi.MXRT1xxx從Raw NA
    發(fā)表于 12-28 19:19 ?8次下載
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b><b class='flag-5'>系列</b>MCU啟動那些事(9)- 從Parallel NOR啟動

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(8)- 從Raw NAND啟動

      大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Raw NAND啟動?! ∏懊驿亯|了七篇啟動系列文章,終于該講具體Boot
    發(fā)表于 12-28 19:19 ?10次下載
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b><b class='flag-5'>系列</b>MCU啟動那些事(8)- 從Raw NAND啟動

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

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是利用i.MXRT1xxx系列ROM集成
    的頭像 發(fā)表于 04-21 09:40 ?770次閱讀

    i.MX RT的FlexRAM配置問題

    i.MX RT的FlexRAM配置問題
    的頭像 發(fā)表于 10-24 15:46 ?814次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM<b class='flag-5'>配置</b>問題

    理解i.MX RT中FlexSPI外設lookupTable里配置訪問行列混合尋址Memory的參數(shù)值

    理解i.MX RT中FlexSPI外設lookupTable里配置訪問行列混合尋址Memory的參數(shù)值
    的頭像 發(fā)表于 10-30 17:23 ?506次閱讀
    理解<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中FlexSPI<b class='flag-5'>外設</b>lookupTable里<b class='flag-5'>配置</b>訪問行列混合尋址Memory的參數(shù)值

    XMCD – i.MX RT11xx系列簡單易用的特定外設配置功能

    i.MX RT1160/ RT1170 B0以及后續(xù)的RT1180開始,BootROM引入了XMCD新功能,其用途與傳統(tǒng)
    的頭像 發(fā)表于 10-26 09:25 ?1918次閱讀
    XMCD – <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>11xx<b class='flag-5'>系列</b>簡單易用的特定<b class='flag-5'>外設</b><b class='flag-5'>配置</b><b class='flag-5'>功能</b>