原创 flash

2009-1-16 15:11 2158 6 6 分类: 处理器与DSP

我下载了TI的2812片内Flash测试的Demo,.CMD文件如下:
MEMORY
{
PAGE 0:??? /* Program Memory */

???ZONE0?????? : origin = 0x002000, length = 0x002000?????/* XINTF zone 0 */
???ZONE1?????? : origin = 0x004000, length = 0x002000?????/* XINTF zone 1 */
???RAML0?????? : origin = 0x008000, length = 0x001000?????/* on-chip RAM block L0 */
???ZONE2?????? : origin = 0x080000, length = 0x080000?????/* XINTF zone 2 */
???ZONE6?????? : origin = 0x100000, length = 0x040000?????/* XINTF zone 6 allocated for code */
???OTP?????????: origin = 0x3D7800, length = 0x000800?????/* on-chip OTP */
???FLASHJ??????: origin = 0x3D8000, length = 0x002000?????/* on-chip FLASH */
???FLASHI??????: origin = 0x3DA000, length = 0x002000?????/* on-chip FLASH */
???FLASHH??????: origin = 0x3DC000, length = 0x004000?????/* on-chip FLASH */
???FLASHG??????: origin = 0x3E0000, length = 0x004000?????/* on-chip FLASH */
???FLASHF??????: origin = 0x3E4000, length = 0x004000?????/* on-chip FLASH */
???FLASHE??????: origin = 0x3E8000, length = 0x004000?????/* on-chip FLASH */
???FLASHD??????: origin = 0x3EC000, length = 0x004000?????/* on-chip FLASH */
???FLASHC??????: origin = 0x3F0000, length = 0x004000?????/* on-chip FLASH */
???FLASHA??????: origin = 0x3F6000, length = 0x001F80?????/* on-chip FLASH */
???CSM_RSVD??? : origin = 0x3F7F80, length = 0x000076?????/* Part of FLASHA.??Program with all 0x0000 when CSM is in use. */
???BEGIN?????? : origin = 0x3F7FF6, length = 0x000002?????/* Part of FLASHA.??Used for "boot to Flash" bootloader mode. */
???CSM_PWL?????: origin = 0x3F7FF8, length = 0x000008?????/* Part of FLASHA.??CSM password locations in FLASHA */

???RAMH0?????? : origin = 0x3F8000, length = 0x002000?????/* on-chip RAM block H0 */
???
/* ZONE7?????? : origin = 0x3FC000, length = 0x003FC0 */???/* XINTF zone 7 available if MP/MCn=1 */?
???ROM?????????: origin = 0x3FF000, length = 0x000FC0?????/* Boot ROM available if MP/MCn=0 */
???RESET?????? : origin = 0x3FFFC0, length = 0x000002?????/* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
???VECTORS?????: origin = 0x3FFFC2, length = 0x00003E?????/* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */

PAGE 1 :???/* Data Memory */

???RAMM0?????? : origin = 0x000000, length = 0x000400?????/* on-chip RAM block M0 */
???RAMM1?????? : origin = 0x000400, length = 0x000400?????/* on-chip RAM block M1 */
???RAML1?????? : origin = 0x009000, length = 0x001000?????/* on-chip RAM block L1 */
???ZONE6?????? : origin = 0x104000, length = 0x004000?????/* XINTF zone 6 allocated for data */
???FLASHB??????: origin = 0x3F4000, length = 0x002000?????/* on-chip FLASH */

}


SECTIONS
{

???/* Allocate program areas: */
???.cinit??????????????: > ZONE6??????PAGE = 0
???.pinit??????????????: > ZONE6,?????PAGE = 0
???.text???????????????: > ZONE6??????PAGE = 0
???codestart???????????: > BEGIN??????PAGE = 0
???reset_vec???????????: > RESET??????PAGE = 0
???ramfuncs????????????: LOAD = ZONE6,?
???????????????????????? RUN = RAMH0,?
???????????????????????? LOAD_START(_RamfuncsLoadStart),
???????????????????????? LOAD_END(_RamfuncsLoadEnd),
???????????????????????? RUN_START(_RamfuncsRunStart),
???????????????????????? PAGE = 0

???csmpasswds????????? : > CSM_PWL?????PAGE = 0
???ramdata???????????? : > RAMM1?????? PAGE = 1

???/* Allocate uninitalized data sections: */
???.stack??????????????: > RAMM0?????? PAGE = 1
???.ebss???????????????: > ZONE6?????? PAGE = 1
???.esysmem????????????: > ZONE6?????? PAGE = 1

???/* Initalized sections go in Flash */
???.econst???????????? : > ZONE6,??????PAGE = 1
???.switch???????????? : > ZONE6,??????PAGE = 1??????

???/* Allocate IQ math areas: */
???IQmath??????????????: > ZONE6?????? PAGE = 0??????????????????/* Math Code */
???IQmathTables????????: > ROM?????????PAGE = 0, TYPE = NOLOAD???/* Math Tables In ROM */

??? .reset??????????????: > RESET,??????PAGE = 0, TYPE = DSECT
???vectors???????????? : > VECTORS?????PAGE = 0, TYPE = DSECT

}


