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

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

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

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

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

關(guān)于i.MX RT1xxx系列芯片BootROM中集成的DCD功能這個(gè)話題,早就想寫了,但是一直沒(méi)有動(dòng)筆,畢竟這個(gè)話題比較生澀,單獨(dú)講會(huì)比較枯燥。最近在支持一個(gè)i.MX RT1170客戶,需要在客戶板卡上跑其應(yīng)用代碼的壓力測(cè)試,但是客戶因?yàn)楸C艿木壒蕛H提供了應(yīng)用可執(zhí)行文件,而我們又需要在客戶應(yīng)用里額外加一些配置代碼做測(cè)試,測(cè)試過(guò)程中會(huì)涉及多次斷電上電,如果掛外部調(diào)試器去做額外配置又太繁瑣,這時(shí)候DCD功能就派上用場(chǎng)了。

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

一、DCD是什么及其應(yīng)用場(chǎng)景

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

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

任意打開(kāi)一個(gè)RT1170 SDK示例工程,都會(huì)包含dcd.c/h文件(僅當(dāng)工程選項(xiàng)預(yù)編譯宏里有XIP_BOOT_HEADER_DCD_ENABLE=1才會(huì)被使能)。

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

隨便摘其中兩句分析下,第一句表明是Writedata命令的*address=val_msk動(dòng)作合集,第二句是執(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,

接著這個(gè)示例dcd.c內(nèi)容繼續(xù)聊,這其實(shí)是配置芯片SEMC外設(shè),去初始化外部SDRAM的全部序列。

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

二、以實(shí)際客戶案例代入DCD使用

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

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

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

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

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

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

三、DCD能配置全部外設(shè)嗎?

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

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

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119820
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    562

    瀏覽量

    85623
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    300

    瀏覽量

    23668
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1020

    瀏覽量

    45697
  • DCD
    DCD
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2395

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

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    i.MX RT10xx系列外部晶振相關(guān)引腳的作用

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

    介紹的是i.MX RT1xxx系列MCU的Parallel NOR啟動(dòng)

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR啟動(dòng)。  上一篇講i.MXRT1xxx從Raw NA
    發(fā)表于 02-22 06:31

    介紹i.MX RT1xxx系列MCU的Raw NAND啟動(dòng)

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

    02:i.MX RT系列產(chǎn)品的介紹與演示

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

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

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

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

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

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

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦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啟動(dòng)那些事(4)- Flashloader初體驗(yàn)(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啟動(dòng)那些事(9)- 從Parallel NOR啟動(dòng)

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR啟動(dòng)?! ∩弦黄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啟動(dòng)那些事(9)- 從Parallel NOR啟動(dòng)

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

      大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列MCU的Raw NAND啟動(dòng)?! ∏懊驿亯|了七篇啟動(dòng)系列文章,終于該講具體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啟動(dòng)那些事(8)- 從Raw NAND啟動(dòng)

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

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

    i.MX RT的FlexRAM配置問(wèn)題

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

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

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

    XMCD – i.MX RT11xx系列簡(jiǎn)單易用的特定外設(shè)配置功能

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