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 RT1050上如何實(shí)現(xiàn)雙大容量存儲(chǔ)(MSC)設(shè)備

jf_pJlTbmA9 ? 來(lái)源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2023-10-30 17:08 ? 次閱讀

客戶需求

昨天FAE同事報(bào)了一個(gè)客戶需求過(guò)來(lái),需要雙大容量存儲(chǔ)設(shè)備(MSC device),一個(gè)安裝在SD卡上,另一個(gè)安裝到SDRAM上面。

初步分析

趕緊用MCUXpresso的peripheral tool去試了一下,結(jié)果發(fā)現(xiàn)這個(gè)工具不支持MSC mount on SD card,只支持MSC mount on RAM, 這樣就只能手動(dòng)去做了。

先看看MSC的描述符結(jié)構(gòu),非常簡(jiǎn)單直觀,妥妥的鋼鐵直男。一個(gè)interface,兩個(gè)endpoint,結(jié)束。

wKgaomUD39uAR6O6AAB40WgIfAg916.png

所以,雙MSC的配置描述符就是:

wKgaomUD392AShKAAACx1tvrr60947.png

然后,結(jié)合客戶需求,最簡(jiǎn)單的方法就是在MSC mount on SD card上面加一個(gè)MSC mount on RAM。SDRAM和RAM對(duì)MSC的實(shí)現(xiàn)基本沒(méi)有區(qū)別,只是一個(gè)buffer塊地址不同而已。

操作步驟

接下來(lái)我們做兩件事:

1、用peripheral tool導(dǎo)入一個(gè)dual MSC的工程,這個(gè)工具導(dǎo)出的代碼結(jié)構(gòu)非常清晰,可以幫助我們了解如何做復(fù)合設(shè)備類。

2、導(dǎo)入SDK自帶的MSC mount on SD card+ CDC的工程:

evkbimxrt1050_dev_composite_cdc_msc_disk_freertos

然后要做的事情就是把MSC mount on RAM的代碼集成到MSC mount on SD card+ CDC的工程的工程里面去,同時(shí)去掉里面的CDC。

需要的步驟我能想到的就是:

1、去掉MSC mount on SD card+ CDC工程里面的CDC。

2、集成MSC mount on RAM的代碼。

3、集成描述符。

4、集成數(shù)據(jù)結(jié)構(gòu)。

好了,下面一步一步做來(lái)試試。

做之前,先把原始代碼做個(gè)備份,然后通過(guò)Beyond Compare可以看到相關(guān)的改動(dòng),這個(gè)非常重要。

代碼改動(dòng)

代碼變動(dòng)如下,更多細(xì)節(jié)請(qǐng)參考附件代碼:

刪除virtual_com.c, virtual_com.h

增加 usb_device_interface_0_msc_ram_disk.c

更改usb_device_descriptor.h

增加MSC(RAM)的相關(guān)宏定義。

更改USB_INTERFACE_COUNT為2,之前是3個(gè)接口,現(xiàn)在是兩個(gè)。

更改USB_MSC_DISK_INTERFACE_INDEX為1,之前為2。MSC(RAM)的index為0。

更改USB_MSC_DISK_BULK_IN_ENDPOINT為2,之前為1。MSC(RAM)使用端點(diǎn)1 IN,端點(diǎn)1 OUT。MSC(SD CARD) 使用端點(diǎn)2 IN,端點(diǎn)2 OUT。

刪掉CDC的相關(guān)定義

更改usb_device_descriptor.c

添加MSC(RAM)的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)有點(diǎn)復(fù)雜。不過(guò)我們只需要知道他們用于維護(hù)相關(guān)的接口和端點(diǎn)就可以了:
A. g_UsbDeviceInterface0MscRamDiskConfig
B. g_UsbDeviceInterface0MscRamDiskInterfaceList
C. g_UsbDeviceInterface0MscRamDiskInterfaces
D.g_UsbDeviceInterface0MscRamDiskInterface
E.g_UsbDeviceInterface0MscRamDiskSetting0DefaultEndpoints

