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.

[参考译文] TMS320F28384S:f28384s 闪存写入和程序跳转

Guru**** 2535750 points
Other Parts Discussed in Thread: TMS320F28384S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1554674/tms320f28384s-f28384s-flash-write-and-program-jump

器件型号:TMS320F28384S


工具/软件:

我正在使用 TMS320F28384S 并开发一个引导加载程序、但该程序在执行闪存下载后不会跳转。

问题
使用相同的引导加载程序、如果我使用调试器写入程序、则跳转将正常工作。 但是、如果我使用引导加载程序写入它、则不会发生跳转。

正常运行
1-1. 应用程序直接通过调试器写入(从 0x84000 开始)。
1-2. 引导加载程序直接通过调试器写入 (0x80000、仅使用扇区 0 和 1)。
1-3. 在引导加载程序中、应用程序跳转到_c_int00 的地址。
1-4. 程序正常跳转。

失效情况
2-1. 引导加载程序直接通过调试器写入 (0x80000、仅使用扇区 0 和 1)。
2-2. 使用 SCIA、使用 Fapi_issueProgrammingCommand 函数将十六进制文件写入从地址 0x84000 开始的闪存。
我添加了以下十六进制文件选项:
-map=sections.txt --entrypoint=_c_int00 --memwidth=16 --romwidth=8 --order=LS
2-3. 在引导加载程序中、应用程序跳转到_c_int00 的地址。
2-4. 程序不会跳转。

已检查的分数/问题

比较使用调试器写入与使用引导加载程序写入后的存储器内容时、
Memory Browser 中的 8 位十六进制 TI 样式视图看起来完全相同。
但是、16 位十六进制 — TI 样式视图显示了差异。 哪一个应该被认为是正确的?

由于使用了相同的引导加载程序、我们是否可以假设程序跳转代码本身正确?

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

    器件型号:TMS320F28384S

    工具/软件:

    下面是该十六进制文件的前六行。

    映像是 CCS 中的存储器浏览器。

    十六进制文件和存储器是否匹配?

    引导加载程序。 我通过引导加载程序写入了十六进制文件、并想知道数据是否匹配。

    :020000040008F2
    :064000009DD90800489D57
    :2040080003BD03BD1C58574 C4A5A4C4E575BAD96A4078400484548471F000E101100A946
    :204028008098A61EA9269492AF10AF0E6565656565656565656565656565656565656565656565656547
    :204048006565656565656565656565656565656565650348034600444241484648AF006F00A98098AF10CD
    :20406800AF0E92A61EA926941F58000A65656565656565656565656565656565656565656565655D

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

    您好:

    您是否在 64 位边界上对齐链接器命令文件中的闪存段? 您如何对闪存进行编程?  有关推荐的闪存擦除和编程流程、请参阅 F2838x 闪存 API 指南推荐的 FSM 流程。

    -map=sections.txt --entrypoint=_c_int00 --memwidth=16 --romwidth=8 --order=LS

    您使用哪种十六进制格式(TI_TXT、ASCII、Intel 等)?

    请尝试使用 memwidth 和 romwidth 16。  请搜索 C28x 汇编工具手册 、查看标题为 了解存储器宽度的子章节。  这说明了目标宽度、 --memwidth 和 --romwidth 之间的关系。  在 C28x 上、每个地址对应一个 16 位字。   

    此致、

    马特

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



    移动数据

    begin:origin = 0x084000、length = 0x000008 /* Reset vector / codestart */
    BOOT_RSVD:origin = 0x000004、length = 0x0001AD /* M0 的保留部分、由引导 ROM 用于堆栈*/
    RAMM0:原点= 0x0001b1、长度= 0x00024F
    RAMM1:原点= 0x000400、长度= 0x0003F8

    RAMLSxDxGSx:origin = 0x008000、length = 0x00FFFF
    RAMGSx:origin = 0x018000、length = 0x004FF8

    Flash_app:origin = 0x084008、length = 0x03BFF8 /*应用程序代码、数据等(示例:0x084002~0x0BFFFF)*/
    //如果需要、可以添加其他闪存部分

    Reset:origin = 0x3FFFC0、length = 0x000002
    }

    很重要

    codestart:> begin、align(8)/*从 0x084000 开始*/
    .text:>> flash_app、align (8)/*将整个应用程序代码放入 flash_app */中
    .cinit:> flash_app、align (8)
    .switch :> flash_app, align(8)
    .const :> flash_app, align(8)
    .TI.ramfunc:{}load = flash_app、
    RUN = RAMGSx、
    LOAD_START (RamfuncsLoadStart)、
    load_size (RamfuncsLoadSize)、
    LOAD_END (RamfuncsLoadEnd)、
    RUN_START (RamfuncsRunStart)、
    RUN_SIZE (RamfuncsRunSize)、
    RUN_END (RamfuncsRunEnd)、
    对齐 (8)

    .stack :> RAMLSxDxGSx
    .bss :> RAMGSx
    .data :> RAMGSx
    .sysmem :> RAMLSxDxGSx
    .freertosHeap :> RAMLSxDxGSx
    .freertosStaticStack:>> RAMLSxDxGSx

    //其他部分保持不变
    }


    静态内联 bool flash_prog8 (uint32_t lineAddr_word、const uint8_t *src8)

    // lineAddr_word:4 字(8 字节)
    Fapi_Status 类型 st = Fapi_issueProgrammingCommand (
    (uint32_t *) lineAddr_word、
    (uint16_t *) src8、
    4、// 4 个字
    0、0、Fapi_Auto EccGeneration);//EccGeneration Only、Fapi_Auto Fapi_Data
    如果 (st != Fapi_Status_Success ) 返回 false;
    while (Fapi_checkFsmForReady ()!= Fapi_Status_Fsm){}
    返回 true;
    }

     十六进制文件是 Intel 十六进制格式。

    我会尝试将 romwidth 更改为 16。

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

    将 ROM 宽度设置为 16 后、程序正常工作。 感谢您的帮助!

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

    您好:

    很高兴听到! 很高兴您能快速解决该问题。

    此致、

    马特