在LOAD PROGRAM时报警不能校验0x3F7FF6、0x3F7FF8、0x3F7F80地址的数据,不知道什么原因?(我用的是CCS3.1)

另外,对于片内Flash烧写还有一些不明之处:
1.如何将数据、程序烧写到片内Flash中?只要CMD文件中定义就可以了么?
2.CCS中的Flash烧写插件是干吗用的?
3.SDFlash是干吗用的?
4.所谓Flash API指的是什么?

以上问题很是困惑,对片内Flash感觉很晕,以前也没有用过,同时对DSP也不太熟悉,所以很头疼。

解答如下:

1.的确要在.CMD文件中指定程序代码的存放地址.
2.CCS中的FLASH插件就用来将编译连接后产生的代码"烧"入FLASH.
3.SDFlash一个工具,可以不在CCS下就能对FLASH进行烧写.
4.Flash API是指一种FLASH烧写算法,也即CCS如何将代码烧入FLASH,厂商搞的,我们可以不管,只在CCS中指定其存放路径即可.
另外送一个我改过的.CMD文件看一下,文件没有错误!

MEMORY
{
PAGE 0:??? /* Program Memory */
???????????/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
???RAML0?????? : origin = 0x008000, length = 0x001000?????/* on-chip RAM block L0 */
???OTP?????????: origin = 0x3D7800, length = 0x000800?????/* on-chip OTP */
???FLASHJ??????: origin = 0x3D8000, length = 0x002000?????/* on-chip FLASH */
???FLASHI??????: origin = 0x3DA000, length = 0x002000?????/* on-chip FLASH */
???FLASHH??????: origin = 0x3DC000, length = 0x004000?????/* on-chip FLASH */
???FLASHG??????: origin = 0x3E0000, length = 0x004000?????/* on-chip FLASH */
???FLASHF??????: origin = 0x3E4000, length = 0x004000?????/* on-chip FLASH */
???FLASHE??????: origin = 0x3E8000, length = 0x004000?????/* on-chip FLASH */
???FLASHD??????: origin = 0x3EC000, length = 0x004000?????/* on-chip FLASH */
???FLASHC??????: origin = 0x3F0000, length = 0x004000?????/* on-chip FLASH */
???FLASHA??????: origin = 0x3F6000, length = 0x001FF6?????/* on-chip FLASH */
???BEGIN?????? : origin = 0x3F7FF6, length = 0x000002?????/* Part of FLASHA.??Used for "boot to Flash" bootloader mode. */
???ROM?????????: origin = 0x3FF000, length = 0x000FC0?????/* Boot ROM available if MP/MCn=0 */
???RESET?????? : origin = 0x3FFFC0, length = 0x000002?????/* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
???VECTORS?????: origin = 0x3FFFC2, length = 0x00003E?????/* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */

PAGE 1 :???/* Data Memory */
???????????/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
???????????/* Registers remain on PAGE1??????????????????????????????????????????????????*/

???RAMM01?????? : origin = 0x000000, length = 0x000800?????/* on-chip RAM block M0 */
/*???RAMM1?????? : origin = 0x000400, length = 0x000400 */?????/* on-chip RAM block M1 */
???DEV_EMU?????: origin = 0x000880, length = 0x000180?????/* Device emulation registers */
???FLASH_REGS??: origin = 0x000A80, length = 0x000060?????/* FLASH registers */
???CSM?????????: origin = 0x000AE0, length = 0x000010?????/* Code security module registers */
???XINTF?????? : origin = 0x000B20, length = 0x000020?????/* External interface registers */
???CPU_TIMER0??: origin = 0x000C00, length = 0x000008?????/* CPU Timer0 registers (CPU Timer1 and Timer2 are reserved for BIOS)*/
???PIE_CTRL??? : origin = 0x000CE0, length = 0x000020?????/* PIE control registers */
???PIE_VECT??? : origin = 0x000D00, length = 0x000100?????/* PIE vector table */
???
/* XINTF ZONE0??*/
???XINTF_DURAM: origin = 0x002000, length = 0x001000??????/* Dualram address space*/
??????
???ECAN_A??????: origin = 0x006000, length = 0x000100?????/* eCAN registers */
???ECAN_AMBOX??: origin = 0x006100, length = 0x000100?????/* eCAN mailboxes */
???SYSTEM??????: origin = 0x007010, length = 0x000020?????/* System control registers */
???SPI_A?????? : origin = 0x007040, length = 0x000010?????/* SPI registers */
???SCI_A?????? : origin = 0x007050, length = 0x000010?????/* SCI-A registers */
???XINTRUPT??? : origin = 0x007070, length = 0x000010?????/* External interrupt registers */
???GPIOMUX?????: origin = 0x0070C0, length = 0x000020?????/* GPIO mux registers */
???GPIODAT?????: origin = 0x0070E0, length = 0x000020?????/* GPIO data registers */
???ADC?????????: origin = 0x007100, length = 0x000020?????/* ADC registers */
???EV_A????????: origin = 0x007400, length = 0x000040?????/* Event Manager A registers */
???EV_B????????: origin = 0x007500, length = 0x000040?????/* Event Manager B registers */
???SCI_B?????? : origin = 0x007750, length = 0x000010?????/* SCI-B registers */
???MCBSP_A?????: origin = 0x007800, length = 0x000040?????/* McBSP registers */
???RAML1?????? : origin = 0x009000, length = 0x001000?????/* on-chip RAM block L1 */
???FLASHB??????: origin = 0x3F4000, length = 0x002000?????/* on-chip FLASH */
???CSM_PWL?????: origin = 0x3F7FF8, length = 0x000008?????/* CSM password locations in FLASHA */
???RAMH0?????? : origin = 0x3F8000, length = 0x002000?????/* on-chip RAM block H0 */
}

