This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/PROCESSOR-SDK-AM335X:通过 USB 访问 SD 卡

Guru**** 2581905 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/622577/rtos-processor-sdk-am335x-usb-access-to-sd-card

器件型号:PROCESSOR-SDK-AM335X
主题中讨论的其他器件:AM3352

工具/软件:TI-RTOS

各位专家:

我们正在开发 一款产品(使用 AM3352)、该产品需要实现一项关键功能、该功能可用作 USB MSC dev、从而允许 PC 访问 MMCSD 存储的视频文件。

 

到目前为止,我们可以成功地测试“usb_dev_msc_evmAM335x_arm_project”示例项目(在 skAm335xEVM 上,pdk_am335x_1_0_6上)。

但该示例项目是以虚拟磁盘的形式访问内部 RAM。

 

我们尝试修改此示例项目以启用 USB MSC 开发模式、并将 RAM 磁盘访问更改为 MMCSD。

经过几个月的尝试和 TI E2E 搜索、我们仍然遇到"CortxA8:未处理的 ADP_Stopped 异常0x20023"错误。

 

您能帮助我们提供一个示例项目、让 AM335x MMCSD 作为 USB MSC 设备连接到 PC (如指旋驱动器)吗?

谢谢。

廖秀冬

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    当前 USB 设备模式仅使用内部 RAM 作为主机 PC 可以访问的存储器。 AM335x 还具有 MMCSD 驱动程序、允许 AM335x 访问 MMCSD 卡。

    为什么需要使用 PC 通过 USB 接口访问 MMCSD?

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:

    此功能是我们的产品主要规格。

    我们知道 SDK 已经包含两个独立的样片、如您所述。

    但无法成功合并这两个样本。

    请提供 一个示例项目 、让 AM335x MMCSD 作为 USB MSC 设备连接到 PC (如指旋驱动器)?

    BR、

    廖秀冬

    [引用 user="lding ]您好、

    当前 USB 设备模式仅使用内部 RAM 作为主机 PC 可以访问的存储器。 AM335x 还具有 MMCSD 驱动程序、允许 AM335x 访问 MMCSD 卡。

    为什么需要使用 PC 通过 USB 接口访问 MMCSD?

    此致、Eric

    [/报价]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们没有将这两个项目合并。 www.ti.com/.../sprac93.pdf 上有一个如何合并多个 RTOS 示例的示例 、您可以看到我们所采用的方法。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     

    我们之前阅读过"sprac93"文档。

    实际上、我们已经将这两个示例合并到一个应用程序中、并且可以成功运行。

     

    但关键在于如何将 USB 开发访问路径从 RAMdisk 访问更改为 MMCSD。

     

    我们修改了"usbdmsc胶 合.c"并使用 diskio funtion (disk_initialize、disk_read.disk_write)来访问 MMCSD。

     

    经过几个月的尝试和 TI E2E 搜索、我们仍然遇到"CortxA8:未处理的 ADP_Stopped 异常0x20023"错误。

     

     

    如果没有此功能、项目将失败。 我们已经将这个替代产品提交给 TI 本地联系窗口。

    请建议如何解决此问题。

     

    BR、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ETEN、

    "CortxA8:未处理的 ADP_Stopped 异常0x20023"

    如果您可以提供有关项目中发生此错误的位置的详细信息、那会有所帮助? 您能否调试并提供有关导致此问题的代码的更多详细信息?
    您是否有办法在 AM335x GPEVM 上复制此内容?

    "实际上、我们已经将这两个示例合并到一个应用程序中、并且可以成功运行。"
    这种说法意味着什么?

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Lali、

    如下所示列出当前状态、

    PDK 版本:pdk_am335x_1_0_6硬件板:Starterkit skAM3358

    1.将"USB_dev_msc_evmAM335x_arm_project"+"MMCSD_FatfsConsole_evmAM335x_DMA_armExampleProject"合并到一个项目中。
    可以成功运行它。 使用 RAM 磁盘进行 PC USB 访问;UART 访问 MMCSD 内容。
    两个 BIOS 任务。

    2.删除 MMCSD BIOS 任务,只离开 USB BIOS 任务。
    请参阅 e2e.ti.com/.../575591 以修改 usbdmsc胶 合.c

    在 USBDMSCStorageOpen()中添加 disk_initialize(0);
    在 USBDMSCStorageRad()中修改为 disk_read (0、puData、ulSector、ulNumBlocks);
    在 USBDMSCStorageWrite()中修改为 disk_write (0、puData、ulSector、ulNumBlocks);
    在 USBDMSCStorageNumBlocks()中修改为 disk_ioctl (0、get_secte_count、&ulSectorCount);
    并修改相关的 MMCSD 驱动程序以返回针对 disk_ioctl 的正确 SD 卡块。

    当项目运行时、"CortxA8:未处理的 ADP_Stopped 异常0x20023"在 CCS 中出现。


    在 DEV_msc_main.c、USB BIOS 任务中、有一条注释"所有 USB 开发事件都在中断上下文中处理"。
    我们认为 RAMdisk 访问可以在 ISR 域实现、但 MMCSD 读/写操作不能采用相同的方式。

    请建议如何解决此问题。

    BR、
    廖秀冬
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rex

    感谢您提供有关实施的详细信息。  

    您是否还可以尝试根据此处的线程更改 ISR 函数和主函数  、以便主 ISR 工作在 BIOS 任务上下文中完成、而不是从 ISR 中完成。 希望这对您有所帮助


    Thanh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Thanh、

    我们已经阅读了 E2E 帖子、并像提到的帖子那样进行了修改。

    但它不起作用。

    这就是我们在这里出现这个问题的原因。

    由于 USB 驱动程序对我们来说很复杂、

    建议 TI 可以 为我们提供一个示例项目、让 AM335x MMCSD 作为 USB MSC 开发到 PC (如指旋驱动器)以供我们参考?

    谢谢。

    廖秀冬

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们正在研究一个示例。  我们已无一例外地将 USB 通信连接到 MMCSD 卡。 我们很快将提供一个示例。

    感谢您的耐心等待。

    Thanh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Thanh、

    感谢您的更新、并将等待示例

    请帮助您在 SD 卡容量大于32GB 的情况下进行测试。

    非常感谢。

    BR、

    廖秀冬

    [引用用户="Thanh H Tran"]

    我们正在研究一个示例。  我们已无一例外地将 USB 通信连接到 MMCSD 卡。 我们很快将提供一个示例。

    感谢您的耐心等待。

    Thanh

    [/报价]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Rex:

    我们能够在 AM335x GP EVM 上展示 USB 器件 MSC 到 MMCSD 的示例。 我们已在32GB 和64GB SanDisk Micro SD 卡上对此进行了测试。 两张卡均格式化为 FAT32。 这是工程师的一个选择。 我们还没有经历完整的测试周期。 这还不是正式版本。 有关已知问题、请参阅发行说明。

    此示例需要修改 USB 和 MMCSD 模块、这些模块可从以下 git 存储库中检索

    git.ti.com/.../usb (提交编号 be63349f2ad60ce5c9c18dcfe927929e3de13592)

    git.ti.com/.../sd-mmc (提交编号0b130debe6e0b2f2c73df21ecb0f3ee142f0a0a3)

    以下是重新创建我们用于验证此示例的步骤。

    - 安装最新的 PDK 版本

    - 将以下目录替换为最新的 git 存储库内容

    更换 /packages/ti/drv/usb、来源为 git.ti.com/.../usb
    更换 /packages/ti/drv/mmcsd、来源为 git.ti.com/.../sd-mmc
    通过运行 pdksetenv.sh/.bat 来设置构建环境
    /packages > source ./pdksetenv.sh
    为上述组件构建库
    /packages/ti/drv/usb >制造
    /packages/ti/drv/usb >创建 XDC_meta



    /packages/ti/drv/mmcsd >制造
    /packages/ti/drv/mmcsd >创建 XDC_meta



    - 创建/运行示例项目‘USB_DevMsc_mmcsd_evmAM335x_armExampleProject’

    /packages/pdkProjectCreate.sh AM335x evmAM335x 小尺寸 USB 示例 ARM
    在下导入‘USB_DevMsc_mmcsd_evmAM335x_armExampleProject’项目 CCS 中的/packages/My 项目/。
    在插入 SD 卡的 A8内核上构建并运行项目

    - 将 Linux/Windows 计算机连接并安装到 GP EVM 的 USB 端口。 SD 卡的内容可通过安装读取。



    如果您有疑问或问题、请告知我们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Thanh、

    感谢您的支持!!

    我们已经测试了示例代码。
    我们发现了一些问题,需要您的帮助!

    1.从 SD 复制文件的访问速度仅为2MB/s,如何计算访问速率? (SD:SanDisk Extreme PRO microSDHC UHS-I 32GB V30 U3,使用旧读卡器测试的速度为20MB/秒)
    2. Windows 计算机删除 USB 存储的操作不起作用。
    3.当卸下 SD 卡并重新插入 SD 卡时、它无法正常工作。
    4.正式版本将于何时发布?

    谢谢~

    此致、
    等等
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    对于#1、我们将查看瓶颈的速度、稍后让您知道。 但是、您能告诉我您使用什么文件大小来测量读取速度吗? 文件是否连续?

    第二、我们将看看它有什么问题。

    对于#3、我们不打算解决它。  我们提供的示例只是一个简单的示例、并不意味着它是一个可在所有不同场景下工作的强大应用。  客户可以自由修改示例以满足其要求。  该示例具有挂钩、用于检测卡何时被拔出或插入。 这些挂钩可用于采取适当的操作来处理卡的拆卸。

    谢谢

    Thanh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    至于速度性能、我们可以执行以下操作:

    目前、USB-MMCSD 示例提供了从 MMCSD 读取数据的简单方法:MMCSD 针对来自 USB 的每512字节请求读取512字节数据。 由于从 MMCSD 读取512个字节所需的时间与从 MMCSD 读取2KB 块所需的时间一样长、因此这种方法成本非常高。

    为了提高读取性能、我们可以这样做:每次从 MMCSD 读取时、我们都会读取更大的块、例如4K。 我们缓存该4K 块。 可能是下一个512字节的读取请求将位于同一个块中。 当我们看到可以立即返回数据而不再次访问 MMCSD 驱动程序时。 您可以在 USBD_mmcsd_cuse.c 读取函数中实现此策略。 请尝试此方法。

    接下来我们将查看 unmount / safely remove 命令。


    此致

    Thanh