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.

[参考译文] TMS320F28.0037万C:DCSM 및 闪存 영역 读/写 관련 질문

Guru**** 2529900 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1084725/tms320f280037c-dcsm-flash-read-write

部件号:TMS320F28.0037万C

您好!! 香榭丽舍大街

我的程序中有一个部分写入和擦除闪存(0x8.3万)区域中的数据。

如果按如下所示设置DCSM,

在写入闪存数据和从闪存中删除数据时发生错误。

在这方面,问题如下:

1.设置DCSM后,是否无法在闪存区域中读取/写入?

1-1。 如果不可能,是否有解决方法?

请回答。

我们始终感谢您的帮助。

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

    您好,

    当您通过将任何闪存扇区分配给某个区域来保护它时,不能对这些安全闪存扇区执行编程和擦除操作,除非-

    1. 使用密码匹配流解锁区域
    2. 程序/擦除代码正在从分配给与安全闪存扇区相同区域的安全RAM中运行。

    希望这一点是明确的。

    您也可以参阅 此应用手册 ,其中提供了有关类似主题的详细信息。

    此致,

    Vivek Singh

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

    感谢您的回答。

    "程序/擦除代码正在从分配给与安全闪存扇区相同区域的安全RAM中运行。"

    对于以上内容,如果所有闪存/RAM分配给区域1,编程/擦除是否工作?

    此致。

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

    是的,可以。

    此致,

    Vivek Singh

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

    感谢您的回答

    所有闪存扇区/RAM都分配给Zone2。

    CMD文件位于BSS,数据,系统和const的RAMGS中。

    文本分配给RAMLS。

    也许我对CMD文件中的设置做了一些错误?

    我设置的CMD文件如下所示。

    MEMORY
    {
       BEGIN           	: origin = 0x00080000, length = 0x00000002
       BOOT_RSVD		: origin = 0x00000002, length = 0x00000126
    
       BOOTROM          : origin = 0x003F8000, length = 0x00007FC0
       SECURE_ROM       : origin = 0x003F2000, length = 0x00006000
    
       RESET            : origin = 0x003FFFC0, length = 0x00000002
    
       RAMM0          	  : origin = 0x00000128, length = 0x000002D8	/* stack */
       RAMM1        	  : origin = 0x00000400, length = 0x00000380	/* on-chip RAM block M1 */
       BOOT_RSVD_SYSBIOS  : origin = 0x00000780, length = 0x00000080
      
       RAMLS0_1         : origin = 0x00008000, length = 0x00001000	  
       RAMLS2_7         : origin = 0x00009000, length = 0x00003000    
    
       RAMGS0_2         : origin = 0x0000C000, length = 0x00003000    
       RAMGS3           : origin = 0x0000F000, length = 0x00001000
    
       /* Flash sectors */
       /* BANK 0 */
       FLASHB0_BOOTLOADER_VER : origin = 0x080010, length = 0x000040  /* BANK0 on-chip Flash sector0 */
       FLASHB0_BOOTLOADER     : origin = 0x080050, length = 0x002EA0  /* BANK0 on-chip Flash sector0~2 */
       FLASHB0_APP_RESET_VEC  : origin = 0x083010, length = 0x000008  /* BANK0 on-chip Flash sector3 */
       FLASHB0_APP_SIGN       : origin = 0x083018, length = 0x000008  /* BANK0 on-chip Flash sector3 */
       FLASHB0_APP_VER        : origin = 0x083020, length = 0x000050  /* BANK0 on-chip Flash sector3 */
       FLASHB0_APP            : origin = 0x083070, length = 0x00AF90  /* BANK0 on-chip Flash sector3~13 */
       FLASHB0_APP_MTR_DATA   : origin = 0x08E000, length = 0x001000  /* BANK0 on-chip Flash sector14 */
       FLASHB0_APP_EEP_DATA   : origin = 0x08F000, length = 0x001000  /* BANK0 on-chip Flash sector15 */
    
    
       /* BANK 1 */
       FLASH_BANK1_SEC0  : origin = 0x090000, length = 0x001000
       FLASH_BANK1_SEC1  : origin = 0x091000, length = 0x001000
       FLASH_BANK1_SEC2  : origin = 0x092000, length = 0x001000
       FLASH_BANK1_SEC3  : origin = 0x093000, length = 0x001000
       FLASH_BANK1_SEC4  : origin = 0x094000, length = 0x001000
       FLASH_BANK1_SEC5  : origin = 0x095000, length = 0x001000
       FLASH_BANK1_SEC6  : origin = 0x096000, length = 0x001000
       FLASH_BANK1_SEC7  : origin = 0x097000, length = 0x001000
       FLASH_BANK1_SEC8  : origin = 0x098000, length = 0x001000
       FLASH_BANK1_SEC9  : origin = 0x099000, length = 0x001000
       FLASH_BANK1_SEC10 : origin = 0x09A000, length = 0x001000
       FLASH_BANK1_SEC11 : origin = 0x09B000, length = 0x001000
       FLASH_BANK1_SEC12 : origin = 0x09C000, length = 0x001000
       FLASH_BANK1_SEC13 : origin = 0x09D000, length = 0x001000
       FLASH_BANK1_SEC14 : origin = 0x09E000, length = 0x001000
       FLASH_BANK1_SEC15 : origin = 0x09F000, length = 0x001000
    }
    
    
    SECTIONS
    {
       codestart        : > BEGIN, ALIGN(8)
       .text            : > FLASHB0_BOOTLOADER,  ALIGN(8)
       .cinit           : > FLASHB0_BOOTLOADER,  ALIGN(8)
       .switch          : > FLASHB0_BOOTLOADER,  ALIGN(8)
       .reset           : > RESET,                  TYPE = DSECT /* not used, */
    
       .stack           : > RAMM0
    
       .init_array      : > FLASHB0_BOOTLOADER,  ALIGN(8)
       .bss             : > RAMGS0_2
       .bss:output      : > RAMGS0_2
       .bss:cio         : > RAMGS0_2
       .data            : > RAMGS0_2
       .sysmem          : > RAMGS0_2
       .const           : > FLASHB0_BOOTLOADER,  ALIGN(8)
    
       app_version 		: > FLASHB0_APP_VER
       app_sign 		: > FLASHB0_APP_SIGN
       boot_version     : > FLASHB0_BOOTLOADER_VER
       est_data			: > RAMGS0_2
    
       /*  Allocate IQ math areas: */
       IQmath           : > FLASHB0_BOOTLOADER,  ALIGN(8)
       IQmathTables     : > FLASHB0_BOOTLOADER,	 ALIGN(8)
    
       GROUP
       {
           .TI.ramfunc
           { -l FAPI_F28003x_EABI_v1.58.00.lib}
       } LOAD = FLASHB0_BOOTLOADER
       RUN = RAMLS2_7,
       LOAD_START(RamfuncsLoadStart),
       LOAD_SIZE(RamfuncsLoadSize),
       LOAD_END(RamfuncsLoadEnd),
       RUN_START(RamfuncsRunStart),
       RUN_SIZE(RamfuncsRunSize),
       RUN_END(RamfuncsRunEnd),
       ALIGN(8)
    
    }
    
    SECTIONS
    {
    	user_data 		      : > RAMM1
    	sys_data     	      : > RAMM1
    	ctrl_data		      : > RAMGS0_2
    	foc_data 		      : > RAMGS0_2
    	motor_data		      : > RAMGS0_2
    }
    
    SECTIONS
    {
       datalog_data	          : > RAMGS3
       graph_data		  	  : > RAMGS3
    }
    /*
    //===========================================================================
    // End of file.
    //===========================================================================
    */
    

    我可以检查什么??

    此致。

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

    我不知道你正面临什么问题以及你的业务流程是什么。 您如何对设备进行编程? 请提供更多详细信息,说明您尝试实现的目标以及您面临的问题。

    此致,

    Vivek Singh

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

    关于这一问题的资料不足。
    很抱歉这个。

    面临的问题如下:

    1.您要实施的内容
    -我想防止使用DCSM对闪存/RAM区域进行不必要的访问。
    -我想在使用DCSM设置的应用程序操作期间对闪存区域执行读/写操作。

    2.进展情况
    -以下设置是通过DCSM进行的。
    闪存和RAM都分配给ZONE2。
    Z2_GRABCHECT1R = 0x55.5555万
    Z2_GRABCHECT2R = 0x55.5555万
    Z2_GRABCHECT3R = 0x55.5555万
    Z2_GRABRAM1R = 0x0.5555万

    密码是通过设置CSMKEY设置的。


    -我修改了CMD文件,并按如下所示进行设置。
    将文本分配给RAMLS
    将BSS,数据,系统,const分配给RAMGS

    3.测试结果
    -设置DCSM之前
    在应用程序运行期间,可在闪存区域进行读/写操作。

    -设置DCSM后
    加电复位后,应用程序操作期间,闪存区域中不能读/写。
    如果在调试设置期间模拟和驱动CSMPSWD,则可以进行读/写。
    (GPIO 24低,GPIO 32高,等待模式)



    我想用DCSM设置一个程序来读取/写入闪存区域。
    我查看了您之前发送给我的用户指南。
    说明分配给同一区域的RAM/闪存可以读/写。
    我认为通过将其分配给ZONE2,它将在闪存区域中读/写,
    测试结果没有。
    我不知道我做错了什么,所以我要求智慧。

    此致。

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

    是否可以重新解释我所面临的问题??

    此致

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

    您好,

    在2000在加2000加电108.4725万电重28.0037万重置401.7843万置后401.7843万后的应用程序操作期间,不能在闪存区域中进行读/写。[/quote-use.[/quote

    一旦将安全设置为“开 ”,则可以通过从同一区域运行的代码执行读/写操作。 您需要检查的一件事是,您已正确配置FLSEM寄存器,将SEM位字段值更改为'10',以便Zone2代码可以访问闪存控制寄存器。 如果未完成HIS,则编程将不起作用。

    此致,

    Vivek Singh

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

    此问题已解决。 设置FLSEM后,它将根据需要工作。
    此致