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/F28M35M52C:为 ARM (M3)处理器生成 bin 文件

Guru**** 1807890 points
Other Parts Discussed in Thread: UNIFLASH, F28M35M52C
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/891264/ccs-f28m35m52c-generate-bin-file-for-arm-m3-processor

器件型号:F28M35M52C
主题中讨论的其他器件:UNIFLASH

工具/软件:Code Composer Studio

您好!

我使用以下编译后处理命令从输出文件生成 bin 文件。 此命令有效、但生成的 bin 文件在与 UniFlash 配合使用时会产生验证错误:

"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin ""${BuildArtiftFileName}""${BuildArtiftFileBaseName}.bin""${CG_TOOL_ROOT}/bin/armofd.exe ""${CG_TOOL_ROOT}/bin/armhex.exe ""${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe

UniFlash 报告:

   文件:C:/..... bin:发生数据验证错误、文件加载失败。

不过、输出工作正常。 C28处理器的 bin 文件也是如此(当然、使用不同的 postbuild 命令)。

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

    Tilfried、

    为了澄清这一点、您是在尝试加载生成的.bin 文件(单击"Load Image"按钮)时看到验证错误、还是加载了.out 文件、然后尝试使用.bin 文件进行验证(单击"Verify Image"按钮)。

    谢谢、

    Ricky

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

    您好 Ricky、

    我使用 UniFlash 工具"指向".bin 文件、然后按"验证"。 它失败了、我按下了加载映像按钮、也失败了。

    对 C28生成的.bin 文件执行相同操作即可。

    此致、Tilli

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

    Tilli、

    加载映像时出现什么错误?

    您能否在控制台中启用'Verbose '并提供输出?

    谢谢、

    Ricky

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

    您好 Ricky、错误消息是

    无法确定文件的目标类型。 实际上、C28 bin 文件也会出现相同的问题。

    此致、Tilli

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

    Tilli、

    如果加载二进制文件格式、则无需确定目标类型。

    只需确定、加载.bin 文件时是否选中了"binary (二进制)"复选框并填充起始地址? 当您选择.bin 文件时、应自动选中"binary (二进制)"复选框、但您仍需要输入起始地址、因为二进制文件不包含该信息。

    谢谢、

    Ricky

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

    Ricky、感谢您提供这些信息。 因此、对于 C28.bin 文件、起始地址似乎为0x0 (因为我可以使用该地址应用 bin 文件)、但 M3的地址是什么? 如何确定正确的起始地址(抱歉、完全是此地址的新内容)? 此致、Tilli

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

    Tilli、

    在 F28M35M52C 上、闪存存储器位于 M3内核上的地址0x200000和 C28内核上的地址0x100000、因此如果您希望将其加载到这些存储器位置、则可以将其加载到闪存中。 您还可以检查链接器文件(.cmd)以查看您在.out 文件中使用的存储器段。

    我想问的另一个问题是、为什么您首先要将.out 文件转换为二进制格式? 这可能有助于我们确定我们可以为您提供哪些其他建议。

    谢谢、

    Ricky

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

    感谢您的抢先体验! 嗯、我认为向客户分发 bin 文件比输出文件更好。 或者、这是不正确的假设吗? 我不想公开或简化固件中的逆向工程信息。 谢谢、Tilli

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

    Tilli、

    我不知道将二进制文件用作保护信息的方法的用例、尽管我不是该领域的专家。

    与.out 文件相比、该格式包含的信息较少、因为它不包含符号信息、因此无法调试应用(例如、在使用 CCS 加载时);也不包含地址信息、因此需要指定起始地址。 但是、否则、它应包含相同的原始数据。

    谢谢、

    Ricky

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

    我已经检查了.cmd 文件、想知道 CCS 如何识别将程序放置在闪存中的位置。 M3的.cmd 文件如下所示:

    存储器
    {    
       RESETISR (RX)   :origin = 0x00200030,length = 0x0008  //复位 ISR 映射到引导至闪存位置*/
       INTVECS (RX)    :origin = 0x00201000,length = 0x01B0
       FLASHLOAD (RX)  :origin = 0x00201200,length = 0x2E00  /*,用于在闪存中存储代码,以便在运行时复制到 RAM */
       闪存(RX)      :origin = 0x00204000,length = 0x7BFD0   
        C0 (rwx)        :origin = 0x20000000,length = 0x2000
       C1 (rwx)        :origin = 0x20002000,length = 0x2000
       BOOT_RSVD (RX)  :origin = 0x20004000,length = 0x0FF8
       C2 (rwx)        :origin = 0x200051B0,length = 0x0E50
       C3 (rwx)        :origin = 0x20006000,length = 0x2000
       S0 (rwx)        :origin = 0x20008000,length = 0xA000   //使 S0变得格外大以适应.bss *
       S5 (rwx)        :origin = 0x20012000,length = 0x2000
       S6 (Rwx)        :origin = 0x20014000,length = 0x2000
       S7 (rwx)        :origin = 0x20016000,length = 0x2000
       CTOMRAM (RX)    :origin = 0x2007F000,length = 0x0800
       MTOCRAM (rwx)   :origin = 0x2007F800,length = 0x0800

    对于类似这样的 C28:

    存储器

    第0页:   /*程序内存*/
              /*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
      RAML0_L1   :origin = 0x008000、length = 0x002000    //片上 RAM 块 L0 */
      /*RAML1      :origin = 0x009000,length = 0x001000*/*    片上 RAM 块 L1 */
      
      FLASHG     :origin = 0x120000,length = 0x008000    //片上闪存*/
      FLASHF     :origin = 0x128000、length = 0x008000    //片上闪存*/
      FLASHE      :origin = 0x130000,length = 0x008000     //片上闪存*/
      FLASHD     :origin = 0x138000、length = 0x002000     //片上闪存*/
      FLASHC     :origin = 0x13A000,length = 0x002000     //片上闪存*/
      FLASHA     :origin = 0x13E000、length = 0x001F80     //片上闪存*/
      
      csm_RSVD   :origin = 0x13FF80,length = 0x000070    // FLASHA 的一部分。  当 CSM 正在使用时、使用所有0x0000进行编程。 *
      BEGIN      :origin = 0x13FFF0,length = 0x000002/*    FLASHA 的一部分。  用于"引导至闪存"引导加载程序模式。 *
      FLASH_EXT_ONLY _P0 :origin = 0x13FFF2,length = 0x000002/* FLASHA 的一部分。  闪存只执行 FLASHA 中的位置*/
      ECSL_PWL_P0:origin = 0x13FFF4,length = 0x000004    // FLASHA 的一部分。  FLASHA 中的 ECSL 密码位置*/
      CSM_PWL_P0 :origin = 0x13FFF8,length = 0x000008    // FLASHA 的一部分。  FLASHA 中的 CSM 密码位置*/

      FPUTABLES  :origin = 0x3FD258,length = 0x0006A0     //引导 ROM 中的 FPU 表*/
      IQTABLES   :origin = 0x3FD8F8,length = 0x000B50    //引导 ROM 中的 IQMath 表*
      IQTABLES2  :origin = 0x3FE448,length = 0x00008C    //引导 ROM 中的 IQMath 表*
      IQTABLES3  :origin = 0x3FE4D4,length = 0x0000AA     /*引导 ROM 中的 IQMath 表*/

      BootROM    :origin = 0x3FEDA8,length = 0x001200    //引导 ROM */
      PIEMISHNDLR:origin = 0x3FFFBE,length = 0x000002/*     部分引导 ROM *
      复位      :origin = 0x3FFFC0,length = 0x000002    //引导 ROM 的部分 */
      向量    :origin = 0x3FFFC2,length = 0x00003E    //引导 ROM 的部分 */

    第1页:/*  数据存储器*/
              /*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
              /*寄存器保留在第1页                                                 中*/
      BOOT_RSVD  :origin = 0x000000,length = 0x000050    // M0的一部分,引导 ROM 将此用于栈*/
      RAMM0      :origin = 0x000050、length = 0x0003B0    //片上 RAM 块 M0 *
      RAMM1      :origin = 0x000400、length = 0x000400    //片上 RAM 块 M1 *
      RAML2      :origin = 0x00A000、length = 0x001000    //片上 RAM 块 L2 */
      RAML3      :origin = 0x00B000、length = 0x001000    //片上 RAM 块 L3 *
      RAMS0      :origin = 0x00C000、length = 0x001000    //片上共享 RAM 块 S0 */
      RAMS1      :origin = 0x00D000、length = 0x001000    //片上共享 RAM 块 S1 *
      RAMS2      :origin = 0x00E000、length = 0x001000    //片上共享 RAM 块 S2 *
      RAMS3      :origin = 0x00F000、length = 0x001000    //片上共享 RAM 块 S3 *
      RAMS4      :origin = 0x010000,length = 0x001000    //片上共享 RAM 块 S4 */
      RAMS5      :origin = 0x011000,length = 0x001000    //片上共享 RAM 块 S5 */
      RAMS6      :origin = 0x012000,length = 0x001000    //片上共享 RAM 块 S6 */
      RAMS7      :origin = 0x013000、length = 0x001000    //片上共享 RAM 块 S7 *

      CTOMRAM    :origin = 0x03F800,length = 0x000380    // C28 to M3 Message RAM */
      MTOCRAM    :origin = 0x03FC00,length = 0x000380    // M3到 C28消息 RAM */
      
      FLASHB     :origin = 0x13C000、length = 0x002000    //片上闪存*/


    我找不到您在上面引用的地址。 CCS 如何确定使用哪个区域来刷写控制器?

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

    Tilli、

    在.cmd 文件中、还有一个段定义。 这是您指定代码段应放置在目标存储器中的位置。 例如、以下段定义将.text 段放入闪存中、闪存定义为位于地址0x00204000处。

    部分

       .intvecs:  > INTVECS、ALIGN (8)
       .resettisr: > RESETISR、align (8)
       .text  :  > FLASH、ALIGN (8)
       .const :  > FLASH、align (8)
       .cinit :  > FLASH、align (8)
       .pinit :  > FLASH、align (8)
       (笑声)

    我要查看的 F28M35M52C1_c28.cmd 版本定义了以下存储器区域、这对应于我之前发布的0x100000闪存存储器起始地址:

      FLASHN     :origin = 0x100000、length = 0x002000    //片上闪存*/
      FLASHM     :origin = 0x102000、length = 0x002000    //片上闪存*/
      FLASHL     :origin = 0x104000、length = 0x002000    //片上闪存*/
      FLASHK     :origin = 0x106000、length = 0x002000    //片上闪存*/
      FLASHJ     :origin = 0x108000、length = 0x008000    //片上闪存*/
      FLASHI     :origin = 0x110000,length = 0x008000    //片上闪存*/
      FLASHH     :origin = 0x118000,length = 0x008000    //片上闪存*/
      FLASHG     :origin = 0x120000,length = 0x008000    //片上闪存*/
      FLASHF     :origin = 0x128000、length = 0x008000    //片上闪存*/
      FLASHE      :origin = 0x130000,length = 0x008000     //片上闪存*/
      FLASHD     :origin = 0x138000、length = 0x002000     //片上闪存*/
      FLASHC     :origin = 0x13A000,length = 0x002000     //片上闪存*/
      FLASHA     :origin = 0x13E000、length = 0x001F80     //片上闪存*/

    如果您对此主题还有其他问题、我建议您在论坛的 Code Composer Studio 部分开始发布新帖子。 届时将有专家为您提供帮助。

    谢谢、

    Ricky