TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6455: TMS3206455生成的bin文件烧录到flash跑不起来。

Part Number:TMS320C6455Other Parts Discussed in Thread:TMS320C6678

1.ccs5.2正常加载DEBUG模式下编译出来的out到IRAM,可以跑起来,但是转换成bin后烧录到emifa接口的flash就跑不起来。

2.下面是我自己写的烧录代码并且烧录成功了的没报错和转换成bin的命令。

请帮忙看看有没遇到过类似的问题谢谢了!

"${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}" "${BuildArtifactFileName}.bin" "${CG_TOOL_ROOT}/bin/ofd6x.exe" "${CG_TOOL_ROOT}/bin/hex6x.exe" "${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"

烧录代码如下

#define E_PASS 0
#define E_FAIL -1
static Uint8 tx[550];
static Uint8 rx[550];
void write_flash()
{
Int16 i;
Uint8* p8; ;
FILE *fPtr;
Int32 fileSize = 0;
Int32 no_of_pages; Int32 no_of_sectors; Int8 fileName[256], itype[20];
Int32 sector_size;
sector_size = 0x020000;
printf("Enter the File Name\n"); scanf("%s", fileName);
fflush(stdin);
fPtr = fopen(fileName, "rb");
if(fPtr == NULL)
{
printf("File %s Open failed\n", fileName);
return E_FAIL;
}

printf("Reading file…");
printf("This may take sometime depending on the size of the file…\n");
fflush(stdout);
// Initialize the pointer
fileSize = 0;

// Read file size
fseek(fPtr,0,SEEK_END);
fileSize = ftell(fPtr);

if(fileSize == 0)
{
printf("File read failed.. Closing APP\n");
fclose (fPtr);
return E_FAIL;
}
fseek(fPtr,0,SEEK_SET);
no_of_sectors = (fileSize/sector_size + ((fileSize % sector_size) ? 1 : 0));
FlashErase(0xb0000000,no_of_sectors*sector_size);
printf("Writing flash number of pages: %d\n", no_of_pages);
i = 0;
while(!feof(fPtr))
{
p8 = (Uint8*) tx;
if(!feof(fPtr)) {
fread(p8, 1, 512, fPtr);
}
FlashWrite(0xb0000000 + i * 512, ( Uint8 *)tx, 512);
i++;
}

fseek(fPtr,0,SEEK_SET);

printf("Reading verifying the file.. ");
fflush(stdout);

i = 0;

while(!feof(fPtr))
{
unsigned int nbytes;

if(!feof(fPtr)) {
nbytes = fread(tx, 1, 512, fPtr);
} tx[nbytes] = '\0';

FlashRead (0xb0000000 + i * 512, (Uint8 *)rx, 512 );
rx[nbytes] = '\0'; if(strcmp((const char *)rx,(const char *)tx)!= 0) {
printf("Files did not match @ %d\n", ftell(fPtr));
goto finish;
}
i++;
}

printf("Files matched \n");

finish:
fclose(fPtr);
}

wang yanping:

这个烧录代码是我在6748 ok的spi flash烧录工具代码上修改的。

,

Nancy Wang:

是不是有可能是入口地址的问题,我建议将入口地址修改到B0000000再看一下。

,

wang yanping:

入口地址就是B0000000啊,入还要怎么改呢?

,

wang yanping:

有没可能还是flash配置方面的问题?

,

wang yanping:

另外cmd改成flash配置,bin文件怎么会有4GB大小,正常才700k左右?

,

wang yanping:

请问下有没有下载到flash的能跑起来的例程。

,

Nancy Wang:

是程序的入口地址c_int00固定到B0000000.

Accessing_c_int00.pdf

该型号比较老,参考的资料不多。

可以参考tms320c6678的一些帖子看一下。

e2e.ti.com/…/c6678-emif16-boot-summary

,

wang yanping:

B0000000处不是应该放一段汇编代码吗?这段汇编去拷贝和调用_c_int00函数;现在你说把_c_int00放在B0000000不是冲突了吗?

,

wang yanping:

另外,我把cmd的boot_load段改成到flashboot生成的bin就是4GB大小。为什么这么大?

,

wang yanping:

load program是可以的,但是Load symbols就不行,这2个load有啥区别啊? 是不是load program是直接加载到IRAM的起始地址并运行,而Load symbols是去flash加载到IRAM的起始地址运行呢。

,

Nancy Wang:

wang yanping 说:B0000000处不是应该放一段汇编代码吗?

请问是您是写了二次bootloader程序?从手册来看emif boot是直接从B0000000处开始执行程序。

In EMIFA boot mode, the bootloader simply branches to the base address of EMIFA CE3 (0xB000 0000).Interrupts are disabled.

Load symbol是用来查看已经烧写的程序运行状况的。

,

wang yanping:

代码里有个汇编文件,里面有copy section和定义了.boot_load段并跳转到_c_int00,这个.s文件应该就是二级boot吧。

,

Nancy Wang:

是的。

建议先不要使用二次boot,先直接从nor flash上跑,将流程试一下看看有没有问题。

,

wang yanping:

我在这个汇编里打断点没跑到;那要怎么改成跳过2级bootloader,直接从nor flash跑呢?

,

wang yanping:

汇编代码我直接删掉了也可以load到main函数

,

Nancy Wang:

wang yanping 说:汇编代码我直接删掉了也可以load到main函数

不是debug模式下,是烧写模式下。

参考tms320c6678相关帖子试一下。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/367102/c6678-emif16-boot-summary

,

wang yanping:

debug模式load peogram后,是不是程序加载到IRAM 0后直接从IRAM 0地址运行,怎么跑到调用_c_int00从而进入main函数的呢?能不能讲下详细的过程,谢谢!

,

wang yanping:

.boot_load段指向新建的EMIF起始地址段,生成bin就有4G大小,指向IRAM就是700K左右

,

wang yanping:

是的。

建议先不要使用二次boot,先直接从nor flash上跑,将流程试一下看看有没有问题。

—>这个怎么的改呢,直接从nor flash跑

,

Nancy Wang:

wang yanping 说:怎么跑到调用_c_int00从而进入main函数

可以阅读一下编译器手册 5.3.2 Run-Time Initialization

https://www.ti.com.cn/cn/lit/ug/spru187u/spru187u.pdf

wang yanping 说:.boot_load段指向新建的EMIF起始地址段,生成bin就有4G大小,指向IRAM就是700K左右

不清楚什么原因

.boot_load段是分配c_int00地址的吗?

,

Nancy Wang:

仔细看一下帖子中cmd文件的写法。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/367102/c6678-emif16-boot-summary

结合我前面上传的pdf附件。

,

wang yanping:

.boot_load就是二级load的汇编语言;不只是这个段,其它任段都一样,生成4GB大小的bin文件。

,

wang yanping:

load symbols后查看反汇编disassembly窗口搜索_c_int00和main都是能搜得到的,可以说明刷机是好的吗?那就可能是cmd配置或者入口地址的问题吧

,

wang yanping:

现在参照你给的网址和文档修改cmd文件,就是bin有4GB

,

Nancy Wang:

wang yanping 说:load symbols后查看反汇编disassembly窗口搜索_c_int00和main都是能搜得到的,

请将截图贴出来我再看一下。

同时将您测试时使用的map文件,以及修改后的cmd文件贴出来。

,

wang yanping:

pic-map-cmd.zip

,

wang yanping:

map cmd等文件请见附件,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6455: TMS3206455生成的bin文件烧录到flash跑不起来。
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1