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.

[参考译文] AM263X-MCAL SDK:调试 MMC/SD IO

Guru**** 2894990 points

Other Parts Discussed in Thread: AM2634

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1626213/am263x-mcal-sdk-debugging-the-mmc-sd-io

器件型号:AM263X-MCAL SDK
主题中讨论的其他器件: AM2634

您好、
我尝试在 AM2634 Sitara LaunchPad 上执行程序“mmcsd_raw_io_am263x-lp_r5fss0-0_nortos_ti-arm-clang"。“。 首先我遇到错误、显示一些测试失败、但在注释掉 memcmp 函数后、它显示了通过的所有测试、我能够看到读取和写入函数都被执行。 如何验证数据是否实际写入 SD 卡、我使用 HxD 软件检查数据、但我无法导航到正确的存储位置。 请帮助我解决这个问题。

谢谢、此致
JIBIN PK

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

    嗨、Jibin、

    您能否分享所使用的 MCU+ SDK 版本?

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    感谢您的回复。我使用的是 AM2634 MCU+SDK 11.01.00

    此致、
    Jibin

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

    嗨、Jibin、

    我尝试在 LaunchPad 上运行相同的示例、我看到示例传递了:

    我使用的 SD 卡是 SanDisk 16GB microSD 卡。

    您能否验证在写功能后是否实际写入了卡? 我怀疑这里存在一些问题、因为读取和写入都应该通过、而不是卡在 memcmp 函数中。  

    查看 mmcsd_raw_io.c:39-101、程序:

    1.写入块:0x300000(十进制为 3,145,728)-位于 1.5GB 位置
    2.数据大小:1024 字节 (1 KB)
    3.数据模式:从 0x00 到 0xFF 的重复序列(第 101 行):
    00 01 02 03 04 ... FD FE FF 00 01 02 03 ...(重复 4 次)

    如何使用 HxD 验证数据:

    1.从 LaunchPad 中取出 SD 卡并使用读卡器将其插入 PC
    2.在 HxD 中作为物理磁盘打开:
    -文件→打开磁盘→选择您的 SD 卡物理驱动器(例如,\\.\PhysicalDrive2)
    -不要打开分区,打开整个物理磁盘
    3.导航到正确的位置:
    -按 Ctrl+G(转到)
    -计算字节偏移量: 0x300000 块× 512 字节/块= 0x60000000 字节 (1.536 GB)
    -输入:60000000(十六进制)或 1610612736(十进制)
    -单击“确定“
    4.预期的数据模式:
    使用此模式时、您应该会看到恰好为 1024 个字节:
    00 01 02 03 04 05 06 08 09 0A 0C 0D 0E 0F
    10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
    ...
    F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
    00 01 02 03 04 05 ...(模式重复共 4 次)

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    所以我发现一些数据已经写在这些位置,在格式化 SD 卡时不会消失,所以我尝试写入到另一个空的位置。 我对代码做了小幅更改、而不是 0x300000、我使用了 0x100000、因此对应的字节位置将是 0x100000 x 512 = 20000000 字节。 执行程序后、问题仍然存在、但我能够验证写入和读取函数是否正在执行以及某些数据是否已写入 SD 卡。我观察到连续模式 0xFF 0xFF 0xFF 0xFF…… 但存储器位置之间的一些随机值除外。 我附上 HxD 软件和 CCS 的屏幕截图。 数据未精确写入给定的位置、超出了值、这也是一个观察值。 并且 memcmp 出现故障、预计在 HxD 软件中看到 SD 卡中写入的数据后会出现这种情况。

    此致

    Jibin PK


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

    嗨、Jibin、

    1.能否确保 SD 卡支持将数据写入特定位置? 某些 SD 卡有一些地址被阻止。

    2.如果 1 不是问题,可以尝试添加缓存一致性处理吗?

      void mmcsd_raw_io_main(void *args)
      {
          // ... existing code ...
    
          mmcsd_raw_io_fill_buffers();
    
          // FLUSH cache before write
          CacheP_wb((void*)gMmcsdTxBuf, APP_MMCSD_DATA_SIZE, CacheP_TYPE_ALL);
    
          status = MMCSD_write(gMmcsdHandle[CONFIG_MMCSD0], gMmcsdTxBuf,
                               APP_MMCSD_START_BLK, numBlocks);
    
          // INVALIDATE cache before read
          CacheP_inv((void*)gMmcsdRxBuf, APP_MMCSD_DATA_SIZE, CacheP_TYPE_ALL);
    
          status = MMCSD_read(gMmcsdHandle[CONFIG_MMCSD0], gMmcsdRxBuf,
                              APP_MMCSD_START_BLK, numBlocks);
    
          // Compare
          status = memcmp(gMmcsdRxBuf, gMmcsdTxBuf, APP_MMCSD_DATA_SIZE);
      }

    3.你能得到什么是回读的转储吗?

    4.如果你有另一张 SD 卡,你能尝试一下吗?

    如前所述、我看到同一个示例在我的终端上使用相同的 SDK 版本和 LaunchPad。

    此致、
    Shaunak