去掉CDC接口/端點(diǎn)描述符。

增加MSC(RAM)接口/端點(diǎn)描述符。

更新USB_DeviceSetSpeed()的相關(guān)內(nèi)容。

usb_device_config.h

更改USB_DEVICE_CONFIG_CDC_ACM為0。

更改USB_DEVICE_CONFIG_MSC為2。

檢查USB_DEVICE_CONFIG_ENDPOINTS是否滿足需求,默認(rèn)為5。

composite.h

去掉 #include "virtual_com.h"。

更改usb_device_composite_struct_t數(shù)據(jù)類型:
A. 去掉usb_cdc_vcom_struct_t cdcVcom
B. 增加class_handle_t interface0MscRamDiskHandle; 。

composite.c

更改g_CompositeClassConfig,去掉CDC,加入MSC(RAM) 。

增加USB_UpdateInterfaceSetting()函數(shù)。

修改USB_DeviceCallback(),對(duì)以下事件加入對(duì)MSC(RAM)的處理,去掉對(duì)CDC的處理:
A. kUSB_DeviceEventBusReset
B. kUSB_DeviceEventSetConfiguration
C.kUSB_DeviceEventSetInterface

修改USB_DeviceApplicationInit()加入對(duì)MSC(RAM)的處理,去掉對(duì)CDC的處理。

更改APPTask(),去掉對(duì)CDC的處理。

最后,要把MSC(RAM)的分區(qū)放到SDRAM上面,只需要更改usb_device_interface_0_msc_ram_disk.c里面的storageDisk指針指向SDRAM空間即可。默認(rèn)的MCUXpresso的USB示例工程沒(méi)有使能SDRAM RAM。使能SDRAM需要更改一下配置:

wKgZomUD396AIqtMAAL9Upadexs365.png

完成上述改動(dòng)后,編譯代碼,再下載到目標(biāo)板運(yùn)行,可以看到:

wKgZomUD3-CATfMQAACfHdAVT90907.png

這樣我們就得到了兩個(gè)MSC,一個(gè)mount on SDRAM,一個(gè)mount on SD卡。

代碼鏈接

https://gitee.com/nxa16038/dual_msc.git

附錄:使用Peripheral tool導(dǎo)入

基于MCUXpresso IDE 環(huán)境,我們可以很輕易的生成雙MSC mount on RAM的代碼,步驟如下(以下步驟是在MCUXPresso 11.6版本上操作的)。

1. 導(dǎo)入SDK后,選擇new project

wKgaomUD3-eAUR8HAAFi9giTIns967.png

2. 點(diǎn)擊“Next”:

wKgaomUD3-mAePRgAAI9GL9ssXQ535.png

3. 轉(zhuǎn)到middleware頁(yè)面,選擇USB Device MSD。

wKgZomUD3-yAXnLPAAI9-W2K-dM457.png

4. 然后點(diǎn)finish就好了。

5. 然后點(diǎn)擊下圖所示的按鈕打開MCUXpresso內(nèi)置的peripheral tool界面

wKgaomUD3-6AT-eYAAAj9tWm1-8741.png

6. 如果有多個(gè)工程,打開后什么都看不到需要選擇對(duì)應(yīng)的工程,這里我們選擇剛建立的工程MIMXRT1052_Project。

wKgZomUD3--AQ2ngAAGHje4iKIk951.png

7. 然后點(diǎn)擊Middleware右方的+號(hào)。

wKgaomUD3_CANH6vAAETGkXeQXE416.png

8. 最后選USB,點(diǎn)擊OK。

wKgaomUD3_KAXq_TAAI7nmb_yGA471.png

9. 然后Preset里面,選擇MSC RAM disk。

wKgZomUD3_SAXoHPAAIo3nGfIJI601.png

