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.

TMS320C6455: TMS320C6455如何制作烧录到外部NOR FLASH的bin文件

Part Number: TMS320C6455

请教下CCS5.2上如何制作TMS320C6455的外部NOR FLASH烧录的BIN文件呢?谢谢!

  • 可以在ccs post build指令转换成bin文件:

    https://software-dl.ti.com/ccs/esd/documents/users_guide/ccs_project-management.html?highlight=hex6x#pre-and-post-build-steps

    Hex转换工具详细描述可参考 章节11 Hex Conversion Utility Description:

    https://www.ti.com/lit/ug/spru186w/spru186w.pdf

    e2e.ti.com/.../680588

  • 生成bin文件了,但是刷机后系统跑不起来,用仿真器加载是可以的,是烧录到emifa flash的0xb0000000地址吗?

  • 生成bin文件了,但是刷机后系统跑不起来,用仿真器加载是可以的,是烧录到emifa flash的0xb0000000地址吗?

  • 刷机调用的是代码里自带的flash擦除和写的函数,所以需要转换为bin格式的吧

    我对该型号不是很熟悉,请问是看到有过类似的讨论吗?是否直接转换成.bin就可以我不太确定,可能得先确认一格式的问题。

    如果格式没有问题,是用的哪个烧写程序,程序中一般会指定烧写到flash的起始地址,例如0地址开始。

    https://e2echina.ti.com/support/processors/f/processors-forum/204852/tms320c6455-tms320c6455-rc28f640j3d-nor-flash

  • 这是我写的刷机代码,都执行成功了的。百度上面记得以前看过,生成bin烧录到flash起始地址oxb0000000地址。你在帮忙确认下呢,谢谢了。

    #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];
    unsigned long 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);
    }

  • 刷机后系统起不来和cmd文件有关吗?现在配置成IRAM的

  • 我把tcf文件和cmd改成加载到FLASH编译出来的的bin有2.4GB,但是out只有2MB,cmd和tcf改成IRAM的编出来的就只有700KB

  • 跟cmd文件应该没有关系,跑不起来,先确认一下boot模式没问题,其次用仿真器跟一下看看pc指向哪里?有没有跳转到应用程序。

  • 1.boot模式是硬件决定的吧?应该没问题,因为板子以前都能跑起来,只是刷了软件起不来。

    2.另外仿真器可以调试从flash启动的程序吗,要怎么设置呢?我只知道加载到内存来调试

  • 1、是硬件决定的。确保在emif启动模式就可以了

    2、boot起来之后jtag连上板子ccs->load symbol->  .out文件。

  • 1.load symbol以后,pc指向B0000000就是emifa地址

    2.然后单步运行到B0000024就卡住了,再点PC就是0x00000000开始跑

  • load program可以进main,load symbol就进不了main

  • 我是在debug模式下编译的,这个有影响吗?

  • 我是在debug模式下编译的,这个有影响吗?

    没有影响的。