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.

TMS320F280049: 使用Flash运行程序时,只有在插着探针(XDS100V2)时才能正常运行,拔下后芯片停止运行,重新插上又能恢复

Part Number: TMS320F280049
Other Parts Discussed in Thread: C2000WARE

我正在学习TMS320F280094,现在运行程序时(RAM与Flash都一样),只有在插着探针(XDS100V2)时才能正常运行,拔下后芯片就会停止运行(板子插着探针时,电流有0.09A,拔下后只有0.02A),重新插上后又能恢复正常运行,此时并没有进CCS的调试模式。
若断电后再上电,或者按下复位键,则需要重新烧录后才能正常工作。
选择的是运行方式选项来烧录。

已经配置为Flash模式(不过RAM模式的问题也一样),并添加宏定义


这是我的InitSysCtrl函数

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void
InitSysCtrl(void)
{
//
// Disable the watchdog
//
DisableDog();
#ifdef _FLASH
//
// Copy time critical code and Flash setup code to RAM
// This includes the following functions: InitFlash();
// The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart
// symbols are created by the linker. Refer to the device .cmd file.
//
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
//
// Call Flash Initialization to setup flash waitstates
// This function must reside in RAM
//
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

这是我的main.c文件
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//#include "System_Config.h"
#include "f28x_project.h"
#include "gpio.h"
#include "flash.h"
/**
* main.c
*/
void main(void)
{
// Flash_initModule(ctrlBase, eccBase, waitstates)
InitSysCtrl(); //ADC
DELAY_US(30); //30us3.3V
InitGpio(); //GPIOGPIOTI
DINT; //
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

官方的C2000ware的文件我没有改动,编写了main.c函数
我的CMD文件
(flash)
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MEMORY
{
PAGE 0 :
/* BEGIN is used for the "boot to Flash" bootloader mode */
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
RESET : origin = 0x3FFFC0, length = 0x000002
/* Flash sectors */
/* BANK 0 */
FLASH_BANK0_SEC0 : origin = 0x080002, length = 0x000FFE /* on-chip Flash */
FLASH_BANK0_SEC1 : origin = 0x081000, length = 0x001000 /* on-chip Flash */
FLASH_BANK0_SEC2 : origin = 0x082000, length = 0x001000 /* on-chip Flash */
FLASH_BANK0_SEC3 : origin = 0x083000, length = 0x001000 /* on-chip Flash */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

(RAM)

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MEMORY
{
PAGE 0 :
/* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, 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
RESET : origin = 0x3FFFC0, length = 0x000002
/* Flash sectors: you can use FLASH for program memory when the RAM is filled up*/
/* BANK 0 */
FLASH_BANK0_SEC0 : origin = 0x080000, length = 0x001000 /* on-chip Flash */
FLASH_BANK0_SEC1 : origin = 0x081000, length = 0x001000 /* on-chip Flash */
FLASH_BANK0_SEC2 : origin = 0x082000, length = 0x001000 /* on-chip Flash */
FLASH_BANK0_SEC3 : origin = 0x083000, length = 0x001000 /* on-chip Flash */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


硬件方面,根据手册配置了BOOT引脚为闪存模式(两组排针均处于断路状态)

晶振方面,插着探针时用示波器测量,测得正常的20MHz正弦波,拔下探针后波形消失(此时探针与我的F280049板子并没有断电,若探针断电后再上电,即使插回我的板子仍然无法让芯片恢复正常工作)

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好

    若断电后再上电,或者按下复位键,则需要重新烧录后才能正常工作。
    选择的是运行方式选项来烧录。

    这听起来好像正在使用 RAM、而不是闪存。

    您能否仔细检查您正在使用的链接器 CMD 文件?

  • 我的CMD文件已经放在文章中,使用flash时,我屏蔽了f28004x_headers_bios.cmd与28004x_generic_ram_lnk.cmd两个文件,上面的内容是我在CCS12.4.0测试的,在CCS20.2.0测试时,我使用了示例工程gpio_ex2_toggle,问题依旧。使用晶振时,插着探针能够测到正常的20M正弦波形,拔下探针波形消失,使用内部振荡器也是如此,拔下探针芯片停止工作,掉电流,重新插上探针又能恢复。请问这是否是我CCS设置的问题?

  • 您好

    您的探头的电容似乎很可能会影响振荡器。 如果除非连接了探头、否则振荡器不工作、您需要添加一些额外的电容。

    通常建议使用 XCLKOUT 测量时钟频率。