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.

[参考译文] CC2650MODA:使链接器不在FLASH_LASE_PAGE中

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1089118/cc2650moda-keep-linker-out-of-flash_last_page

部件号:CC2650MODA
主题中讨论的其他部件:CC2640CC2650

我想使用bootloader,并希望避免在flash的最后一页中放置任何内容,而不是.ccfg。 我尝试删除cc26xx_app.cmd中的映射,但.cinit继续放置在那里,尽管只将闪存的其余部分指定为目标(.cinit:>            flash)

在何处覆盖此信息,我可以在哪里更正它?

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

    你好,James,

    我已分配您的帖子。 您能否说明您正在使用的SDK和项目?

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

    BLE_SDK_2_02_01_18,使用GitHub中更新的SPP_BLE_SERVER的修改版本。

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

    您好,James:

     有关如何配置flash_last_page/客户配置区域(CCA)的信息,请参阅《CC2640 BLE软件开发人员指南用户指南》。 可以修改链接器以保留整个扇区用于客户参数数据。 此信息可在3.10 4客户配置区域中找到。 有关  CCFG和相关配置选项的更多信息,请参见《TI CC26x0技术参考手册》。

    此致,

    一月

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

    您好,Jan,

    我感谢及时的答复。  推荐的开发人员指南涉及更改我已经引用的.cmd文件,以及使用此项目配置中未使用的边界工具。  我本以为删除了上述.cmd文件中所有与FLASH_LASE_PAGE的连接,只剩下CCFG。

    Original (原始):

    SECTIONS
    {
        .intvecs        :   >  FLASH_APP_BASE
        .text           :   >> FLASH | FLASH_LAST_PAGE
        .const          :   >> FLASH | FLASH_LAST_PAGE
        .constdata      :   >> FLASH | FLASH_LAST_PAGE
        .rodata         :   >> FLASH | FLASH_LAST_PAGE
        .cinit          :   >  FLASH | FLASH_LAST_PAGE
        .pinit          :   >> FLASH | FLASH_LAST_PAGE
        .init_array     :   >> FLASH | FLASH_LAST_PAGE
        .emb_text       :   >> FLASH | FLASH_LAST_PAGE
        .ccfg           :   >  FLASH_LAST_PAGE (HIGH)
    
    	GROUP > SRAM
    	{
    	    .data
    	    .bss
    		.vtable
    	    .vtable_ram
    	     vtable_ram
    	    .sysmem
        	.nonretenvar
    	} LOAD_END(heapStart)
    
    	.stack          :   >  SRAM (HIGH) LOAD_START(heapEnd)
    }
    

    已修改:

    SECTIONS
    {
        .intvecs        :   >  FLASH_APP_BASE
        .text           :   >> FLASH
        .const          :   >> FLASH
        .constdata      :   >> FLASH
        .rodata         :   >> FLASH
        .cinit          :   >  FLASH
        .pinit          :   >> FLASH
        .init_array     :   >> FLASH
        .emb_text       :   >> FLASH
        .ccfg           :   >  FLASH_LAST_PAGE (HIGH)
    
    	GROUP > SRAM
    	{
    	    .data
    	    .bss
    		.vtable
    	    .vtable_ram
    	     vtable_ram
    	    .sysmem
        	.nonretenvar
    	} LOAD_END(heapStart)
    
    	.stack          :   >  SRAM (HIGH) LOAD_START(heapEnd)
    }
    

    这就是我用多个引用来指示我要做的事情,但.cinit仍会映射到flash_last_page。

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

    如果我在该部分中将所有">>"出现的字符替换为">",也会发生这种情况。

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

    您好,James:

    您是否在使用IAR或CCS进行发展? 我询问是因为cmd文件可能看起来有所不同,这取决于所使用的IDE。 这些差异的示例可在用户指南的3.10 4客户配置部分中找到。 如果您有兴趣禁用引导加载程序, 则CC2538/CC26x0/CC26x2串行引导加载程序接口应用报告 可能会有所帮助。

    此致,

    一月

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

    我正在使用CCS,我要使用bootloader,而不必使用客户配置擦除最后一个闪存扇区。  除非使用已擦除的CCFG可以访问引导加载程序ROM,否则在擦除和重写扇区之间会出现一个窗口,其中的中断可能会阻碍我们产品的UI,这是一种不可接受的风险。

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

    您好,James:

    明白了。 感谢您的澄清。 您应该能够将CCFG标记为受保护。 这是否会实现您所需的功能? 以下E2E线程提供了有关此问题的信息:

    https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/71.8168万/cc2640-code-protection-without-bricking</s>2640

    https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/70.9651万/cc1310-keep-ccfg-data-with-iar</s>1310

    https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/45.748万/how-to-lock-flash-area-in-cc2650</s>2650

    https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/93.7378万/cc2642r-flash-read-protection</s>2642

    如果上述链接不起作用,请告诉我,我将继续与您合作解决此问题。

    此致。

    一月

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

    您好,Jan,

    这些都是指以不同的方式保护/锁定闪存,这些方式都有详细的记录,对我来说非常清楚。  我的问题是,编译器似乎坚持在闪存的最后一个扇区中放置.cinit,这在OTA更新中可能会发生变化。

    按目前的情况,如果不擦除该扇区和CCFG数据,我就无法覆盖该数据。

    我的问题,改写后的,是如何确保CCFG和*仅* CCFG ----绝对没有其他东西----进入该领域?

    我已按上述说明修改了链接程序.cmd文件,但链接程序仍在该扇区中放置.cinit。  为什么? Memory Allocation snip

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

    请注意,当前没有足够的空间用于现有版本...链接应失败...

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

    好的,最后发现了擦除CCFG值将其设置为特定默认值的详细信息,而不是FFh,否则会出现这种情况。

    擦除后,bootloader_enable设置为C5h (9.1 .1.13)

    擦除后,image_valid_conf设置为FFFFFFh (9.1 .1.18)

    这意味着,如果发生重置或电源中断等情况,在重写此扇区之前,将启用引导加载程序,并由于不是零image_valid_conf而加载。

    我的理解是否正确?

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

    以上部分参考在CC2650 TRM中

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

    您好,James:

    我曾谘询过一些同事。 您能否验证对CMD文件的以下修改是否会导致预期行为(仅CCFG在最后一页中)?

     .intvecs        :   >  FLASH_APP_BASE
        .text           :   >> FLASH
        .const          :   >> FLASH
        .constdata      :   >> FLASH
        .rodata         :   >> FLASH
        .cinit          :   >  FLASH
        .pinit          :   >> FLASH
        .init_array     :   >> FLASH
        .emb_text       :   >> FLASH
    
      GROUP > FLASH_LAST_PAGE
      {
          .ccfg
      }

    您对image_valid_conf的理解正确。 以下信息可在TRM中找到

    此致,

    一月

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

    进行上述更改后,.cinit仍将显示在flash_last_page中。

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

    您好,James:

    感谢您验证解决方案是否有用。 您是否有机会参考以下资源?

    TI链接器命令文件入门

    ARM汇编语言工具v 20.2 .0.LTS -特别是链接程序部分。

    我相信这些资源可以提供实施所需行为所需的信息。  

    此致,

    一月