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.

[参考译文] TMS320F280045:调试器不刷写内部闪存。

Guru**** 2511985 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1258543/tms320f280045-debugger-does-not-flash-the-internal-flash

器件型号:TMS320F280045

大家好。

我正在 F280045上运行代码。

我正在使用 XDS110调试探针。

通常、当我运行一个映射到闪存的代码时、此代码被闪存到器件中 、在我从调试器断开并上电后、此代码正在运行、执行我编程的最后一个代码。

出于某种原因、我在调试器中运行的代码在 重新上电后不会运行。

也许它与链接器 cmd 的定义有关。

我将附加链接器文件。

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

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

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

/*闪存扇区:当 RAM 填满时、可以将闪存用作程序存储器*/
/*组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 = 0x004000 /*片上闪存*/
// 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 /*片上闪存*/

第1页:

BOOT_RSVD:origin = 0x000002、length = 0x0000F1 /* Part of M0、boot ROM 将此用于堆栈*/
RAMM1:origin = 0x000400,length = 0x0003F8 /*片上 RAM 块 M1 */

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 = 0x002000


部分
{
codestart :> begin, page = 0, align (4)
.text:>> FLASH_BANK0_sec2 | FLASH_BANK0_SEC3 | FLASH_BANK0_SEC5 | FLASH_BANK0_SEC6 | FLASH_BANK0_sec7 | FLASH_BANK0_SEC8、page = 0、align (4)
.cinit:> FLASH_BANK0_SEC1、page = 0、align (4)
.switch:> FLASH_BANK0_SEC1、PAGE = 0、ALIGN (4)
.reset:>RESET、PAGE = 0、TYPE = DSECT /*未使用、*/

.stack:> RAMM1、page = 1

#if defined (__TI_EABI __)
.init_array:> FLASH_BANK0_SEC1、page = 0、align (4)
.bss:> RAMLS5、page = 1
.bss:output:> RAMLS3、page = 0
.bss:CIO:> RAMLS0、PAGE = 0
.data :> RAMLS5 , page = 1
.sysmem:> RAMLS5、page = 1
/*初始化段进入闪存*/
.const:> FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)
#else
.pinit:> FLASH_BANK0_SEC1、page = 0、align (4)
.ebss:> RAMLS5、page = 1
.esysmem :> RAMLS5 ,页面= 1
.cio:> RAMLS0、PAGE = 0
econst:>FLASH_BANK0_SEC4、PAGE = 0、ALIGN (4)
#endif

ramgs0:> RAMGS0,页面= 1
ramgs1:> RAMGS1、page = 1
gyro_log :> RAMGS0 ,页面= 1
gyro_data :> RAMGS0 ,页面= 1
ENC_DATA:>RAMGS1、PAGE = 1
GLOBAL_DATA:> RAMGS1、PAGE = 1
SPIB_DATA:> RAMGS1、页面= 1
long_BUF:> RAMGS2、页面= 1
LONG_BUF_CONT:> RAMGS3、PAGE = 1


#if defined (__TI_EABI __)
.TI.ramfunc:load = FLASH_BANK0_SEC1、
RUN = RAMLS0、
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、
RUN = RAMLS0、
Load_start (_RamfuncsLoadStart)、
Load_Size (_RamfuncsLoadSize)、
Load_End (_RamfuncsLoadEnd)、
RUN_START (_RamfuncsRunStart)、
RUN_SIZE (_RamfuncsRunSize)、
RUN_END (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif


DataBufferSection :> RAMM1, page = 1, align(4)


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

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

    Shai、您好!

    您的引导引脚是否配置为引导至闪存? 从器件 TRM 的第4.3节:

    此致、
    伊袋

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

    您好!  

    GPIO24和 GPIO32都具有1K 和10K 的上拉电阻器。

    Shai.

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

    好的、我假设您已经确认您的代码入口点确实位于0x80000 (通过检查输出链接器映射文件)?

    如果是、我的下两项检查将是:

    1. 您是否对用户 OTP 进行了编程? 如果是、请确保您尚未为引导引脚选项编程不同的设置。
    2. 启动期间使用示波器测试 GPIO24和 GPIO32引脚、以确保它们确实保持高电平并且没有出现干扰/被拉至低电平。

    此致、
    伊袋

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

    如何检查映射文件中的入口点?

    1)我没有使用 OTP ,至少不是故意的。 这是一款新芯片、我只使用调试器对其进行编程。

    2) 2) GPIO 24-32被上拉并与任何其他对象保持连接。

    Shai.  

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

    Shai、您好!

    请查看下面的帖子。 包含有关处理从闪存执行的调试提示/信息。

    [FAQ]闪存-如何将应用程序从 RAM 配置修改为闪存配置? - C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    此致、
    伊袋

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

    大家好。

    这就是问题所在。

    (c)请确保 f28x_codestartbranch.asm 文件包含在您的应用程序中、并且 codestart 被映射到链接器 cmd 文件中的闪存入口点位置(通常在 TI 提供的链接器 CMD 文件中定义为 BEGIN)。

    谢谢你。

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

    Shai、您好!

    感谢您通知我们此常见问题解答有助于解决此问题。

    此致、

    瓦姆西