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.

[参考译文] CCS/TMS320C6455:C6455引导

Guru**** 2538955 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/764281/ccs-tms320c6455-c6455-booting

器件型号:TMS320C6455

工具/软件:Code Composer Studio

您好!

我已将 DSP 配置为 EMIFA 引导模式。

当通过仿真器加载代码时、代码工作正常、

但是、当同样的代码转换为十六进制并通过外部闪存加载时、DSP 不会启动。

在调试过程中、我发现 DSP 不会脱离将代码从闪存传输到 L2RAM 的过程。

还可以观察到、保留段大小的 CPU 内核寄存器的值(根据次级引导加载程序寄存器 B0)具有巨大的值(0xFFC100000)。

此问题仅在.text 段大小超过0x13000时发生。

我是否可以知道该段的大小有任何限制?

提前感谢。

此致、

Rakesh。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    引导加载程序似乎存在问题。 您应该尝试此处提到的一些调试提示:

    processors.wiki.ti.com/.../Debugging_Boot_Issues

    您能看到通过单步执行该代码加载了不正确的值吗? 您能否发布负责加载该代码的指令和/或代码片段? 我怀疑它可能与用于定义某些变量的数据类型和/或编译器使用的寻址模式有关(或者这是汇编代码?)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已连接次级引导加载程序代码。

          .title "6455 DSP 的闪存启动实用程序"
          选项 D、T
          长度102.
          宽 140
    COPY_TABLE  .equ  b00000000400
          .sect ".boot_load"
          全局_boot
    启动(_P):     
    ;'********
    ;*调试循环- 针对正常操作注释出 B
    ;'********
          零 B1
    _myloop: ;[!b1] B _myloop   
          NOP 5.
    _myloopend:NOP
    ;'********
    ;*配置 EMIF
    ;'********
    ;*复制代码段
        mvkl copy_table、A3  ;加载表指针
        mvkh copy_table、A3
        LDW  *A3++,B1     ;加载入口点
    COPY_SECTION 顶部:
        LDW  *A3++,b0     ;字节计数  
        LDW  *A3++,A4     ; RAM 起始地址
        NOP  3.
     [!b0] b COPY_DONE       ;我们是否复制了所有段?
        NOP  5.
    COPY_LOOP:
        LDB  * A3++、B5
        低于  b0、1、b0      ;递减计数器
     [b0] b   COPY_LOOP     ;如果未完成,则设置分支
     [!b0] b   COPY_SECTION _TOP
         A1为零
     [!b0] 和  3、A3、A1
        STB  B5、* A4++
     [!b0] 和  -4、A3、A5      ;四舍五入地址到下一个4的倍数
     [A1] 加上  4,A5,A3.      ;四舍五入地址到下一个4的倍数
    ;*跳转到入口点
    COPY_DONE:
        b  .S2 B1
        NOP  5.
    此致、
    Rakesh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不清楚问题是什么。  您需要单步执行代码以查找出现问题的时间点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    当.text 段大小超过0x14000时,我将面临此问题。

    在调试时,我注意到内核寄存器值 B0的值为0xFFFC0000,
    这就是 DSP 不启动的原因。

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

    这看起来像是由于某种原因而进行了符号扩展。

    1. 它是否直接从存储器加载为该值?  换言之、在它接收到该值的位置执行什么指令?  您是否确定这是"加载"指令、并且在 减法等过程中可能不会发生这种情况?  您是否通过单步执行代码进行了验证?
    2. 如果从外部存储器加载闪存、您能否检查闪存以查看在这种情况下闪存中的值是否为0xFFFC0000、即创建闪存映像的工具中可能存在此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我已经验证了我的闪存映像、闪存映像不包含该值、而是保存了实际的段大小值。
    内核寄存器的值是因为次级引导加载程序代码中的减法指令。

    事实上、我使用相同的工具来创建闪存映像、如果.text 段大小不超过0x14000、我可以在该工具中启动。

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

    尝试将“sub”更改为“subu”。

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

    您好!

    我已经尝试更改为"subu"、但我遇到了以下错误。

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

    返回到原始代码并尝试更改以下两行:

        低于  b0、1、b0      ;递减计数器
     [b0] b   COPY_LOOP     ;如果未完成,则设置分支
    这两条指令可以替换为以下指令:
     [b0] bdec   copy_loop、b0     ;如果未完成,则设置分支
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我尝试替换这些指令。
    DSP 仍无法启动。

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

    即使替换这些指令、
    DSP 未启动。

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

    请发布两个屏幕截图:

    1. 寄存器值之前的指令变为意外值。
    2. 寄存器值之后的指令变为意外值。

    每个屏幕截图都需要包含反汇编窗口和 CPU 寄存器窗口。  我希望能够在反汇编窗口中看到精确的操作码、以及在执行指令时所有寄存器如何变化。

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

    感谢您的快速响应。
    我发现我对闪存本身的写入不正确。

    我已导出数据、写入闪存的内容并与需要加载的十六进制文件进行比较、发现只写入一定数量的字节(91064)。 其他字节与闪存的擦除值相同、即0xFF。 这就是内核寄存器值(B0)保持如此大的值的原因。

    因此、大于上述字节的代码不会引导、而另一个字节会引导。

    您对通过 DSP 一次写入闪存的字节数是否有任何限制?

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

    我不知道有任何此类限制。  您将需要调试刷写实用程序、以更好地了解其失败的方式。