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.

[参考译文] TMS320F28388D:TMS320F28388D CM 内核上的闪存 API GCC 兼容性问题(绝对地址访问)

Guru**** 2837020 points

Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1580960/tms320f28388d-flash-api-gcc-compatibility-issue-on-tms320f28388d-cm-core-absolute-address-access

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

您好 TI、

我很关心在 TMS320F28388D(CM 内核)上的闪存 API 上观察到的 GCC 兼容性问题。

使用 GCC 从 RAM 执行闪存 API 时、几个函数(例如 CM_FLASHREGS_LOCK 和 CM_FLASHREGS_UNLOCK)访问绝对地址、而不是使用通过 Fapi_initializeAPI () 提供的基址。
例如、CM_FLASHREGS_LOCK 函数对地址 0x00001FD8 进行解引用、该地址不在 CM 的 RAM 或闪存寄存器区域内:

Movw  R1、#0x1FD8 
movt  R1、#0x0
LDR  R1、[R1]
ldr.w r1、[r1、#0x2FC]
MOV.w r0、#0x5A5A5A5A5A
str.w r0、[R2、#0x2FC]
BX   r14

这种绝对寻址可防止闪存 API 重定位到 RAM、并在执行期间导致总线故障。
问题似乎源自 TI 构建环境假定的内部符号或由链接器定义的常量。

摘要:

器件:TMS320F28388D

核心:厘米

编译器:GCC

库:C2000Ware→libraries/flash_api/f2838x/cm/include/FlashAPI

问题:闪存 API 使用固定地址(例如 0x1FD8)→中断 GCC 下的 RAM 执行

目标:使用 GCC 工具链从 RAM 启用闪存 API 执行

请确认:

闪存 API 是否存在或计划使用与 GCC 兼容或可重定位版本、以及

如果没有、是否有建议的权变措施或补丁(例如重新定义地址符号或修改链接器命令文件)?

此限制目前会阻止我们在 Lauterbach 工具中提供的闪存编程支持、因此任何指导或更新都将非常有用。

此致、
多伊亚

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

    尊敬的 Dhia:

     我检查了只有寄存器在该代码补丁中得到更新的代码。但是、我正在咨询我们的闪存 API 专家、有一天会回来。  

    此致、

    Rajeshwary

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

    嗨、Rajeshwary、

    感谢您完成更新并与闪存 API 专家进行核实。 我将等待您的反馈。

    此致、
    多伊亚

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

    嗨、Rajeshwary、

    是否有关于此主题的任何更新?

    此致、
    多伊亚

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

    尊敬的 Dhia:

    我仍在等待他的反馈。 我会跟他跟进。

    此致、

    Rajeshwary

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

    嗨、Rajeshwary、

    我只想再次检查一下有关 GCC 闪存 API 兼容性问题的信息。

    我们目前有一个客户正在积极研究此主题、并且由于缺乏可重定位的闪存 API、我们无法对其进行集成。 闪存 API 专家提供的任何更新或预计时间线确实会帮助我们规划后续步骤。

    此致、
    多伊亚

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

    DHI,

    对此延迟深表歉意。 我会研究一下、然后由星期一回复您。

    谢谢、

    Sira

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

    DHI,

    为了解需要关注问题的哪一部分、您能否确认从闪存运行时我们提供的 CM 闪存 API 库是否与您的 GCC 编译器工具链配合使用?

    换句话说、我想知道问题是只是从 RAM 部分执行、还是 GCC 工具链部分在这里也发挥了作用。 (如您所知,闪存 API 库是使用 TI ARM 编译器编译的)。

    谢谢、

    Sira

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

    您好、Sira、

    是的、从闪存执行时、我可以确认 CM 闪存 API 库使用我们的 GCC 工具链正常运行。
    仅当将闪存 API 重定位到 RAM 时、才会出现该问题。

    在 RAM 执行中、几个函数(例如 CM_FLASHREGS_LOCK、CM_FLASHREGS_UNLOCK)依赖于 TI 构建库中嵌入的绝对地址、这会导致从 GCC 下的 RAM 运行时存储器访问无效。

    综上所述、由于闪存 API 内部的绝对寻址、问题尤其出在 RAM 重定位情况下。

    如果您需要反汇编摘录或其他测试结果、请告诉我。

    此致、
    多伊亚

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

    尊敬的 Dhia:

    感谢您确认从闪存运行的 GCC + lib 没有问题。

    查看源代码中这些函数的定义时、可以看到:

    静态内联 void CM_FLASHREGS_LOCK (void)
       uint32_t Init.m_poFlashControlRegisters“->FrdIntfCtrlLock.FRD_INTF_CTRL_LOCK_BITS.LOCK   =(Fapi_Global) 0x5A5A5A5A5A5A5A5A5AU
    }

    静态内联 void CM_FLASHREGS_UNLOCK (void)
       uint32_t Init.m_poFlashControlRegisters“->FrdIntfCtrlLock.FRD_INTF_CTRL_LOCK_BITS.LOCK   =(Fapi_Global) 0xA5A5A5U
    }
    在第一个帖子中、您发送了一些反汇编代码。  从 RAM 运行时、是对 CM_FLASHREGS_LOCK 的反汇编吗?
    如果是、从闪存运行时、您是否也可以为该函数发送反汇编?
    此外、您能解释一下如何将闪存 API 库从闪存复制到 RAM 吗? 您是否确认了 RAM 中的内容与闪存匹配?
    谢谢、

    Sira

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

    您好、Sira、

    是、我之前分享的反汇编是使用从 RAM 运行的闪存 API 进行的。

    关于复制库的问题:
    我不会对从闪存到 RAM 的库执行手动 memcpy。
    相反、我要编译我的完整闪存算法(包括闪存 API 库)、以便将整个映像链接到 RAM 中执行。
    因此、闪存 API 绝不会放在闪存中–它已经内置在 RAM 可加载二进制文件中。

    这意味着该问题与重定位或复制无关、而是与 GCC 如何处理 API 内某些内部引用有关。

    此外、如果 TI 根据保密协议提供闪存 API 源、我们可以在内部查看该源。 这将帮助我们了解为什么 GCC 将这些引用解析为 CM 内核上的绝对地址。

    如果您可以确认是否可以根据 NDA 提供闪存 API 源、我们很乐意进行相应的处理。

    此致、
    多伊亚

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

    尊敬的 Dhia:

    感谢您的更新。 我可以向您发送一个私人链接以请求访问权限。 我会向您发送一个朋友请求。

    谢谢、

    Sira

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

    尊敬的 Sira:

    感谢您的更新。 如果您需要我这边的任何信息来申请访问权限、请告诉我。

    此致、
    多伊亚

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

    尊敬的 Dhia:

    我已向 e2e 向您发送了 Connect 申请。 请接受它、以便我可以向您发送指向闪存 API 源代码的申请链接。

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

    尊敬的 Sira:

    我无法在 TI E2E 上找到连接申请。 您能否告知我如何找到它、或者在可能的情况下重新发送申请?

    感谢您的支持!

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

    DHI,

    您能否在 e2e 中点击个人资料并进行浏览? 我无法在未先取消的情况下重新发送请求。

    谢谢、

    Sira

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

    尊敬的 Sira:

    我发现它、有点棘手、但我设法找到它、我现在接受了请求。

    此致、
    多伊亚

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

    太好了、我只是把请求链接发送给您。