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/F28M35H52C:生成应用程序.bin文件并将其加载到闪存中

Guru**** 2589245 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/654171/ccs-f28m35h52c-generate-application-bin-file-and-load-it-into-flash

部件号:F28M35H52C
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

您好,

为了以后使用bootloader加载它,我需要生成.bin文件而不是.out。 这适用于M3零件。

在CCS 6.2 中,在项目属性中,我在“生成后步骤”框中添加了:

"${cce_install_root}/utils/tiobj2bin/tiobj2bin""${BuildArtifactFileName}""${BuildArtifactFileBaseName}.bin""${CG_tool_root}/bin/armofd""${CG_tool_root}/bin/armhex"

e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/41.1296万所建议

bin已生成,但其大小为524 KB,大于M3闪存总大小(512 KB),显然不适合。

有人能告诉我我我做错了什么吗?

谢谢!

RIL

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

    我认为您的命令没有任何问题。 通常.out文件比.bin文件小得多。

    是否已尝试对.bin文件进行编程? 我知道.bin大小是524 KB。 但它应该包含校验和,数据长度和其他不在闪存中编程的信息。

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

    Manoj您好,感谢您的回答。

    我的目标是首先使用CCS 6.2 中的“工具/加载存储器”,使用二进制类型对其进行编程。 在我看来,所有的524 KB 都将使用这种方法编写。 我担心如果我运气不好,我会在CSM密码部分(A和N区)中全部写零,并永久锁定设备,这对我来说是一次!

    最后,我想使用引导加载程序中的闪存API对其进行编程。 在这种情况下,没有什么可以告诉我如何不写入所有524 KB。

    我希望 二进制文件驻留在闪存中,地址为0x22万到0x0027FF00 (39.2956万字节)。 引导加载程序将位于0x20.003万至0x22万。

    我的链接器文件中可能存在问题?

    仅供参考,booloader链接程序文件如下所示:

    ...
    BootROM (RX) :原点= 0x0万,长度= 0x1万
    
    CSM_ECSL_Z1 :原点= 0x20万,长度= 0x0.0024万 //保留以避免永久板锁
    CSM_RSVD_Z1 : Origin = 0x20.0024万,length = 0x0万C //保留以避免永久板锁
    flash_boot (rwx):origin = 0x20.003万,length = 0x0.0004万 //不确定此部分中的内容,但我猜这是关键。 ?
    闪存(rwx) : Origin = 0x20.0034万,length = 0x0001FFCC // Bootloader代码(我知道,这是bootloader的一个大部分。)
    RSVD_firmware : Origin = 0x22万,length = 0x0005FF00 //保留给应用程序和主功能地址
    CSM_RSVD_Z2 :Origin = 0x0027FF00,length = 0x0万DC //保留以避免永久板锁
    CSM_ECSL_Z2 :原始= 0x0027FFDC,长度= 0x0.0024万 //为避免永久主板锁定而保留
    
    ...
    文本 :> flash
    .binit :> flash
    .cinit :>闪存
    .Pinit :>闪存
    .const :>闪烁
    ... 

    和应用程序链接程序文件:

    ...
    
    BootROM (RX) :原点= 0x0万,长度= 0x1万
    
    CSM_ECSL_Z1 :原点= 0x20万,长度= 0x0.0024万 //保留以避免永久板锁
    CSM_RSVD_Z1 :原始= 0x20.0024万,长度= 0x0万C //保留以避免永久板锁
    RSVD_bootloader:原始= 0x20.003万,长度= 0x0001FD0
    flash_boot (rwx):原始= 0x22万,长度= 0x0.0004万 //不确定此部分
    的内容Flash (rwx) :原始= 0x22.0004万,长度= 0x0005FEF8 //应用程序代码
    MAIN_ADDR (rwx):原始= 0x0027FEFC,长度= 0x0.0004万 //存储应用
    程序CSM_RSVD_Z2的主功能地址 :Origin = 0x0027FF00,length = 0x0万DC //保留以避免永久板锁
    CSM_ECSL_Z2 :原始= 0x0027FFDC,长度= 0x0.0024万 //为避免永久主板锁定而保留
    ...
    
    文本 :> flash
    .binit :> flash
    .cinit :>闪存
    .Pinit :>闪存
    .const :>闪烁
    
    ... 

    你觉得有什么问题吗?

    再次感谢您的支持。

    RIL

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

    我从未尝试过直接编程.bin文件。 我不能坚定地回答。 检查这一点的唯一方法是以.bin格式以controlSUITE加载一个较小的示例项目。

    如何将.bin代码加载到Flash中? CCS片上闪存工具无法编程.bin文件格式。

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

    您好,

    [报价用户="Manoj Santha Mohan"]

    如何将.bin代码加载到Flash中? CCS片上闪存工具无法编程.bin文件格式。

    [/引述]

    在CCS 6.2 调试角度中,一旦连接到目标,我就可以执行“工具/加载内存”,然后选择二进制格式,并选择一个地址(在我的情况下为0x22万)。  最后,我想通过辅助引导加载程序的Flash API来完成。

    是否有人知道更多? 也许有一个命令选项可以以不同的方式格式化.bin?

    感谢你的帮助。

    RIL

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

    您能否确认您是否能够将.out文件加载到闪存中而不会出现任何问题?

    我想知道您的代码大小是否太大,无法容纳此设备的闪存。

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

    [报价用户="RIL Dank"]

    bin已生成,但其大小为524 KB,大于M3闪存总大小(512 KB),显然不适合。

    有人能告诉我我我做错了什么吗?

    [/引述]

    我可以说一些。  您的内存映射中几乎肯定有一些大洞。  本文 说明了这如何导致.bin文件如此大。  很遗憾,我无法告诉您如何解决问题。

    谢谢,此致,

    -George

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

    很抱歉,我花了很多时间来回应,我还需要关注其他优先事项。

    我不知道发生了什么,但现在.bin文件的大小还可以,大约230kB。 该项目没有特别的变化。 即使我在打开此帖子时返回到完全相同的项目状态(git commit),大小现在是一致的(200-300KB),我可以将其加载到内存并启动程序。 很奇怪,但好消息。

    现在,我尝试对C28固件执行同样的操作。 我使用相同的命令,但我将'armofd'替换为'ofd2000',将'armhex'替换为'hex2000',如下所示:

    "${cce_install_root}/utils/tiobj2bin/tiobj2bin""${BuildArtifactFileName}""${BuildArtifactFileBaseName}.bin""${CG_tool_root}/bin/ofd2000""${CG_tool_root}/bin/hex2bin"

    我遇到了与M3二进制文件完全相同的问题。 它是524kB,就像我遇到问题时的M3槽!

    我让几位同事在他们的工作站上尝试相同的构建后步骤,结果是相同的,524kB .bin文件。

    我是否可以开设一个新的职位来询问此问题? 可能在另一个论坛上?

    这种524kB大小的想法是什么? 我可以做些什么来设置一个大小合适的二进制文件,使其能够真正适应闪存?

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

    解释和我对ARM案例的解释一样。  内存中必须有一个大孔。  请记住,此类孔可能有两个原因。  一种是不用于任何东西的内存范围。  另一个是未初始化的部分使用的内存范围。  您需要对内容进行排列,以便此类孔不会出现在初始化的节之间。  另一种考虑方法是:初始化的部分必须彼此相邻。

    谢谢,此致,

    -George

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

    您好 ,George,感谢您的回答。

    我理解您所说的内容,但我不确定如何解决,甚至不知道我的项目中的问题到底在哪里。

    我设置了一个非常小的项目,其中包含几行代码,结果仍然是一样的。

    我已附加链接程序cmd文件以及生成的.out和.map文件。 您能否查看一下,如果您发现任何问题,请告诉我?  

    任何线索都将受到极大的欢迎。

    感谢您的支持。

    RIL

    e2e.ti.com/.../C28.cmd.txte2e.ti.com/.../C28.out.txte2e.ti.com/.../C28.map.txt

    编辑:

    我还从以下命令添加报告:

    ofd2000 -x C28.out | sectti.pl 

    我可以看出,在初始化的部分之间存在一些小漏洞,但没有什么可以证明bin文件大小的合理性,正如您在帖子中提到的那样。

    谢谢!  

    RIL

    e2e.ti.com/.../C28.out.report.txt

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

    二进制文件的大小由等式指定...

    最高初始化地址-最低初始化地址

    在这种情况下,初始化的最大地址来自 .ti_catalog_c2800_concertoInit_begin部分,即0x13fff2。  初始化的最低地址来自.text部分,即0x10万。  减去并得到0x3fff2。  但请记住,C28x上的地址是16位字。  所以,所有这些数学计算都计算16位字。  要获得8位字节,必须乘以2。  因此0x3fff2 * 2 = 0x7fffe4字节。  这只是略少于512K字节。   

    初始化部分之间的最大间隙似乎是.binit和FPUmathTables之间的间隙。  FPUmathTables和 .ti_catalog_c2800_cartogoInit_begin之间还有一个较大的间隔。  您需要重新安排事情以避免这些差距。  要了解哪些更改有效,需要了解系统,但遗憾的是,我没有这种了解。

    谢谢,此致,

    -George

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

    嗯……结果文件大小一直都是正确的…… !
    我在Nautilus资源管理器(Ubuntu 16.04)中查看文件大小,显示524.3kB。 显然,在这个资源管理器中,1KB =1000字节,而不是1024字节,这对我来说太疯狂了... 所以大小实际上是512KB (524'260字节),这是正确的!

    很抱歉浪费您的时间,我不会猜测Ubuntu中1KB是1000字节。

    非常感谢您的支持,我仍然学到了一些有趣的事情!


    此致,
    RIL