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.

[参考译文] UCD3138A:有关擦除 TI 员工发布的校验和代码的问题

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/611720/ucd3138a-qustion-about-erasing-checksum-code-posted-by-ti-staff

器件型号:UCD3138A

尊敬的 TI 员工:

我看到了一种不同的方法来擦除 TI 员工发布的校验和、如下所示。 我不明白为什么不需要考虑使用这些代码从 ARM 到 Thumb 的指令集切换。

受赠方避免此问题的一种方法是将 zero_out_integration_word 的大小从闪存复制到 RAM。
以下是实施此解决方案的步骤:
1.在 cyclone.cmd 文件中、添加如下所示的组段:
部分


…μ A …μ A
union:run = RAM,run_start (_ram_run_start)

.zero_out_integration_word_0:load = pflash、
load_start (_zero_out_integration_word_start)、
LOAD_END (_zero_out_integration_word_end)、
load_size (_zero_out_integration_word_size)

…μ A …μ A

2.在头文件或引用的源文件开头澄清这些符号
extern uint8 zero_out_integration_word_start、zero_out_integration_word_end、zero_out_integration_word_size;
extern UINT8 ram_run_start;

3.使用程序将函数分配到上面定义的段中。
#pragma CODE_SECTION (zero_out_integration_word、".zero_out_integration_word_0")
void zero_out_integration_word (void)


DecRegs.FLASHILOCK.ALL = 0x42DC157E;//将密钥写入编程闪存互锁寄存器
DecRegs.MFBALR1.ALL = MFBALRX_BYTE0_BLOCK_SIZE_32K;//启用程序闪存写入
program_flash_integration_word = 0;
DecRegs.MFBALR1.ALL = MFBALRX_BYTE0_BLOCK_SIZE_32K +//将程序闪存扩展为4倍实际大小
MFBALRX_BYTE0_RONLY;
while (DecRegs.PFLASHCTRL.bit.BUSY!= 0)

;//在进行编程时不执行任何操作

// interrupt_time = TimerRegs.T24CNTTAT.bit.CNT_DAT - interrupt_time;
SysRegs.SYSECR.bit.reset = 2;//现在复位处理器。
返回;


使用 memcpy 函数将代码从闪存复制到 RAM 中、然后直接调用函数。
案例12://清除完整性字。

memcpy ((void *)&ram_run_start、(void *)&zero_out_integration_word_start、(Int32)&zero_out_integration_word_size);
zero_out_integration_word ();
返回;


使用这种方法有多种优势、
-无需考虑从 ARM 到 Thumb 的指令集切换。
-不用担心没有将整个代码或代码本身复制到 RAM 中

期待您的回复

最恰当的考虑

黄达纳

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

    我不确定您提到的是哪个原始帖子。  我们确实有一些代码、在这些代码中我们执行类似的操作、但我们定义了固定的专用段、并使用指定文件的联合体

    看起来您是使用 RAM 中定义的段进行联合的、因此它的大小是可调的、然后您还可以为副本使用可变大小。  我喜欢这种方法、而不是使用 UNION 选择文件、而是使用 UNION 定义段、然后使用 pragma 将函数放入 pragma 中。  您是否已验证这是否适用于多个函数-一次只加载一个函数?  如果这是真的、这将会很有帮助。

    我认为可调尺寸 主要取决于品味。  我定义了固定的 RAM 大小 、以便在事情变大时收到通知。  我担心 RAM 不足。  RAM 的浮动大小在 PC 上非常适合、因为那里有很多空间、但我在像这个小系统上遇到了问题。  

    我不明白为什么您这么说就不必担心从 ARM 模式切换到 Thumb 模式。  在这方面,该准则与我们已经做的完全相同。  

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

    很抱歉、我忘记附上原始邮政地址。 这来自 e2e.ti.com/.../431509 后门
    发表于2016年5月24日的 Jack Tan26
    我没有验证此方法来擦除校验和。 至于 RAM 不足的停止运行、我认为演示代码更可靠。
    非常感谢你的帮助。

    黄达纳