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

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

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

SDRAM和RAM對MSC的實(shí)現(xiàn)

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2022-08-18 14:42 ? 次閱讀

客戶需求

昨天FAE同事報了一個客戶需求過來,需要雙大容量存儲設(shè)備(MSC device),一個安裝在SD卡上,另一個安裝到SDRAM上面。

初步分析

趕緊用MCUXpresso的peripheral tool去試了一下,結(jié)果發(fā)現(xiàn)這個工具不支持MSC mount on SD card,只支持MSC mount on RAM, 這樣就只能手動去做了。 先看看MSC的描述符結(jié)構(gòu),非常簡單直觀,妥妥的鋼鐵直男。一個interface,兩個endpoint,結(jié)束。

b9a8bc74-1eaa-11ed-ba43-dac502259ad0.png

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

b9b53ef4-1eaa-11ed-ba43-dac502259ad0.png

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

操作步驟

接下來我們做兩件事:

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

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

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

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

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

集成MSC mount on RAM的代碼。

集成描述符。

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

好了,下面一步一步做來試試。 做之前,先把原始代碼做個備份,然后通過Beyond Compare可以看到相關(guān)的改動,這個非常重要。

代碼改動

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

刪除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個接口,現(xiàn)在是兩個。

更改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ù)雜。不過我們只需要知道他們用于維護(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(),對以下事件加入對MSC(RAM)的處理,去掉對CDC的處理:
A. kUSB_DeviceEventBusReset
B. kUSB_DeviceEventSetConfiguration
C.kUSB_DeviceEventSetInterface

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

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

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

b9d02dc2-1eaa-11ed-ba43-dac502259ad0.png

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

b9f7dde0-1eaa-11ed-ba43-dac502259ad0.png

這樣我們就得到了兩個MSC,一個mounton SDRAM,一個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

ba0bdcb4-1eaa-11ed-ba43-dac502259ad0.png 2. 點(diǎn)擊“Next”: ba1d6f9c-1eaa-11ed-ba43-dac502259ad0.png

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

ba49063e-1eaa-11ed-ba43-dac502259ad0.png

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

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

ba620666-1eaa-11ed-ba43-dac502259ad0.png

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

ba70e21c-1eaa-11ed-ba43-dac502259ad0.png

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

ba860e1c-1eaa-11ed-ba43-dac502259ad0.png

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

ba96aeca-1eaa-11ed-ba43-dac502259ad0.png

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

baaa842c-1eaa-11ed-ba43-dac502259ad0.png

10. 然后會看到一個錯誤提示:

bad56f2a-1eaa-11ed-ba43-dac502259ad0.png

baf308aa-1eaa-11ed-ba43-dac502259ad0.png

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

bb0730d2-1eaa-11ed-ba43-dac502259ad0.png

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

bb16879e-1eaa-11ed-ba43-dac502259ad0.png

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

bb31eef8-1eaa-11ed-ba43-dac502259ad0.png

14. 這樣兩個MSC就做好了。

bb478b82-1eaa-11ed-ba43-dac502259ad0.png

15. 然后更新代碼

bb64dc1e-1eaa-11ed-ba43-dac502259ad0.png

16. 點(diǎn)擊OK

bb7f9d9c-1eaa-11ed-ba43-dac502259ad0.png

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

bba9b5b4-1eaa-11ed-ba43-dac502259ad0.png

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

bbcd40f6-1eaa-11ed-ba43-dac502259ad0.png

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

    關(guān)注

    7

    文章

    423

    瀏覽量

    55227
  • msc
    msc
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    20125
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1368

    瀏覽量

    114701
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68616

原文標(biāo)題:在i.MX RT1050上如何實(shí)現(xiàn)雙大容量存儲(MSC)設(shè)備

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

收藏 人收藏

    評論

    相關(guān)推薦

    VHDL工具實(shí)現(xiàn)SDRAM控制器的要點(diǎn)分享

    在高速實(shí)時或者非實(shí)時信號處理系統(tǒng)當(dāng)中,使用大容量存儲器實(shí)現(xiàn)數(shù)據(jù)緩存是一個必不可少的環(huán)節(jié),也是系統(tǒng)實(shí)現(xiàn)中的重點(diǎn)和難點(diǎn)之一。SDRAM(同步動態(tài)隨機(jī)訪問存儲器)具有價格低廉、密度高、數(shù)據(jù)讀寫速度快的優(yōu)點(diǎn)
    的頭像 發(fā)表于 01-18 07:21 ?8252次閱讀
    VHDL工具<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>SDRAM</b>控制器的要點(diǎn)分享

    SDRAM與雙口RAM數(shù)據(jù)轉(zhuǎn)移接口控制電路

    控制;(5)DRAM為16位數(shù)據(jù)總線,RAM為32位數(shù)據(jù)總線,SDRAM進(jìn)行一次突發(fā)操作,RAM進(jìn)行一次讀寫操作,以實(shí)現(xiàn)速度匹配;(6)DRAM和R
    發(fā)表于 06-10 05:00

    ARM里的ramSDRAM有什么區(qū)別?

    本篇文章英尚微電子存儲芯片供應(yīng)商主要詳細(xì)介紹下ARM里的ramSDRAM有什么區(qū)別,首先介紹了ramSDRAM做了詳細(xì)闡述,最后介紹了兩者的區(qū)別。
    發(fā)表于 04-02 06:46

    如何去實(shí)現(xiàn)外部RAM擴(kuò)展接口呢

    使用并行SRAM或者SDRAM實(shí)現(xiàn)ram擴(kuò)展。有些IO口較多的MCU有專用的接口如FSMC來連接SDRAM或并行psram,但會占用過多的管腳資源和PCB面積。面向IoT領(lǐng)域的IPU
    發(fā)表于 11-24 06:50

    RAM與SRAM及其SDRAM都有哪些不同呢

    1、RAM(random access memory):(都屬于易失性存儲器)SRAM:靜態(tài)隨機(jī)存儲器,6個晶體管存儲一位數(shù)據(jù),功耗大,面積大DRAM:動態(tài)隨機(jī)存儲器,一個晶體管和一個電容存儲一位數(shù)
    發(fā)表于 12-17 06:35

    ARM里的ramSDRAM有什么區(qū)別

    的數(shù)據(jù)就會丟失。我們通常購買或升級的內(nèi)存條就是用作電腦的內(nèi)存,內(nèi)存條(SIMM)就是將ram集成塊集中在一起的一小塊電路板,它插在計(jì)算機(jī)中的內(nèi)存插槽上,以減少ram集成塊占用的空間。SDRAM介紹
    發(fā)表于 10-25 15:08

    如何提高evkmimxrt1170_dev_msc_disk_bm_cm7示例的傳輸速度?

    到內(nèi)部 RAM 或外部 SDRAM 的程序,因此我們可以檢查閃存 XIP 與 SDRAM/內(nèi)部 RAM 的性能。我們已經(jīng)找到了很多帖子,但無法設(shè)法使示例引導(dǎo)形式閃存,然后從
    發(fā)表于 06-08 09:07

    使用Verilog實(shí)現(xiàn)基于FPGA的SDRAM控制器

    摘 要:介紹了SDRAM的特點(diǎn)和工作原理,提出了一種基于FPGA的SDRAM控制器的設(shè)計(jì)方法,使用該方法實(shí)現(xiàn)的控制器可非常方便地對SDRAM進(jìn)行控制。 關(guān)鍵
    發(fā)表于 06-20 13:04 ?2191次閱讀

    SDRAM接口的VHDL設(shè)計(jì)方案

    SDRAM 以其高速和大容量的優(yōu)點(diǎn)獲得了極大的應(yīng)用,但是其接口與目前廣泛應(yīng)用的微處理器系統(tǒng)不兼容,介紹了用 VHDL 語言實(shí)現(xiàn)SDRAMRAM之間的接口控制電路,從而將
    發(fā)表于 06-01 15:29 ?57次下載
    <b class='flag-5'>SDRAM</b>接口的VHDL設(shè)計(jì)方案

    Turbo碼譯碼在MSC8101上的實(shí)現(xiàn)探討

    介紹了摩托羅拉公司新一代定點(diǎn)數(shù)字信號處理芯片MSC8101的特點(diǎn),以及Turbo碼譯碼在MSC8101上的實(shí)現(xiàn)技術(shù)。
    發(fā)表于 09-13 18:04 ?20次下載
    Turbo碼譯碼在<b class='flag-5'>MSC</b>8101上的<b class='flag-5'>實(shí)現(xiàn)</b>探討

    SDRAM與SRAM的區(qū)別

    SRAM是靠雙穩(wěn)態(tài)觸發(fā)器來記憶信息的;SDRAM是靠MOS電路中的柵極電容來記憶信息的。由于電容上的電荷會泄漏,需要定時給與補(bǔ)充,所以動態(tài)RAM需要設(shè)置刷新電路。但動態(tài)RAM比靜態(tài)RAM
    發(fā)表于 11-03 18:26 ?5568次閱讀

    一文看懂ARM里的RAMSDRAM有什么區(qū)別

    本文主要介紹的是ARM里的RAMSDRAM有什么區(qū)別,首先介紹了RAM的類別及特點(diǎn),其次對SDRAM做了詳細(xì)闡述,最后介紹了RAM
    發(fā)表于 04-27 16:20 ?3.4w次閱讀

    采用VHDL語言實(shí)現(xiàn)SDRAM與雙口RAM的數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)

    來設(shè)置RAM起始地址、SDRAM起始地址、傳送數(shù)據(jù)長度、傳送數(shù)據(jù)方向之后,SDRAMRAM之間數(shù)據(jù)傳送就完全可以通過硬件實(shí)現(xiàn),不必占用微處
    的頭像 發(fā)表于 06-01 07:08 ?3075次閱讀
    采用VHDL語言<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>SDRAM</b>與雙口<b class='flag-5'>RAM</b>的數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)

    ARM里的ramSDRAM之間的區(qū)別是什么

    本篇文章英尚微電子存儲芯片供應(yīng)商主要詳細(xì)介紹下ARM里的ramSDRAM有什么區(qū)別,首先介紹了ramSDRAM做了詳細(xì)闡述,最后介紹了兩者的區(qū)別。
    發(fā)表于 02-25 15:01 ?1406次閱讀

    SDRAM工作原理 SDRAM布局布線說明

    SDRAM全稱Synchronous Dynamic RAM,同步動態(tài)隨機(jī)存儲器。首先,它是RAM,即隨機(jī)存儲器的一種。
    發(fā)表于 08-08 15:10 ?2281次閱讀
    <b class='flag-5'>SDRAM</b>工作原理 <b class='flag-5'>SDRAM</b>布局布線說明