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.

[参考译文] TMS320F280049C:写入 OTP 存储器以在 C 跟随 C 中更改引导模式设置

Guru**** 2576215 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1314402/tms320f280049c-writing-in-otp-memory-to-change-boot-mode-settings-in-c-follow-up

器件型号:TMS320F280049C

您好!

我试图完成与在这篇帖子相同的,没有任何运气:

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1097579/tms320f280049c-writing-in-otp-memory-to-change-boot-mode-settings-in-c

是否有任何步骤超越帖子中的内容?

感谢您提供任何建议!

My Main (我的主菜单)顶部:

//
//包含的文件
//
#包含
#include "driverlib.h"
#include "device.h"
#include "board.h"
#include "math.h"

#pragma DATA_SECTION (OTP_KEY、"OTP_KEY");
#pragma DATA_SECTION (OTP_BMODE、"OTP_BMODE");
#pragma DATA_SECTION (OTP_Boot、"OTP_Boot");
const uint16_t otp_key = 0x5AFF;
const uint16_t OTP_BMODE = 0xFFFF;
const uint16_t OTP_Boot = 0xFF03;
//
//函数原型
//
void initEPWM (void);
void initCLA (void);
uint16_t dutyCalc (uint16_t STEP、uint16_t amp、uint16_t PHASE);
void configBMSPS0 (void);


//全局
uint16_t epwm1_period = 0;
uint32_t FREQUENCY = 0;