/* Allocate sections to memory blocks.
???Note:
?????????codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code?
?????????????????? execution when booting to flash
?????????ramfuncs??user defined section to store functions that will be copied from Flash into RAM
*/?

SECTIONS
{

???/* Allocate program areas: */
???.cinit??????????????: > FLASHC,??????PAGE = 0
???.text???????????????: > FLASHC,??????PAGE = 0
???codestart???????????: > BEGIN,?????? PAGE = 0
???ramfuncs????????????: LOAD = FLASHC, RUN = RAML0, PAGE = 0


???/* Allocate uninitalized data sections: */
???.stack??????????????: > RAMM01,??????PAGE = 1
???.bss??????????????? : > RAML1,?????? PAGE = 1
???.ebss???????????????: > RAML1,?????? PAGE = 1
???.sysmem???????????? : > RAMH0,?????? PAGE = 1
???.esysmem????????????: > RAMH0,?????? PAGE = 1

???/* Initalized sections go in Flash */
???.const??????????????: > FLASHB,??????PAGE = 1
???.econst???????????? : > FLASHB,??????PAGE = 1??????
???.switch???????????????????????????: > FLASHB,????????????????PAGE = 1 /*xzb add 2005.02.19 */
???/* Allocate IQ math areas: */
???IQmath??????????????: > FLASHC,??????PAGE = 0??????????????????/* Math Code */
???IQmathTables????????: > ROM,?????????PAGE = 0, TYPE = NOLOAD???/* Math Tables In ROM */

???/* .reset indicates the start of _c_int00 for C Code.??
???/* When using the boot ROM this section and the CPU vector
???/* table is not needed.??Thus the default type is set to?
???/* DESECT */?
???.reset??????????????: > RESET,??????PAGE = 0, TYPE = DSECT
???vectors???????????? : > VECTORS,?????PAGE = 0, TYPE = DSECT

/* ------------------------------------------------------------- */
/* The following allocations are required for the DSP28 Header file
???examples.??Each allocation maps a structure defined in the DSP28?
???header files to the memory location of those registers.??
*/
??????
???/* Allocate Peripheral Frame 0 Register Structures:???*/
???DevEmuRegsFile??????: > DEV_EMU,?????PAGE = 1
???FlashRegsFile?????? : > FLASH_REGS,??PAGE = 1
???CsmRegsFile?????????: > CSM,?????????PAGE = 1
???XintfRegsFile?????? : > XINTF,?????? PAGE = 1
???CpuTimer0RegsFile???: > CPU_TIMER0,??PAGE = 1??????

???PieCtrlRegsFile?????: > PIE_CTRL,??? PAGE = 1??????
???PieVectTable????????: > PIE_VECT,??? PAGE = 1

???/* Allocate Peripheral Frame 2 Register Structures:???*/
???ECanaRegsFile?????? : > ECAN_A,??????PAGE = 1???
???ECanaMboxesFile?????: > ECAN_AMBOX,??PAGE = 1

???/* Allocate Peripheral Frame 1 Register Structures:???*/
???SysCtrlRegsFile?????: > SYSTEM,??????PAGE = 1
???SpiRegsFile?????????: > SPI_A,?????? PAGE = 1
???SciaRegsFile????????: > SCI_A,?????? PAGE = 1
???XIntruptRegsFile??? : > XINTRUPT,??? PAGE = 1
???GpioMuxRegsFile?????: > GPIOMUX,?????PAGE = 1
???GpioDataRegsFile??? : > GPIODAT,?????PAGE = 1
???AdcRegsFile?????????: > ADC,?????????PAGE = 1
???EvaRegsFile?????????: > EV_A,????????PAGE = 1
???EvbRegsFile?????????: > EV_B,????????PAGE = 1
???ScibRegsFile????????: > SCI_B,?????? PAGE = 1
???McbspaRegsFile??????: > MCBSP_A,?????PAGE = 1

???/* CSM Password Locations */
???CsmPwlFile????????? : > CSM_PWL,?????PAGE = 1
???/*Allocate Dual Port Ram Structure */
???Dual_Port_SpaceFile??:> XINTF_DURAM, PAGE = 1???

}