10. 然后會(huì)看到一個(gè)錯(cuò)誤提示:

wKgaomUD3_WAb4lLAAD0CC6uB0M483.png
wKgZomUD3_aAMaWdAABdVLnLhA8672.png

11. 在錯(cuò)誤信息上點(diǎn)右鍵,選擇時(shí)鐘使能。

wKgaomUD3_mATBAKAADPwO_pVWo036.png

12. 由于默認(rèn)只有一個(gè)MSC,我們需要再增加一個(gè),點(diǎn)下圖的+號(hào)

wKgZomUD3_uATs76AACfBaFuR_0029.png

13. 默認(rèn)添加的是DFU,我們需要切換到MSC

wKgaomUD3_2AS2spAAEOOwyJfs0118.png

14. 這樣兩個(gè)MSC就做好了。

wKgZomUD3_6AWa2CAADoyDhpF_M042.png

15. 然后更新代碼

wKgZomUD3_-AQUv3AAAqXyOEIlA891.jpg

16. 點(diǎn)擊OK

wKgaomUD4ACAQGnvAAHM_iTKxmQ731.png

17. 然后IDE回到開發(fā)模式我們可以看到code已經(jīng)生成好了。

wKgZomUD4AKABJVqAAGAc2KpML8519.png

18. 然后build and run,就可以直接運(yùn)行,得到兩個(gè)MSC on RAM。

wKgaomUD4ASALHUeAACiCOlwazU106.png

來(lái)源:恩智浦MCU加油站

審核編輯:湯梓紅


