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等文件请见附件,谢谢