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.

[参考译文] TMS320F2.8377万D:FlashAPI不能与TMS320F2.8377万D上的DCSM一起使用

Guru**** 2537490 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/571353/tms320f28377d-flashapi-doesn-t-work-with-dcsm-on-tms320f28377d

部件号:TMS320F2.8377万D

您好,

我在使用FlashAPI和在TMS320F2.8377万D上激活DCSM对闪存扇区进行编程时遇到问题。 擦除闪存将正常工作。 之后,编程例程正常工作,API没有任何错误,验证例程也正常工作。 但数据仍然是0xFFFF,而不是我的价值。  

禁用DCSM后,所有的功能都像魅力一样工作。

在TMX320F2.8377万D上,整个erase-flash-verify例程使用激活的DCSM运行。 为什么?

FlashAPI从DCSM Z1中的RAM L运行,闪存也在DCSM Z1中运行。 程序例程的Buffer_Data存储在RAM GX中。

DCSM_Z1_ZoneSelectBlock.asm的填写方式如下:

.sect "DCSM_OTP_Z1_linkpointer"
长0x1FFFFFF0 ;Z1-LINKPOINTER1
长0xFFFFFFFF ;保留
长0x1FFFFFF0 ;Z1-LINKPOINTER2
长0xFFFFFFFF ;保留
长0x1FFFFFF0 ;Z1-LINKPOINTER3
长0xFFFFFFFF ;保留

.sect "DCSM_Zsel_Z1"
长0xFFFFFFFF ;Z1-EXEONLYRAM
长0xFFFFFFFF ;Z1-EXEONLYSECT
长0x5555.5555万 ;Z1-GRABRAM
长0x5555.5555万 ;Z1-GRABECT

长0x1234.5678万 ;Z1-CSMPSWD0 (128位密码的LSW)
长0x1234.5678万 ;Z1-CSMPSWD1
长0x1234.5678万 ;Z1-CSMPSWD2
长0x1234.5678万 ;Z1-CSMPSWD3 (128位密码的MSW) 

我错过了什么?

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

    调用API函数进行编程/验证时,您没有得到错误状态? 如果未对闪存进行编程,则验证肯定会失败。

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

    您好,Vivek,

    使用FlashAPI验证时,我将收到错误。 但为了节省大量固件更新时间,我会通过CRC进行验证,当然这也不正确。  

    我的问题是,为什么程序例程不将我的值写入闪存,为什么API没有错误。

    CPU_1.Status.Process.Fapi_Status = Fapi_issueProgrammingCommand (UINT32 *)(CPU_1.Status.Process.Actual_Flash_Address +(UINT32) firmware_start_address),
    						(UINT16 *) l_Buffer,8,0,0, FAPI_AutoEccpGeneration );
    
    While ( FAPI_checkFsmForReady ()== FAPI_Status_FsmBusy )
    	;
    
    //如果
    ( CPU_1.Status.Process.FAPI_Status != FAPI_Status_Success ){
    
    	CPU_1.Status.Process.State =90; CPU_1.Status.Error.Error_RETURN
    	=程序错误
    	
    

    在2.8377万D的TMX变体上,它可以正常工作。

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

    Oliver

    闪存编程命令检查是否  

    (i)应用程序使用的数据/ECC缓冲区大小是否符合128位对齐要求

    (ii)数据缓冲区大小与ECC缓冲区大小是否同步

    如果未满足上述要求,则会发出相应的错误。  如果以上是正确的,则program命令只发出该命令并返回。  它不会等到程序操作结束后才知道程序操作的状态。  这就是为什么您添加了代码以等待FSM完成程序操作(Fapi_checkFsmForReady)。

    FSM完成程序操作后,需要通过读取fmstat寄存器来检查程序操作的状态。  您可以使用 Fapi_getFsmStatus()函数进行此操作。  请尝试使用此参数并检查fmstat寄存器的值。  有关fmstat寄存器的详细信息,请参阅  http://www.ti.com/lit/ug/spnu595/spnu595.pdf上的3.2 1 Fapi_getFsmStatus()一节中有关此函数的说明

    谢谢,此致,
    Vamsi

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

    您是否了解了应用程序失败的原因?

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

    您好,Vamsi:

    我必须将重点放在另一个项目上,并将很快检查您的提示。 我会尽快回复:-)

    此致

    Oliver

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

    Oliver

    我现在要结束这个话题。  您可以在处理此问题时重新打开它。

    谢谢,此致,
    Vamsi

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

    您好Vamsi:

    现在我回到了与激活的DCSM相比,闪存编程的问题。 fmstat寄存器设置了以下标志:

    位12-PVG- 程序验证(设置时),表示在为程序运行提供允许的最大程序脉冲数后,某个字词未成功编程

    位4— Cstat— 命令状态。 FSM启动后,任何故障都将设置此位。 设置后,此位通知主机程序,擦除或验证扇区命令失败,并且命令已停止。  此位可通过清除状态命令清除。 对于某些错误,这将是FSM错误的唯一指示,因为原因不属于其他错误位类型。

    第4位是由于第12位而设置的。 但为什么在DSP的TMS变体上设置位12而不在TMX变体上设置?

    当我从已擦除的闪存地址读取值时,它显示“0x0000”而不是“0xFFFF”。 我认为锁定的DCSM封锁是真正的价值。 但为什么这对TMX变体有效?

    我的GABSECT或GRABRAM是否有问题?  

    FlashAPI从RAM L运行,程序例程的Buffer_Data存储在RAM GX中。 全部应设置为DCSM_Z1。

    此致,

    Oliver

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

    Oliver,您好!

    请确保您正在正确设置闪存信号。

    有关类似问题,请参阅以下帖子-

    此致,

    Vivek Singh

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

    您好,Vivek,

    就是这样!

    DcsmCommonRegs.FLSEM.ALL = 0xA501;//闪存信号DCSM Z1

    此行解决了问题。 非常感谢Vivek和Vamsi的大力支持。

    此致,

    Oliver

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