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.

TMS320F2812: DSP加密以后SRAML0L1无法访问

Part Number: TMS320F2812

TI 工程师:

         当前做公司项目遇到一个问题,为了给公司产品增加保密性,试图用TI 产品的加密模块进行加密。但当前既有程序比较大,ebss未初始化部分必须占用SRAML0L1区域,单纯靠SRAM H0 和SRAM M0M1不能满足程序运行需求。于是就有矛盾:一旦使用加密功能,未初始化的ebss所在的0X8000 0X9000区域就无法正常运行。

         查看手册看到SRAML0L1属于密码保护区,加密无法访问,如果这种情况由什么好的解决方案么?

2812内存分配如下

当下的cmd文件如下:

MEMORY
{
PAGE 0 :
   RAMM0    : origin = 0x000000, length = 0x000400
   RAML1    : origin = 0x009000, length = 0x001000   
   CRC      : origin = 0x3F0000, length = 0x000001
   FLASH    : origin = 0x3F0001, length = 0x007F7F

   CSM_RSVD    : origin = 0x3F7F80, length = 0x000076
   BEGIN_FLASH : origin = 0x3F7FF6, length = 0x000002
   CSM_PWL     : origin = 0x3F7FF8, length = 0x000008

   //BEGIN_H0  : origin = 0x3F8000, length = 0x000002
   RAMH0     : origin = 0x3F8000, length = 0x002000 /*2b00*/
   BOOTROM   : origin = 0x3FF000, length = 0x000FC0
   RESET     : origin = 0x3FFFC0, length = 0x000002
         
PAGE 1 :
   RAMM1    : origin = 0x000400,   length = 0x000480
   RAML0    : origin = 0x008000,   length = 0x001000
}
 
 
SECTIONS
{
/* CSM Password Locations */
   passwords         : > CSM_PWL,   PAGE = 0
   csm_rsvd          : > CSM_RSVD,    PAGE = 0


   codestart_rom    : > BEGIN_FLASH, PAGE = 0
  .romtext         : > FLASH,      PAGE = 0

 /* DSECT  */
	.reset           : > RESET,      PAGE = 0, TYPE = DSECT
	//vectors         : > VECTORS     	PAGE = 0, TYPE = DSECT

/*** Uninitialized Sections ***/
    /* Allocate data areas: */
   .stack           : > RAMM1,       PAGE = 1
   //.ebss           :  > RAMM1|RAML0,     PAGE = 1
   .ebss1           : {
                        .\selftest\post.obj (.ebss)
                        .\error\error.obj (.ebss)
                      } > RAMM1,     PAGE = 1
   .ebss2           : {
                        ebss_start = .;
                        *(.ebss)
                        ebss_end = .;
                      } > RAML0,       PAGE = 1

   .sysmem          : > RAML0,       PAGE = 1

/*** Initialized Sections ***/
   .cinit           : > FLASH,       PAGE = 0
   .switch          : > FLASH,      PAGE = 0

	/*.econst         : {* (.econst)}
					  LOAD = FLASH, PAGE = 0
                      RUN  = RAML0,  PAGE = 1
                      RUN_START(_econst_run_start),
                      LOAD_START(_econst_load_start),
                      LOAD_END(_econst_load_end)*/

   .econst1         : {
                         .\selftest\crc16.obj (.econst)
                      } > FLASH,    PAGE = 0

   .econst2         : {* (.econst)}
   					  LOAD = FLASH, PAGE = 0
                      RUN = RAML0,  PAGE = 1
                      RUN_START(_econst_run_start),
                      LOAD_START(_econst_load_start),
                      LOAD_END(_econst_load_end)

   /*.text           : {*(.text)}
					  LOAD = FLASH, PAGE = 0
                      RUN = RAMH0,  PAGE = 0
                      RUN_START(_text_h0_run_start),
                      LOAD_START(_text_h0_load_start),
                      LOAD_END(_text_h0_load_end)*/

   .text1           : {
                         .\app\rfapp.obj (.text)
                         .\error\error.obj (.text)
                         .\selftest\post.obj (.text)
                         .\selftest\background.obj (.text)
                         .\selftest\crc16.obj (.text)
                         .\driver\eeprom_drv.obj (.text)
                         .\param\param.obj (.text)
                      } > FLASH, PAGE = 0

   .text2           : {
                        .\control\control.obj (.text)
                      } LOAD = FLASH, PAGE = 0
                      RUN = RAML1,  PAGE = 0
                      RUN_START(_text_l1_run_start),
                      LOAD_START(_text_l1_load_start),
                      LOAD_END(_text_l1_load_end)

   .text3           : {*(.text)}
                      LOAD = FLASH, PAGE = 0
                      RUN = RAMH0,  PAGE = 0
                      RUN_START(_text_h0_run_start),
                      LOAD_START(_text_h0_load_start),
                      LOAD_END(_text_h0_load_end)

    .CRC_keep        : > CRC, PAGE = 0

   IQmath           : LOAD = FLASH, PAGE = 0
                      RUN = RAMM0,  PAGE = 0
                      RUN_START(_iqmath_run_start),
                      LOAD_START(_iqmath_load_start),
                      LOAD_END(_iqmath_load_end)

   IQmathTables     : LOAD = BOOTROM, PAGE = 0, TYPE=NOLOAD
}

