最近在恩智浦官方社區(qū)上支持了一個(gè)關(guān)于i.MX RT從SD卡啟動(dòng)的案例,這讓我想起了一年前寫過(guò)的一篇《i.MX RT600從SD/eMMC啟動(dòng)》,那一篇重點(diǎn)介紹了基于eMMC設(shè)備制作程序、下載程序、啟動(dòng)程序的方法。雖然SD和eMMC在啟動(dòng)流程上差別不大,但是細(xì)節(jié)上還是有一些不同的。借此機(jī)會(huì),今天再認(rèn)真捋一下SD卡上制作、下載、啟動(dòng)程序的方法:
注:文中貼圖、代碼主要以i.MX RT1050為例,其余i.MX RT1xxx系列原理類似。
一、支持的SD/eMMC
i.MX RTxxxx(四位數(shù))和i.MX RTxxx(三位數(shù))用于訪問(wèn)SD/MMC卡的外設(shè)是同一個(gè),即uSDHC,外設(shè)本身能支持到SD3.0。但是芯片BootROM里并不一定完全按uSDHC全功能來(lái)做實(shí)現(xiàn),i.MX RT1050 BootROM主要實(shí)現(xiàn)了以下類型的SD卡啟動(dòng)支持:
SD v2.0 or less
eSD v2.10 rev-0.9, with or without FAST_BOOT
SDXC v3.0
作為對(duì)比,i.MX RT600 BootROM對(duì)于SD卡啟動(dòng)支持與i.MX RT1050則稍有不同:
SD Version 3.0 or earlier version
SD: 1-bit/4-bit; SDR12, SDR25, SDR50 and SDR104.
全系列MIMXRT10xx-EVK上均配置了MicroSD卡槽,均連接在了第一個(gè)uSDHC端口上,所以我們測(cè)試SD啟動(dòng)還是非常方便的。
二、SD/eMMC硬件連接
除了i.MXRT1010/1015不包含uSDHC外設(shè)之外,其余i.MXRT1xxx內(nèi)部都有2個(gè)uSDHC模塊(注:uSDHC2可能在一些小封裝上沒(méi)有引出),i.MX RT1050 BootROM支持如下pinmux連接,支持從SD/eMMC卡去啟動(dòng):
下圖是IMXRT1050-EVKB_Rev.A板上SD卡槽連接設(shè)計(jì)圖,這個(gè)卡槽除了用來(lái)測(cè)試SD卡讀寫啟動(dòng)之外,也可以通過(guò)連接MicroSD轉(zhuǎn)eMMC適配器去測(cè)試啟動(dòng)eMMC(需工作在1/4bit bus width mode):
?
三、SD/eMMC加載啟動(dòng)過(guò)程
我們知道SD/eMMC設(shè)備中僅能放置Non-XIP Application(鏈接到內(nèi)部SRAM或者外部RAM空間),其啟動(dòng)加載流程跟《從Serial(1-bit SPI)NOR/EEPROM恢復(fù)啟動(dòng)》加載流程差不多(參考文章第3小節(jié))。
對(duì)于SD卡設(shè)備,起始偏移一般要存放在系統(tǒng)main boot record(MBR)中,因此需要預(yù)留,BootROM會(huì)從固定偏移0x400地址處讀取IVT啟動(dòng)頭,有了IVT后面就能找到Application去加載啟動(dòng)了(在這里RTxxxx四位數(shù)和RTxxx三位數(shù)是不一樣的)。
?
四、下載Application進(jìn)SD/eMMC
現(xiàn)在假定你已經(jīng)制作好一個(gè)Bootable image并且使用blhost工具與Flashloader建立了基本通信,正要開(kāi)始將Bootable image下載進(jìn)SD設(shè)備。此時(shí)我們只需要提供簡(jiǎn)化的4byte配置數(shù)據(jù)就可以完成SD設(shè)備的配置,下面是一種Application下載更新示例:
// 在 SRAM 里臨時(shí)存儲(chǔ) SD 配置數(shù)據(jù) blhost -u -- fill-memory 0x20202000 0x4 0xD0000001 // 1bit, Normal Speed,uSDHC1 // 使用 SD 配置數(shù)據(jù)去配置 uSDHC 接口 blhost -u -- configure-memory 0x120 0x20202000
上述fill-memory命令中0xD0000001參數(shù)即是簡(jiǎn)化的4byte配置數(shù)據(jù),這個(gè)配置數(shù)據(jù)組織詳見(jiàn)下表:
上表4byte數(shù)據(jù)提供的配置信息主要是SD連接以及屬性配置。configure-memory命令執(zhí)行成功之后,隨后只需要將Bootable image從SD偏移0x400地址處開(kāi)始下載即可,具體步驟如下:
// 擦除 SD 并將 image 下載進(jìn) SD blhost -u -- flash-erase-region 0x400 0x20000 0x120 blhost -u -- write-memory 0x400 bt_image.bin 0x12
當(dāng)然以上所有繁雜的命令行操作都可以使用MCUBootUtility工具(v3.5及以上)來(lái)一鍵完成:
?
五、進(jìn)入SD/eMMC啟動(dòng)模式
Application被成功下載進(jìn)SD卡之后,此時(shí)我們便可以開(kāi)始設(shè)置芯片從SD啟動(dòng)。
先確定BOOT_MODE[1:0]=2'b10,即芯片處于Internal Boot模式,再來(lái)選擇Boot Device,Boot Device由BOOT_CFG1[7:4]這四個(gè)pin的輸入狀態(tài)決定,其中SD啟動(dòng)模式為4'b01xx。
六、配置eFuse啟動(dòng)SD/eMMC
設(shè)置好芯片啟動(dòng)模式是從SD啟動(dòng)之后,我們還需要最后關(guān)注一下與SD/eMMC相關(guān)的具體特性配置,主要集中在芯片內(nèi)部eFuse 0x470-0x450區(qū)域里,默認(rèn)全0值適用3.3V SD卡工作在1bit Normal Speed模式,有需要的話切換到4bit SDR104更快速度模式也是可以的。
?
七、幾個(gè)注意事項(xiàng)
i.MX RTxxxx(四位數(shù))與i.MX RTxxx(三位數(shù))在uSDHC編號(hào)上不同,RTxxxx(四位數(shù))是uSDHC1-2,而RTxxx(三位數(shù))則是uSDHC0-1,這反映在第四節(jié)option.instance設(shè)置里。
eMMC協(xié)議是向下兼容SD協(xié)議的,因此如果使用一塊MicroSD轉(zhuǎn)eMMC小卡插進(jìn)官方EVK板的SD卡槽做測(cè)試,那么啟動(dòng)模式不管是SD 1/4bit或者eMMC 4bit模式均是能正常啟動(dòng)eMMC程序的。
在MIMXRT1170-EVKB Rev.B板卡上,需要設(shè)置成4bit模式(BOOT_CFG2[1]=1)才能正常啟動(dòng)SD卡里程序。
上述所有步驟全部完成,復(fù)位芯片之后,你就應(yīng)該能看到放在SD里的Application已經(jīng)正常地啟動(dòng)了。
審核編輯:湯梓紅
-
恩智浦
+關(guān)注
關(guān)注
14文章
5884瀏覽量
108465 -
SD卡
+關(guān)注
關(guān)注
2文章
566瀏覽量
64138 -
程序
+關(guān)注
關(guān)注
117文章
3797瀏覽量
81452 -
emmc
+關(guān)注
關(guān)注
7文章
219瀏覽量
52933 -
microSD卡
+關(guān)注
關(guān)注
0文章
23瀏覽量
9602
原文標(biāo)題:i.MX RT1xxx 從SD/eMMC啟動(dòng)
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論