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.

[参考译文] TMS320F28374D:从闪存中存储的程序创建校验和。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1266265/tms320f28374d-creating-a-checksum-from-the-program-stored-in-the-flash-memory

器件型号:TMS320F28374D
主题中讨论的其他器件:C2000WARE

您好!

我一直在尝试使用为加载到闪存中的程序保留的地址创建校验和。 程序的位置位于以下寄存器中、具有以下长度:

FLASHB:origin = 0x082000,length = 0x002000 /*片上闪存*/
FLASHC:origin = 0x084000,length = 0x002000 /*片上闪存*/
FLASHD:origin = 0x086000,length = 0x002000 /*片上闪存*/
FLASHE:origin = 0x088000,length = 0x008000 /*片上闪存*/

然后、我已经尝试使用 C2000Ware 中提供的闪存 API、代码如下:

UINT32 Flash1Start = 0x20000008;
UINT32 Flash2Start = 0x40000008;
UINT32 Flash3Start = 0x60000008;
UINT32 Flash4Start = 0x80000008;

UINT16 FlashLength = 0x002000;
UINT16 FlashLength2 = 0x008000;

Fapi_initializeAPI (F021_CPU0_BASE_ADDRESS、200);
while (Fapi_checkFsmForReady()!= Fapi_Status_Fsm {}
G_structMeterData.Chksum_1 = Fapi_calculateFletcherChecksum (&Flash1Start、FlashLength);
G_structMeterData.Chksum_2 = Fapi_calculateFletcherChecksum (&Flash2Start、FlashLength);
G_structMeterData.Chksum_3 = Fapi_calculateFletcherChecksum (&Flash3Start、FlashLength);
G_structMeterData.Chksum_4 = Fapi_calculateFletcherChecksum (&Flash4Start、FlashLength2);

但我注意到 Fapi_calculateFletcherChecksum 有两个输入都是 uint16。 我假设这意味着它将我的32位地址转换为16位、因为当我对 main.c 进行更改时、它不会被视为校验和的更改。

考虑到这一点、我进入了 Fapu_calculateFletcherChecksum 函数、并将第一个输入更改为接受 Uint32... 在进行此更改之后、 g_structMeterData.Chksum_1 g_structMeterData.Chksum_2 g_structMeterData.Chksum_3 都是静态的、但每次使用调试器加载代码时、 g_structMeterData.Chksum_4都具有不同的值。

我的方向是否正确?或者我应该选择哪条不同的路线?

谢谢!

伊坦

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

    作为一项修改,我最初尝试  
    UINT32 Flash1Start = 0x082000;
    UINT32 Flash2Start = 0x084000;
    UINT32 Flash3Start = 0x086000;
    UINT32 Flash4Start = 0x088000;

    但我想、闪存 API 可能将 Flash1Start 解释为小端字节序、而将 Flash1Start 写入大端字节序。

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

    尊敬的 Ethan:

    用于进一步分析的简短问题: 您计划如何存储/使用闪存 API 计算出的此校验和?  您是否希望将其存储在某个专用闪存位置、并将周期性运行时校验和与该保存的校验和进行交叉校验和检查?   

    谢谢。此致、

    瓦姆西  

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

    尊敬的 Vamsi:

    校验和将在启动期间保存、并向合规机构显示、以证明我们的代码在通过资格认证后已被锁定。 如果是审计、他们会将此数字与我们提交器件以符合要求时提供的数字进行比较。

    谢谢!

    伊坦

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

    Ethan:

    好的。  当您说"校验和将 被保存"-会保存在此器件的闪存中吗?  

    谢谢。此致、

    瓦姆西

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

    我不确定。 我认为不必将其保存到器件的闪存中。

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

    尊敬的 Ethan:

    好的、我们将在下周早些时候再次与您讨论。

    谢谢。此致、
    瓦姆西

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

    尊敬的 Ethan:

    很抱歉耽误你的时间;我今天又回到了办公室。  我会在一两天内查看并回复您。

    谢谢。此致、

    瓦姆西

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

    尊敬的 Ethan:

    您会注意到、此函数的第一个参数是指针、可以保存32位闪存地址(例如:0x82000)。

    您可以按原样分配闪存地址(例如:0x82000)。

    谢谢。此致、

    瓦姆西