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.

[参考译文] TMS320F280039:DCSM 程序错误

Guru**** 2394305 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1284203/tms320f280039-dcsm-program-error

器件型号:TMS320F280039

您好、

我的客户无法使用该错误进行编程:  

C28xx_CPU1:闪存编程期间出现错误。 地址0x00078028、数据0x0000D008、FMSTAT 0x00001010

C28xx_CPU1:文件加载程序:存储器写入失败:未知错误

C28xx_CPU1:GEL:文件:E:\28003X\H500_280039\HOPE510soft\Debug\Hope500.out:加载失败。

C28xx_CPU1:闪存编程期间出现错误。 地址0x00078004、数据0x0000D000、FMSTAT 0x00000030

C28xx_CPU1:请确保您正在编程的存储器位置尚未进行编程。

以下是其代码:

     .sect "dcsm_otp_z1_linkpointer";//0x78000

     .retain

     .long 0x00003FFF    ;(由 TI 编程)

     .long 0x00003FFF    ;(由 TI 编程)

     .long 0x00003FFF    ;(由 TI 编程)

 

    .sect "dcsm_zsel_z1" ;//0X78020

     .retain

     .long PSWD0            ;Z1OTP_CSMPSWD0 (128位密码的 LSW)

     .long PSWD1            ;Z1OTP_CSMPSWD1

     .long PSWD2            ;Z1OTP_CSMPSWD2

     .long PSWD3            ;Z1OTP_CSMPSWD3 (128位密码的 MSW)

 

     .long 0x55555555    ;Z1OTP_GRABSECT1

     .long 0x555555    ;Z1OTP_GRABSECT2

     .long 0x55555555    ;Z1OTP_GRABSECT3

     .long 0xFFFFFFFF    ;Z1OTP_GRABRAM1

     .long 0xFFFFFFFF    ;保留

     .long 0xFFFFFFFF    ;保留

 

     .long 0xFFFFFFFF    ;Z1OTP_EXEONLYSECT1

     .long 0xFFFFFFFF    ;Z1OTP_EXEONLYSECT2

     .long 0xFFFFFFFF    ;Z1OTP_EXEONLYRAM1

     .long 0xFFFFFFFF    ;保留

     .long 0xFFFFFFFF    ;Z1OTP_JTAGPSWDL0

     .long 0x2bffff;    Z1OTP_JTAGPSWDL1

第二个问题是当他们添加以下代码时:

   .sect "Dcsm_OTP_Z1_JLM_enable";//0x78006

     .retain

     .long 0xFFFF000F       ;(由 TI 编程)

它就可以成功编程。 但是、编程后、它只能使用 XDS100V3正常运行一次。 当它们断开  XDS100V3并重新连接时、它无法运行。  

第三个问题是以下代码是否正确?

   ;//读取密码

    MOVL   XAR1、#0x78020

     MOVL   XAR0、* XAR1

     MOVL   XAR1、#0x78022

     MOVL   XAR0、* XAR1

    MOVL   XAR1、#0x78024

     MOVL   XAR0、* XAR1

    MOVL   XAR1、#0x78026

   MOVL   XAR0、* XAR1

  ;//解锁密码

  EALLOW

  MOVL   XAR0、#PSWD0

  MOVL   XAR1、#0x05F010

  MOVL   *XAR1、XAR0

  MOVL   XAR0、#PSWD1

  MOVL   XAR1、#0x05F012

  MOVL   *XAR1、XAR0

  MOVL   XAR0、#PSWD2

  MOVL   XAR1、#0x05F014

  MOVL   *XAR1、XAR0

  MOVL   XAR0、#PSWD3

  MOVL   XAR1、#0x05F016

  MOVL  *XAR1、XAR0

  EDIS

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

    尊敬的 Angela:

    为了回答您的第一个问题、闪存由闪存 API 编程为64位块。 由于 linkpointer3和 JLM_enable 位于同一个64位块中、因此如果要对两个字段中的任何一个字段进行编程、必须指定要对这两个字段进行编程的值。 如果您未指定 JLM_ENABLE 但已指定 linkpointer3、则 闪存 API 将尝试将 JLM_ENABLE 编程为所有 FS、您将收到闪存编程错误。

    断开 XDS100V3并尝试重新连接之前、器件是否已断电? 您是否可以尝试将器件配置为等待引导模式、而不是引导至闪存? 如果器件从闪存引导、而调试器在程序计数器访问安全代码时尝试连接、则将断开 JTAG 访问。

    测试您在问题3中共享的代码的一种方法是在片上闪存工具中执行 ECSL 解锁。 这样您就可以在此代码片段之前和之后设置断点。 如果您在此代码片段之后设置一个断点、然后尝试读取内存浏览器中的安全资源、例如地址0x78000、并且安全资源在内存浏览器中可见、则这将证明您已成功解锁区域。

    谢谢!

    卢克