目标板: VPM642???? CCS2.2.18

烧写步骤:

1.Boot.asm的程序加入到用户程序中

2.在例程中的DSP\BIOS文件seedvpm642.cdb中,System>MEM>添加一个名为BOOT的存储空间,其地址空间分配为0x00~0x400

ISDRAM地址空间分配为由原来的0x0000000~0x00020000修改为0x00000400~0x00020000

(这一步有的示例程序中已经设置,则略过)

3.在CCS中打开例程中的*.cmd文件,做如下修改

SECTIONS

{

????.boot_load??>???????BOOT

?

}??

(这一步有的示例程序中已经设置,则略过)

4.用记事本编写*.cmd文件(这个文件是Hex6X工具的必备文件)

(可参考Fired code\boot\SEEDVPM642_boot\SEEDVPM642_ahex.cmd文件,编写hex6x.cmd)或者copy过来直接重命名也行。

5.使用HEx6x工具,将OUT文件,转换成为HEx的二进制文件。

DOS下进入程序保存的目录,直接运行(hex6x.exe)

如D:\ti\myprojects\a_video_process_XY>hex6x hex6x.cmd文件得到二进制文件(可以从DOS状态看到),此时就得到了seedvpm642_vedioloop_ahex.hex(文件名可能不同)用于烧写的文件。

6.使用FLASHBURN将之写入到FLASH中。

6.1)安装软件CCStudio Flashburn Utility v2.71;(在例程里也有,可不用安装)

6.2)运行FlashBurn,新建一个文件FBCConfig1.ccd,并保存。设置如下:

?Flash Physical: 0X90000000? bytes: 0X400000

6.3)(按钮)Program>Download FBTC(如果调用已经存在的FBCConfig1.ccd文件则不需此步)

FBTC??Program??File栏中选对完好的FBTC.out文件(注意版本)

6.4)(按钮)Program>Erase flash

6.5)(按钮)Program>Program flash

结束。其中第二步也可以在*.cmd中添加

MEMORY
{
boot: o = 00000000h l = 000400h /* all SRAM*/

}来实现

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /1 下一条