map文件如下

MEMORY CONFIGURATION

         name            origin    length      used     unused   attr    fill
----------------------  --------  ---------  --------  --------  ----  --------
PAGE 0:
  RAMM0                 00000000   00000400  00000000  00000400  RWIX
  RAML1                 00009000   00001000  00000b0d  000004f3  RWIX
  CRC                   003f0000   00000001  00000001  00000000  RWIX
  FLASH                 003f0001   00007f7f  00002f52  0000502d  RWIX
  CSM_RSVD              003f7f80   00000076  00000076  00000000  RWIX
  BEGIN_FLASH           003f7ff6   00000002  00000002  00000000  RWIX
  CSM_PWL               003f7ff8   00000008  00000008  00000000  RWIX
  RAMH0                 003f8000   00002000  0000192d  000006d3  RWIX
  BOOTROM               003ff000   00000fc0  00000000  00000fc0  RWIX
  RESET                 003fffc0   00000002  00000000  00000002  RWIX

PAGE 1:
  RAMM1                 00000400   00000480  00000386  000000fa  RWIX
  DEV_EMU               00000880   00000180  000000d6  000000aa  RWIX
  FLASH_REGS            00000a80   00000060  00000000  00000060  RWIX
  CSM                   00000ae0   00000010  00000000  00000010  RWIX
  XINTF                 00000b20   00000020  00000000  00000020  RWIX
  CPU_TIMER0            00000c00   00000008  00000008  00000000  RWIX
  CPU_TIMER1            00000c08   00000008  00000000  00000008  RWIX
  CPU_TIMER2            00000c10   00000008  00000000  00000008  RWIX
  PIE_CTRL              00000ce0   00000020  0000001a  00000006  RWIX
  PIE_VECT              00000d00   00000100  00000100  00000000  RWIX
  ECANA                 00006000   00000040  00000000  00000040  RWIX
  ECANA_LAM             00006040   00000040  00000000  00000040  RWIX
  ECANA_MOTS            00006080   00000040  00000000  00000040  RWIX
  ECANA_MOTO            000060c0   00000040  00000000  00000040  RWIX
  ECANA_MBOX            00006100   00000100  00000000  00000100  RWIX
  SYSTEM                00007010   00000020  00000020  00000000  RWIX
  SPIA                  00007040   00000010  00000010  00000000  RWIX
  SCIA                  00007050   00000010  00000010  00000000  RWIX
  XINTRUPT              00007070   00000010  00000000  00000010  RWIX
  GPIOMUX               000070c0   00000020  00000020  00000000  RWIX
  GPIODAT               000070e0   00000020  00000020  00000000  RWIX
  ADC                   00007100   00000020  0000001a  00000006  RWIX
  EVA                   00007400   00000040  00000032  0000000e  RWIX
  EVB                   00007500   00000040  00000000  00000040  RWIX
  SCIB                  00007750   00000010  00000000  00000010  RWIX
  MCBSPA                00007800   00000040  00000025  0000001b  RWIX
  RAML0                 00008000   00001000  00000cdd  00000323  RWIX

  • 你好,确实如果要加密的话M0 M1部分的SARAM无法访问加密flash,然而目前我也想不出什么好的建议。

    不知道你的代码占有多大内存?,能否用代码优化来减少一点ram中的代码量?