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.

[参考译文] TMS320F280033:在 CPU 复位或下电上电后未运行刷写的代码

Guru**** 2524460 points
Other Parts Discussed in Thread: C2000WARE, TMS320F280033

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1349413/tms320f280033-flashed-code-not-running-after-cpu-reset-or-power-cycle

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

您好!

我刷写的代码在第一次编译时工作正常、但在 CPU 复位或下电上电后不加载。

CPU 复位时、代码最初卡在0x3fdba4、并伴有以下警告语句:

在地址"0x3fdba4"处中断、没有可用的调试信息、或在程序代码之外。

如果我点击 Resume、会卡在0x3fb8b9中、上面显示以下语句:

在地址"0x3fb8b9"处中断、没有可用的调试信息或在程序代码之外。

更多信息:

CCS 版本:12.7

编译器版本:TI v22.6.0.LTS

输出格式:eabi (ELF)

链接器命令文件:F280033_flash_lnk.cmd

C2000ware 版本:5.02

我已添加——

预定义符号:_FLASH

输出模块的程序入口点:CODE_START

我在定制硬件上使用 TMS320F280033以及 XDS100v2调试探针。 两个引导模式引脚都使用4.7K 电阻器进行上拉。

注意:F280033_flash_lnk.cmd 链接器命令文件存在构建错误-

"../F280033_FLASH_lnk.cmd"、第45行:错误#10468-D:内存范围组"Memory_Group_1"包含间隙。 "开始"在地址0x80002处结束、"FLASH_BANK0_SEC8"在地址0x88000处开始。 组不能包含缝隙。"

因此我将连接器命令文件的第48行修改为-   

begin             :origin = 0x00088000、length = 0x00000002

和第51行至-

FLASH_BANK0_SEC8 :origin = 0x088002、length = 0x000FFE

之后我可以成功构建程序并测试代码。 但是、在 CPU 复位或下电上电后未加载刷写代码的问题仍然存在。

如能就此问题提供任何帮助,将不胜感激。

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

    您提到的原始地址问题是一个错误、在 F280033器件上、组0闪存的第一个地址是88000h、而不是80000h、因此您所做的更改是正确的。

    我认为另一个问题可能是默认闪存引导模式入口点、但在您更改 BOOTDEF 值中的任何内容之前、我想为该器件验证 TI OTP 的内容以查看是否有更简单的 Soln。

    使用 Code composer 连接到器件后、转到顶部工具栏"View"->"Memory Browser"、打开存储器浏览器

    这将打开一个新的内存视图、右侧的第一个图标将看起来像一个绿色的小 IC、其白色箭头向上/向右指向。  

    单击此选项可打开"Save Memory"对话框。  

    创建一个文件名、将格式下拉列表保持不变、然后单击"Next"。  

    将格式更改为16位十六进制 C 样式、输入0x70000作为起始地址、输入0x400作为长度。

    然后单击"完成"并将.dat 文件上载回此帖子。

    此致!
    马修

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

    这是 e2e.ti.com/.../flash_5F00_issue.dat

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

    感谢您发送、数据正是我对此器件的预期、由于不存在闪存地址0x80000、这是默认闪存入口点地址、因此我们需要使用客户引导选项为闪存入口点分配0x88000。

    下面的内容也在器件 TRM https://www.ti.com/lit/spruiw9 中,但我将尝试在本主题中进行总结。  您可以等待对 Z1 OTP 位置进行编程 、直到结束才能简化该过程。

    1)由于我们增加了对自定义引导的支持、因此默认引导引脚/模式不再是默认引脚/模式。  根据您想要执行的操作、这可能通过系统 POV 更加灵活、只需要1个引脚而不是2个引脚、等等。  假设您不需要串行加载程序、我建议使用1个引导引脚(0是一个选项)、我们会将其中一个模式分配给闪存、另一个模式分配给"等待"引导模式、以便在需要时简化仿真连接。

    2)现在、我们需要确定引导引脚。  为简单起见、我将重复使用2个现有引脚中的一个、GPIO24、因为它上面已经有跳线。

    我们会将此值写入 Z1-BOOTPIN-CONFIG  

    我们将写入0x5AFFFF18、这会将 BMSP0设置为 GPIO24、将其他设置为"禁用"

    因此0x5AFFFF18将进入 Z1-GPREG1

    3)接下来、我们需要选择引导模式并设置引脚和入口点

    我们将使用引导模式的编号3 (FLASH)和4 (WAIT)

    我们将对该内容进行编程、以及指向我之前在 OTP 中提到的 BOOTDEF (DEF0和 DEF1确切地说是)字段的闪存入口点、因此 Z1 BOOTDEFLOW/HIGH

    对于 BOOT_DEF0、我们希望将其用作 WAIT Boot、因为这将对应于 GPIO24 = 0

    因此 BOOT_DEF0 = 0x04  

    BOOT_DEF1我们需要将此函数用作闪存引导、而这将对应于 GPIO24 =1

    因此、BOOT_DEF1 = 0x23  、这会将进入点设置为0x88000、并将其设置为闪存引导

    因此 BOOTDEFLOW = 0xFFFF2304、这将进入 Z1-GPREG3。

    BOOTDEFHIGH 未使用、因此我们将使其为0xFFFFFFFF (Z1-GPREG4)

    您将需要修改 Z1-GPREG1/GPREG3位置、它们分别对应于 BOOTPIN-CONFIG 和 BOOTDEF-LOW

    在 CCS 中、如果你打开闪存工具并向下滚动、你将看到这些位置(忽略我的下面设置中的 GPREG2、只需保持原样):

    完成上述所有操作后、我们应该能够测试校正后的闪存启动模式。

    此致!
    马修

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

    Matthew、您好!

    我无法了解0x13与 BOOT_DEF1值中的哪个选项相对应? 我在 TRM 中只能看到位7:4的偶数(请参阅附件)。 我觉得应该为0x23以指向地址88000h、而 BOOTDEFLOW 将为0xFFFF2304。 我缺少什么吗?

    请确认。

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

    您是对的、我也应该提供 C/P 这张表、以便再次检查我的设置! 我已经回去纠正上一篇文章,所以其他人不会感到困惑。

    此外、您还可以在我上面回复中的引导 ROM 寄存器中看到的仿真寄存器中进行尝试。  这将让您在对 OTP 进行编程之前测试以上内容。

    此致!
    马修

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

    谢谢 Matthew、问题已解决。 在纠正引导模式后、我能够使其从闪存引导。