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.

[参考译文] TMS320F28379D:成功构建 SD 卡示例、但无法访问 SD 卡

Guru**** 2614885 points

Other Parts Discussed in Thread: TMS320F28379D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1030775/tms320f28379d-sd-card-example-built-successfully-but-could-not-access-sd-card

器件型号:TMS320F28379D
主题中讨论的其他器件: C2000WARE

您好!

我不熟悉 TI 微控制  器、在成功创建了一个项目以使用 Delfino TMS320F28379D controlCARD R1.3在 IDDK R2.2.1板上运行 SD 卡示例之后、出现了一个无法解决的错误。 当我尝试命令程序访问/读取/写入卡时、它总是跳转到 ILLEGAL_ISR (在 MMC_F2837x.c 中从 WAIT_READY 开始)。

除了创建一个新的 CCS 工程以包含源代码之外、我没有更改示例代码的任何行。

我已尝试使用 PC 通过 FAT32或 exFAT 格式化 SD 卡、但这不会有帮助。 下面是有关错误和链接资源的一些屏幕截图。

示例位置为"C:\ti\c2000\C2000Ware_MotorControl_SDK_3_02_00\c2000ware\device_support\f2837xd\examples\cpu1\sd_card\cpu01"

谢谢,最棒的地方!

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

    您好!

    要进行更新、我已将工程配置从闪存更改为 RAM 编译、从而解决了该问题。

    注意!

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

    感谢您的更新。 与从闪存运行相关的非法_ISR 问题通常与缺少 memcpy 将 ramfuncs 段(包含 delay_US 中使用的底层函数)从闪存复制到 RAM 相对应。 我相信 InitSysCtrl()函数已经包含 memcpy,只要您确保在预定义符号中具有_flash。 这是我建议检查您是否希望尝试使闪存构建正常工作的第一件事。

    惠特尼

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

     尊敬的惠特尼:

    感谢您的回答。 RAM 配置现已修复我的问题。 因此、我将尝试让闪存构建 在未来工作、并在此时更新。

    很抱歉耽误你的回答。

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

     尊敬的惠特尼:

    回到 SD 卡项目、我正在开发一个双 CPU 程序、以便从 CPU2写入 SD 卡。 但是、在成功构建后 、CPU2工程也会跳转到  f_mount 函数中的 ILLEGAL_ISR。 我已经挣扎了几天,但找不到原因。

    谢谢,最棒的地方!

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

    如果您单步执行代码、是否有一条特定的行会跳转到 ILLEGAL_ISR? 在这种情况下、您从 RAM 执行?

    惠特尼

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

    是的、在这种情况下、我将从 RAM 执行。

    下面是调试窗口的屏幕截图、我可以在此代码中单步执行、如果我向前移动一步、它将跳转到  ILLEGAL_ISR。 此处引起的错误可能 是820 in ff.c (FATFS *fsobj)、它在 此处分配了 FATFS 结构指针、我 不知道为什么会出错

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

    在 CCS 的"Debug"面板中、它通常会向您显示您的调用堆栈。 当您处于 ILLEGAL_ISR 中时、它会显示什么?

    您能否检查堆栈溢出的迹象? 这是 ITRAP 问题的常见原因。 您应该能够在 CCS 的存储器浏览器中查看堆栈。 如果您无法告知它是否溢出、 在运行应用程序之前、您可以使用内存浏览器中的"Fill Memory"工具来填充堆栈、然后您可以转到堆栈的末尾来查看整个图形是否已擦除。

    惠特尼

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

    首先 、两个 CPU 中的程序堆栈由 RAMM1段分配、 origin = 0x000400、length = 0x000400。 以下是我在  ILLEGAL_ISR 中时调用栈的屏幕截图

    我用0xFF 填充了堆栈、并且 修改了一些块。

    然后我编辑   了长度= 0x000700的 RAMM1。  下面是屏幕截图

     您认为这里有堆栈溢出的迹象吗? 很抱歉、我没有任何相关经验。

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

    不、我认为这不是堆栈溢出-这对我来说看起来是正常的堆栈使用。

    如果您单击 Debug 面板中显示"main()"的行、它会显示什么行?

    您是否启用了任何中断?

    惠特尼

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

     然后是 f_mount 函数导致  ILLEGAL_ISR。  当我进入时、我在上面向您展示的第一个屏幕截图是捕获的。

    这里启用了一个中断、 即 FatFs 计时器。

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

    由于这是 CPU2、因此可能是权限问题。 您能否确保 CPU2有权从存储了 f_mount ()的存储器中执行代码? 它看起来是在 CPU 之间共享的 GSRAM 之一中。 如果 CPU1拥有此 RAM 块、它将解释为什么代码看起来有效、但 CPU2无法实际获取代码。 更多详细信息、请参阅技术参考手册中的存储器配置寄存器。

    惠特尼

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

    我已经完成了一些 存储器配置来分配对 CPU2的完全访问权限、并且它可以正常工作

    非常感谢您的支持!