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.

[参考译文] TMS320F28377D:C2000Ware 串行闪存编程器 FMSTAT 错误、DCSM 保留存储器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1316859/tms320f28377d-c2000ware-serial-flash-programmer-fmstat-error-with-dcsm-reserved-memory

器件型号:TMS320F28377D
主题中讨论的其他器件:UNIFLASHC2000WARE

您好!

我正在使用 C2000 Ware 串行闪存编程器实用程序来下载.hex 文件。

以下是我的链接器文件:

内存
{
第0页:/*程序存储器*/

/* Z1 OTP。 LinkPinters */
DCSM_OTP_Z1_LINKPOINTER:origin = 0x78000、length = 0x000020
// DCSM_OTP_Z1_LINKPOINTER:origin = 0x78000、length = 0x000030
/* Z1 OTP。 PSWDLOCK/保留*/
// DCSM_OTP_Z1_PSWDLOCK:origin = 0x78010、length = 0x000004
/* Z1 OTP。 CRCLOCK/保留*/
// DCSM_OTP_Z1_CRCLOCK:origin = 0x78014、length = 0x000004
/* Z1 OTP。 保留/BOOTCTRL */
// dcsm_otp_z1_align18:origin = 0x78018、length = 0x000008
// DCSM_OTP_Z1_BOOTCTRL:origin = 0x7801C、length = 0x000004

/* DCSM Z1区域选择内容(!!可移动!!) */
/* Z1 OTP。 Z1密码位置/闪存和 RAM 分区*/
DCSM_ZSEL_Z1_P0:origin = 0x78020、length = 0x000010
DCSM_ZSEL_Z1_P1:origin = 0x78030、length = 0x000010
DCSM_ZSEL_Z1_P2:origin = 0x78040、length = 0x000010

DCSM_ZSEL_Z1_P3:origin = 0x78050、length = 0x000010
DCSM_ZSEL_Z1_P4:origin = 0x78060、length = 0x000010
DCSM_ZSEL_Z1_P5:origin = 0x78070、length = 0x000010
DCSM_ZSEL_Z1_P6:origin = 0x78080、length = 0x000010
DCSM_ZSEL_Z1_P7:origin = 0x78090、length = 0x000010
DCSM_ZSEL_Z1_P8:origin = 0x780A0、length = 0x000010
DCSM_ZSEL_Z1_P9:origin = 0x780B0、length = 0x000010
DCSM_ZSEL_Z1_P10:origin = 0x780C0、length = 0x000010
/* Z2 OTP。 LinkPinters */
DCSM_OTP_Z2_LINKPOINTER:origin = 0x78200、length = 0x00000C
/* Z2 OTP。 GPREG1/GPREG2 */
// DCSM_OTP_Z2_GPREG:origin = 0x7820C,length = 0x000004
/* Z2 OTP。 PSWDLOCK/保留*/
// DCSM_OTP_Z2_PSWDLOCK:origin = 0x78210、length = 0x000004
/* Z2 OTP。 CRCLOCK/保留*/
// DCSM_OTP_Z2_CRCLOCK:origin = 0x78214、length = 0x000004
/* Z2 OTP。 GPREG3/BOOTCTRL */
// DCSM_OTP_Z2_BOOTCTRL:origin = 0x7821C、length = 0x000004

/* DCSM Z1区域选择内容(!!可移动!!) */
/* Z2 OTP。 Z2密码位置/闪存和 RAM 分区*/
DCSM_ZSEL_Z2_P0:origin = 0x78220、length = 0x000010

部分
{
dcsm_otp_z1_linkpointer:> dcsm_otp_z1_LINKPOINTER page = 0//、type = DSECT
/* dcsm_otp_z1_pswdlock:> dcsm_otp_z1_PSWDLOCK page = 0//,type = DSECT
dcsm_otp_z1_crclock:> dcsm_otp_z1_crclcock page = 0//、type = DSECT
*/

// dcsm_otp_z1_bootctrl:> dcsm_otp_z1_BOOTCTRL page = 0//,type = DSECT

// dcsm_zsel_z1_78018 :> dcsm_otp_z1_align18
dcsm_zsel_z1:> dcsm_ZSEL_Z1_P0 page = 0//、type = DSECT
// dcsm_zsel_z1:> dcsm_ZSEL_Z1_p1 page = 0//、type = DSECT

DCSM_OTP_Z2_linkpointer:> DCSM_OTP_Z2_LINKPOINTER page = 0、type = DSECT
/* dcsm_otp_z2_pswdlock:> dcsm_otp_z2_PSWDLOCK page = 0、type = DSECT
DCSM_OTP_Z2_crclock:> DCSM_OTP_Z2_CRCLOCK page = 0、type = DSECT
DCSM_OTP_Z2_bootctrl:> DCSM_OTP_Z2_BOOTCTRL page = 0、type = DSECT
dcsm_zsel_z2:> dcsm_ZSEL_Z2_P0 page = 0、type = DSECT
*/

以下是我的 DCSM Zone1设置:

.sect "dcsm_otp_z1_linkpointer"
.retain
;.long 0x1FFFFE00;Z1-LINKPOINTER1,当 DCSM_zsel_Z1为 DCSM_ZSEL_Z1_P9时
当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER1
;.long 0x1FFFFFFE;Z1-LINKPOINTER1、当 DCSM_zsel_Z1为 DCSM_ZSEL_Z1_P1时
.long 0xFFFFFFFF;保留
;.long 0x1FFFFE00;Z1-LINKPOINTER2,当 DCSM_zsel_Z1为 DCSM_ZSEL_Z1_P9时
当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER2
;.long 0x1FFFFFFE;Z1-LINKPOINTER1、当 DCSM_zsel_Z1为 DCSM_ZSEL_Z1_P1时
.long 0xFFFFFFFF;保留
;.long 0x1FFFFE00;Z1-LINKPOINTER3,当 DCSM_zsel_Z1为 DCSM_ZSEL_Z1_P9时
当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER3
;.long 0x1FFFFFFE;Z1-LINKPOINTER1、当 DCSM_zsel_Z1为 DCSM_ZSEL_Z1_P1时
.long 0xFFFFFFFF;保留

;保留0x...0C-0F
.long 0xFFFFFFFF;保留
.long 0xFFFFFFFF;保留

;.sect "Dcsm_otp_z1_pswdlock"、0x...10
.long 0xFFFFFF00;Z1-PSWDLOCK
.long 0xFFFFFFFF;保留

;.sect "Dcsm_otp_z1_crclock"、0x...14
.long 0x0F0FFFFF;Z1-CRCLOCK、不是所有 FS
.long 0xFFFFFFFF;保留

;.sect "Dcsm_zsel_Z1_78018"
.long 0xFFFFFFFF;保留
.long 0xFFFFFFFF;保留、0x...1A-1B
;.sect "Dcsm_otp_Z1_bootctrl"
.long 0xFFFFFFFF;保留、0x...1C-1D
.long 0x00000B5A;Z1-BOOTCTRL、0x... 1E

使用 uniflash 对 DSP 进行编程不存在问题。

但使用"serial_flash_programmer"时失败。 这是地址0x78018的错误。

请建议:

此致、

莉莉

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

    尊敬的 Lily:

    您从哪个版本的 C2000Ware 遇到此错误?  

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    C2000版本为 C2000Ware_5_01_00_00。

    谢谢!

    此致、

    莉莉

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

    尊敬的 Lily:

    对于  闪存工具检测到的以下地址范围(0x78018 ~ 0x7801B)、它不会进行编程而是发出错误、从而导致故障。  
    您能否尝试重新编译项目并避免在 hex 文件中出现这些位置?

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    是的、我同意您的看法、我需要避免使用地址 (0x78018 ~ 0x7801B)、但我不知道如何实现(我已在第一篇文章中包含了链接器和指针文件)。 请告知。

    此致、

    莉莉

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

    尊敬的 Lily:

    我看到位置被注释掉了、是否为项目构建中的这些特定位置部分分配了任何内容?

    完全删除 上述位置段的.sect 并重新编译 项目。 如果此操作更改了下载内容、请告诉我。  

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    段位置未注释掉、Zone1 DCSM 指针和 bootctrl 在本文中定义。

    以下是删除了所有注释的代码。

    .sect "dcsm_otp_z1_linkpointer"
    .retain
    当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER1
    .long 0xFFFFFFFF;保留

    当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER2
    .long 0xFFFFFFFF;保留

    当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER3
    .long 0xFFFFFFFF;保留


    .long 0xFFFFFFFF;保留
    .long 0xFFFFFFFF;保留


    .long 0xFFFFFF00;Z1-PSWDLOCK
    .long 0xFFFFFFFF;保留


    .long 0x0F0FFFFF;Z1-CRCLOCK、不是所有 FS
    .long 0xFFFFFFFF;保留


    .long 0xFFFFFFFF;保留
    .long 0xFFFFFFFF;保留、0x...1A-1B


    .long 0xFFFFFFFF;保留、0x...1C-1D
    .long 0x00000B5A;Z1-BOOTCTRL、0x... 1E

    谢谢。

    莉莉

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

    尊敬的 Lily:

    是的、进行上述更改以及使用主机编程器进行编程的结果是什么?

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    结果如下:

    此致、

    莉莉

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

    尊敬的 Charles:

    我只想知道如何保持数据缓冲区长度为128位、并避免使用地址 (0x78018 ~ 0x7801B)。

    此致、

    莉莉

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

    尊敬的 Lily:

    将数据缓冲区长度保持在128位对齐方式的一种方法是在链接器 cmd 文件的 SECTIONS 中使用 ALIGN (8)指令。 闪烁示例项目(闪存配置)中提供了这方面的一个示例:

    另一个可能提供帮助的选项是以下链接、它共享有关为 hex2000实用程序设置--boot_block_size 选项的详细信息。  

    (1) TMS320F28388S:使用串行编程器尝试刷写时出现 program_error - C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    是的、我同意您的观点、我已经实现了 - boot_block_size 选项和 align (8)、 但这些用于闪存、而不是 DCSM OTP 区域。

    请告知如何 避免 以下部分中的地址(0x78018 ~ 0x7801B):

    sect "dcsm_otp_z1_linkpointer"
    .retain
    当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER1
    .long 0xFFFFFFFF;保留

    当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER2
    .long 0xFFFFFFFF;保留

    当 dcsm_zsel_z1为 dcsm_ZSEL_Z1_P0时、.long 0x1FFFFFFF;Z1-LINKPOINTER3
    .long 0xFFFFFFFF;保留


    .long 0xFFFFFFFF;保留
    .long 0xFFFFFFFF;保留


    .long 0xFFFFFF00;Z1-PSWDLOCK
    .long 0xFFFFFFFF;保留


    .long 0x0F0FFFFF;Z1-CRCLOCK、不是所有 FS
    .long 0xFFFFFFFF;保留


    .long 0xFFFFFFFF;保留
    .long 0xFFFFFFFF;保留、0x...1A-1B


    .long 0xFFFFFFFF;保留、0x...1C-1D
    .long 0x00000B5A;Z1-BOOTCTRL、0x... 1E

    此致、

    莉莉

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

    尊敬的 Lily:

    我需要与我的团队一起审查此问题、并在星期一之前与您联系。

    谢谢。此致、

    查尔斯

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

    尊敬的 Charles:

    有更新吗?

    此致、

    莉莉

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

    尊敬的 Lily:

    很抱歉有任何混淆。

    "你看,我看你的样子。"  当前闪存 API 阻止 JTAGLOCK 位置的编程操作。  此外、SCI 闪存内核一次对128位进行编程-在您的情况下、对齐的128位是地址范围0x78018至0x7801F。  闪存 API 当它看到地址0x78018时、由于它是 JTAGLOCK 位置、所以它只是错误输出。  这就是您所观察到的情况。  如果闪存内核能够对64位进行编程、则不会发生此问题。  但是、正如我说过的、闪存内核一次编程128位。   

    有两种方法可以解决此问题:

    1) 1)修改闪存内核、以便在看到地址0x7801C 至0x7801F 时能够对64位进行编程。

    2) 2)我们必须发布允许对 JTAGLOCK 位置进行编程的闪存 API。  不管怎样,我们最近决定允许用户对 JTAGLOCK 位置进行编程。   在这个情况下、由于您不想将其激活、您只需将所有0xFFFFFFFF 数据映射到 JTAGLOCK 位置。  我们计划在3月发布这个新的闪存 API。   

    直到您可以等待该消息?  如果情况紧急、我们可以尝试在一两周内为您提供测试版。  当我们在3月发布下一个 C2000ware 时、您可以转到最终版本。

    请联系我们。

    谢谢。此致、

    瓦姆西

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

    谢谢 Vamsi!

    我更喜欢第一个修复(修改闪存内核、以便在它看到地址0x7801C 至0x7801F 时能够对64位进行编程)。  

    我们将等待三月发布下一个 C2000ware。

    此致、

    莉莉