//
//主菜单
//
空 main (void)
{

和 My Linker File:

内存
{
第0页:
  /* begin 用于"boot to SARAM"引导加载程序模式  */

  begin           :origin = 0x080000、length = 0x000002
  RAMM0           :origin = 0x0000F6、length = 0x00030A

  RAMLS0          :origin = 0x008000、length = 0x000800
  RAMLS3          :origin = 0x009800、length = 0x000800
  RAMLS4          :origin = 0x00A000、length = 0x000800
  复位           :origin = 0x3FFFC0、length = 0x000002

  OTP_BMODE:origin = 0x07800C、length = 0x00001 /* Add by Me */
  otp_key:origin = 0x07800D,length = 0x00001 /* Add by Me */
  OTP_Boot:origin = 0x07801C、length = 0x000003 /* Add by me */

/*闪存扇区*/
  /*组0 */
  FLASH_BANK0_SEC0 :origin = 0x080002、length = 0x000FFE   /*片上闪存*/
  FLASH_BANK0_SEC1 :origin = 0x081000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_sec2 :origin = 0x082000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC3 :origin = 0x083000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC4 :origin = 0x084000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC5 :origin = 0x085000,length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC6 :origin = 0x086000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_sec7 :origin = 0x087000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC8 :origin = 0x088000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC9 :origin = 0x089000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC10:origin = 0x08A000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC11:origin = 0x08B000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC12:origin = 0x08C000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC13:origin = 0x08D000、length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC14:origin = 0x08E000,length = 0x001000   /*片上闪存*/
  FLASH_BANK0_SEC15:origin = 0x08F000、length = 0x001000   /*片上闪存*/

  /*组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 = 0x000FF0   /*片上闪存*/

//  FLASH_BANK1_SEC15_RSVD:origin = 0x09FFF0,length = 0x000010 /*根据勘误建议"存储器:预取超出有效存储器"保留代码,且不使用此代码*/

第1页:

  BOOT_RSVD      :origin = 0x000002、length = 0x0000F1    /* Part of M0、boot ROM 将此用于堆栈*/
  RAMM1          :origin = 0x000400,length = 0x0003F8    /*片上 RAM 块 M1 */
//  RAMM1_RSVD     :origin = 0x0007F8,length = 0x000008    /*根据 errata Advisory "存储器:在有效存储器之外预取"中保留和不使用代码*/

  RAMLS1          :origin = 0x008800、length = 0x000800
  RAMLS2          :origin = 0x009000、length = 0x000800
  RAMLS5          : origin = 0x00A800 , length = 0x000800
  RAMLS6          :origin = 0x00B000、length = 0x000800
  RAMLS7          :origin = 0x00B800、length = 0x000800

  RAMGS0          :origin = 0x00C000、length = 0x002000
  RAMGS1          :origin = 0x00E000、length = 0x002000
  RAMGS2          :origin = 0x010000、length = 0x002000
  RAMGS3          :origin = 0x012000、length = 0x001FF8
//  RAMGS3_RSVD     :origin = 0x013FF8,length = 0x000008    /*根据 errata Advisory "Memory: prefake Beyond valid Memory"*,保留并不用于代码

  CLA1_MSGRAMLOW  :origin = 0x001480、length = 0x000080
  CLA1_MSGRAMHIGH :origin = 0x001500、length = 0x000080



部分
{
  .cinit          :> FLASH_BANK0_SEC1、    page = 0、align (4)
  .text           :>> FLASH_BANK0_sec2 | FLASH_BANK0_SEC3,  page = 0,align (4)
  codestart       :> begin      page = 0, align (4)

  .stack          :> RAMM1       页= 1
  .switch         :> FLASH_BANK0_SEC1、    PAGE = 0、ALIGN (4)

#if defined (__TI_EABI __)
  .init_array     :> FLASH_BANK0_SEC1      、page = 0、      align (4)
  .bss            :> RAMLS5、      page = 1
  .bss:output:     > RAMLS5、      page = 1
  .bss:CIO:        > RAMLS5,      page = 1
  .data           :> RAMLS6、      page = 1
  .sysmem         :> RAMLS6、      page = 1
  .const          :> FLASH_BANK0_SEC4、      PAGE = 0、ALIGN      (4)
#else
  .pinit          :> FLASH_BANK0_SEC1、      page = 0、      align (4)
  .ebss           :>> RAMLS5 | RAMLS6,      页面= 1
  .esysmem        :> RAMLS6、      page = 1
  .cio            :> RAMLS5、      page = 1
  econst         :>FLASH_BANK0_SEC4、   PAGE = 0、ALIGN (4)
#endif

  ramgs0          :> RAMGS0,   页面= 1
  ramgs1          :> RAMGS1、   page = 1
  .reset          :>RESET、    PAGE = 0、TYPE = DSECT /*未使用、*/

  dclfuncs        :> FLASH_BANK0_SEC1    、PAGE = 0、ALIGN (4)


#if defined (__TI_EABI __)
   /* CLA 特定部分*/
   Cla1Prog       :load = flash_BANK0_SEC4、
                     RUN = RAMLS0、
                     Load_Start (Cla1ProgLoadStart)、
                     RUN_START (Cla1ProgRunStart)、
                     Load_Size (Cla1ProgLoadSize)、
                     PAGE = 0、ALIGN (4)
#else
   /* CLA 特定部分*/
   Cla1Prog       :load = flash_BANK0_SEC4、
                     RUN = RAMLS0、
                     Load_Start (_Cla1ProgLoadStart)、
                     RUN_START (_Cla1ProgRunStart)、
                     Load_Size (_Cla1ProgLoadSize)、
                     PAGE = 0、ALIGN (4)
#endif
 
   
   Cla1ToCpuMsgRAM :> CLA1_MSGRAMLOW、  page = 1
   CpuToCla1MsgRAM :> CLA1_MSGRAMHIGH、 page = 1

#if defined (__TI_EABI __)
  .TI.ramfunc     :load = FLASH_BANK0_SEC1、
                     运行= RAMLS4
                     Load_start (RamfuncsLoadStart)、
                     Load_Size (RamfuncsLoadSize)、
                     Load_End (RamfuncsLoadEnd)、
                     RUN_START (RamfuncsRunStart)、
                     RUN_SIZE (RamfuncsRunSize)、
                     RUN_END (RamfuncsRunEnd)、
                     PAGE = 0、ALIGN (4)
#else
  .TI.ramfunc     :load = FLASH_BANK0_SEC1、
                     运行= RAMLS4
                     Load_start (_RamfuncsLoadStart)、
                     Load_Size (_RamfuncsLoadSize)、
                     Load_End (_RamfuncsLoadEnd)、
                     RUN_START (_RamfuncsRunStart)、
                     RUN_SIZE (_RamfuncsRunSize)、
                     RUN_END (_RamfuncsRunEnd)、
                     PAGE = 0、ALIGN (4)
#endif

  scratchpad     :> RAMLS1,          page = 1
  .bss_cla        :> RAMLS1、          页= 1

  Cla1DataRam     :>RAMLS2、          page = 1
  CLA_shared      :> RAMLS1、          page = 1
  CLADataLS1      :> RAMLS1、          PAGE = 1

#if defined (__TI_EABI __)
  .const_cla     :load = flash_BANK0_sec2、
                     RUN = RAMLS3、
                     RUN_START (Cla1ConstRunStart)、
                     Load_Start (Cla1ConstLoadStart)、
                     Load_Size (Cla1ConstLoadSize)、
                     PAGE = 0、ALIGN (4)
#else
  .const_cla     :load = flash_BANK0_sec2、
                     RUN = RAMLS3、
                     RUN_START (_Cla1ConstRunStart)、
                     Load_Start (_Cla1ConstLoadStart)、
                     Load_Size (_Cla1ConstLoadSize)、
                     PAGE = 0、ALIGN (4)
#endif


/*
//========================================
//文件结尾。
//========================================
*/