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.

请问c642x烧写程序到NOR FLASH的问题



首先我是自己建了一个烧写FLASH的工程(没有CCS的第三方软件flashburn)

我已经有genAIS.pl可以将CCS编译的.out文件,转换成.ais文件,文件内容类似这样: 0x00000001
 0x41504954
 0x58535903
 0x58535901
 0x10819694
 0x0000000C
 0x10815DE0
 0x10815E40
 0x00000000
 0x58535902
 0x425F6A6A
 0xFFFFFFDC
 0x58535901

……

这个ais文件应该不能直接烧到FLASH中吧,是需要转换成hex?

我使用HexAIS_C642x.exe将.out文件转换成hex,以及.ais文件转换成hex,这两个hex文件的内容并不一样,格式类似如下:

S011000075626C446156696E63692E6865789A
S3254200000009307830303030303030310D0A09307834313530343935340D0A09307835383594
S3254200002033353930330D0A09307835383533353930310D0A09307831303831393639340D8D
S325420000400A09307830303030303030430D0A09307831303831354445300D0A093078313061
S325420000603831354534300D0A09307830303030303030300D0A09307835383533353930323C
S325420000800D0A09307834323546364136410D0A09307846464646464644430D0A0930783591
S325420000A0383533353930310D0A09307831303831393445380D0A09307830303030303038ED

……

这个hex文件的格式没法直接写入FLASH中,还需要如何解析?请问我究竟应该如何烧写FLASH呢?

多谢指教。

  • ais格式可以直接写入flash的,不需要再转换为hex文件。

  • 谢谢Titan的回复,我前几天已把ais文件写入到flash中,但去掉仿真器,设置好BOOTMODE,重新上电后,程序并不能从FLASH正常启动,连上仿真器察看BOOTCMPLT0x01C4 000C寄存器,bit19:160001b,是不是我写的ais格式有问题。我用于生成ais文件的.out文件在编译时,没有加入boot.asm文件,会是这个问题么?我找遍c6424的例程都没发现有boot.asm,这个boot文件的作用就是把FLASH里的代码拷到RAM中运行,我看ais文件中有Section Load(0x58535901)这样的指令,是不是已经实现了代码拷贝,不需要再boot.asm文件了?

    感谢 Titan

  • ais格式,不需要使用boot.asm文件

  • 对于c6424来说,一般使用的都是boot.asm,转换为.hex格式,推荐你参考一下我们的C64 dsp例程中的boot用法。

  • Titan,你好,这几天用hex6x将.out文件转换成.hex文件碰到了问题,hex6x提示“……falls in unconfigured memory(skipped)",详细提示如下:

    Translating to ASCII-Hex format...   

     "c6424_LEDtest.out"   ==> .bootld

    warning: section c6424_LEDtest.out(.bootld) at 010800000h falls in unconfigured    memory (skipped)   

     "c6424_LEDtest.out"   ==> .text

    warning: section c6424_LEDtest.out(.text) at 010800800h falls in unconfigured    memory (skipped)   

    "c6424_LEDtest.out"   ==> .cinit

    warning: section c6424_LEDtest.out(.cinit) at 0108034a0h falls in unconfigured    memory (skipped)   

    "c6424_LEDtest.out"   ==> .switch

    warning: section c6424_LEDtest.out(.switch) at 010803834h falls in unconfigured    memory (skipped)

    生成的hex文件中的内容全是0。

    我hex6x使用的cmd文件内容如下:

    c6424_LEDtest.out

    -a

    -image

    -zero

    -memwidth 16

    ROMS

     {  

    FLASH: org = 0x0, len = 0x10000,romwidth = 16, files = {c6424_LEDtest.hex}

    }

    我的测试工程文件中的cmd文件内容如下:

    -l rts64plus.lib

    -stack          0x00000800      /* Stack Size */

    -heap           0x00000800      /* Heap Size */

    MEMORY

     {    

    BootLoader:    o = 0x10800000  l = 0x00000800    

    L2RAM:         o = 0x10800800  l = 0x0001F800  /* 128kB L2 RAM/Cache */    

    EMIFA_CS2:     o = 0x42000000  l = 0x01000000  /* 16MB EMIFA CE2 */    

    DDR2:          o = 0x80000000  l = 0x10000000  /* 256MB External DDR2 */

     }

    SECTIONS

     {    

     .bootld    >  BootLoader    

     .text          >  L2RAM    

     .stack         >  L2RAM    

     .bss           >  L2RAM    

     .cio           >  L2RAM    

     .const         >  L2RAM    

     .data          >  L2RAM    

     .switch        >  L2RAM    

     .sysmem        >  L2RAM    

     .far           >  L2RAM    

     .cinit         >  L2RAM

    }

     尝试过把各个段放到DDR2中,也是一样的结果,能否帮我分析一下是什么原因?谢谢