聲明:本文內(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)投訴
  • SDRAM
    +關(guān)注

    關(guān)注

    7

    文章

    423

    瀏覽量

    55227
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4314

    瀏覽量

    85851
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    565

    瀏覽量

    63905
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入淺出Cortex-M7——i.MX RT1050

    深入淺出Cortex-M7——i.MX RT1050
    發(fā)表于 03-06 08:39

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】語(yǔ)音識(shí)別評(píng)測(cè)

    最后得到通知因?yàn)橐咔檫@個(gè)比賽取消了。恰好現(xiàn)在借著這個(gè)活動(dòng)申請(qǐng)NXP i.MX RT1050這個(gè)板子來(lái)試用評(píng)估。自己曾經(jīng)B站上分享過(guò)的語(yǔ)音識(shí)小Demo鏈接基于stm32f769i-di
    發(fā)表于 08-10 17:59

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】基于 NXP i.MX RT1050工業(yè)機(jī)器人開發(fā)

    項(xiàng)目名稱:基于 NXP i.MX RT1050工業(yè)機(jī)器人開發(fā)試用計(jì)劃:1,熟悉板子硬件,RT1050驅(qū)動(dòng)板子硬件,做GPIO測(cè)試,串口測(cè)試,SPI測(cè)試,IIC測(cè)試,PWM測(cè)試,每種出一片報(bào)告。2
    發(fā)表于 08-10 18:23

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】i.MX RT1050 3D打印機(jī)控制器

    項(xiàng)目名稱:i.MX RT1050 3D打印機(jī)控制器試用計(jì)劃:申請(qǐng)理由本人在開源硬件行業(yè)有五年多的學(xué)習(xí)和開發(fā)經(jīng)驗(yàn),曾設(shè)計(jì)多款FDM,SLA,LCD 3D打印機(jī)控制板,參與公司3D打印機(jī)的開發(fā),對(duì)打
    發(fā)表于 08-10 18:23

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】使用NXP i.MX RT1050開發(fā)板設(shè)計(jì)一款低成本CAN數(shù)據(jù)采集儀

    項(xiàng)目名稱:使用NXP i.MX RT1050開發(fā)板設(shè)計(jì)一款低成本CAN數(shù)據(jù)采集儀試用計(jì)劃:目前的CAN數(shù)據(jù)采集儀通常使用的是CAN采集儀+上位機(jī)的方法,這種方案非常不便捷,需要帶電腦到現(xiàn)場(chǎng)去作業(yè)
    發(fā)表于 08-10 18:24

    【大聯(lián)大品佳 NXP i.MX RT1050試用體驗(yàn)】芯林至尊,寶刀RT1050,初識(shí)i.MX RT系列跨界處理器 (之一)

    的圖看看RT1050的內(nèi)核架構(gòu)圖i.MX RT1050EVK開發(fā)板下面介紹下軟件圖形化配置工具:MCUXpresso Config Tools百度云鏈接https://pan.baidu.com/s
    發(fā)表于 08-19 11:44

    i.MX RT1050平臺(tái)的相關(guān)資料推薦

    的首款跨界處理器。該處理器具備應(yīng)用處理器的高性能與高度集成的優(yōu)勢(shì),更具有微控制器的易用性和實(shí)時(shí)功能。NXP Semiconductors(恩智浦半導(dǎo)體)公司根據(jù)用戶成本需求, i.MX RT1050 處理器的價(jià)格
    發(fā)表于 11-29 07:19

    i.MX RT1050的功耗和測(cè)量資料分享

    i.MX RT1050的功耗和測(cè)量
    發(fā)表于 12-12 07:23

    i.MX RT1050跨界處理器產(chǎn)品數(shù)據(jù)手冊(cè)

    i.MX RT1050跨界處理器(消費(fèi)級(jí))數(shù)據(jù)手冊(cè)
    發(fā)表于 12-12 07:03

    i.MX RT系列(例如 RT1050/1060)有多少個(gè)PWM通道?

    i.MX RT 系列(例如 RT1050/1060)有多少個(gè) PWM 通道? 我可以像在 KV58 MCU(兩個(gè) flexPWM 模塊)做同樣的事情嗎?
    發(fā)表于 05-18 07:07

    【044】SylixOS 正式支持 i.MX RT1050平臺(tái)

    的首款跨界處理器。該處理器具備應(yīng)用處理器的高性能與高度集成的優(yōu)勢(shì),更具有微控制器的易用性和實(shí)時(shí)功能。NXP Semiconductors(恩智浦半導(dǎo)體)公司根據(jù)用戶成本需求, i.MX RT1050 處理器的價(jià)格
    發(fā)表于 11-19 12:51 ?14次下載
    【044】SylixOS 正式支持 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1050</b>平臺(tái)

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

    前言i.MX RT 是 NXP 推出的跨界處理器系列。該系列下又包括 i.MX RT1020、i.MX
    發(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> 系列 BSP 新框架

    移植Arm-2D到i.MX RT1050-EVKB并繪制圖形界面

    眾所周知,i.MX RT系列是MCU中的性能強(qiáng)者,超高的主頻、豐富的外設(shè)以及足夠大的存儲(chǔ)使其能輕松應(yīng)用于各類領(lǐng)域。其中,圖像視頻方面,i.MX
    的頭像 發(fā)表于 06-23 09:33 ?2227次閱讀

    移植Arm-2D到i.MX RT1050-EVKB并繪制圖形界面

    眾所周知,i.MX RT系列是MCU中的性能強(qiáng)者,超高的主頻、豐富的外設(shè)以及足夠大的存儲(chǔ)使其能輕松應(yīng)用于各類領(lǐng)域。其中,圖像視頻方面,i.MX
    的頭像 發(fā)表于 07-12 10:05 ?1892次閱讀

    基于 NXP i.MX RT1050 的 3D 打印機(jī)方案

    MCU-Healer 是基于 NXP i.MX RT1050 做的 3D 打印機(jī)方案,該方案主控 MCU i.MX RT1050是一顆 Cortex-M7 內(nèi)核的高性能 MCU,主頻達(dá)
    的頭像 發(fā)表于 04-06 15:06 ?1213次閱讀
    基于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1050</b> 的 3D 打印機(jī)方案