10716|1

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

6678 EMIF16 NOR FLASH BOOT [复制链接]

最近在对C6678进行开发,
现在使用6678 EMIF16 NOR FLASH 引导模式一直失败,不知道论坛里哪位大虾有过成功的经验,下面是我实验的一些信息。

0 编译环境CCS5.0.3,在C6678 EMIF16地址0x70000000上外挂一个P30系列的NOR FLASH,规格为16M x 16bit。

1 首先生成.out文件,linker的CMD文件和boot loader汇编文件如下:
/*******************************************************/
linker的CMD:
/*******************************************************/
-c
-heap 0x41000
-stack 0xa000
MEMORY
{
L1PSRAM (RWX)   : org = 0x0E00000,  len = 0x7FFF
L1DSRAM (RWX)   : org = 0x0F00000,  len = 0x7FFF
L2SRAM (RWX)    : org = 0x0800000,  len = 0x080000
MSMCSRAM (RWX)  : org = 0xc000000,  len = 0x200000
DDR3 (RWX)      : org = 0x80000000, len = 0x10000000
boot            : o   = 0x70000000  l   = 0x00000200
FLASH           : o   = 0x70000200  l   = 0x3FFE00
}
SECTIONS
{
"bootload" : {} > boot
.text     : {} > FLASH   run = MSMCSRAM, LOAD_START(FLASH_TEXT_START),   RUN_START(RAM_TEXT_START),   SIZE(TEXT_SIZE)
.cinit    : {} > FLASH   run = MSMCSRAM, LOAD_START(FLASH_CINIT_START),  RUN_START(RAM_CINIT_START),  SIZE(CINIT_SIZE)
.const    : {} > FLASH   run = MSMCSRAM, LOAD_START(FLASH_CONST_START),  RUN_START(RAM_CONST_START),  SIZE(CONST_SIZE)
.switch   : {} > FLASH   run = MSMCSRAM, LOAD_START(FLASH_SWITCH_START), RUN_START(RAM_SWITCH_START), SIZE(SWITCH_SIZE)
.csl_vect : {} > FLASH   run = MSMCSRAM, LOAD_START(FLASH_VECT_START),   RUN_START(RAM_VECT_START),   SIZE(VECT_SIZE)
GROUP (NEAR_DP)
{
.neardata
.rodata
.bss
} load > MSMCSRAM
.stack > MSMCSRAM
.cio > MSMCSRAM
.data > MSMCSRAM
.sysmem > MSMCSRAM
.far > MSMCSRAM
.testMem > MSMCSRAM
.fardata > MSMCSRAM
}
/*******************************************************/
boot loader汇编: 这里的bootloader没有对EMIFA,PLL进行设置
                bootloader所用的boot table实际是在linker
CMD文件中声明的。
/*******************************************************/
.ref    _c_int00
.ref    FLASH_TEXT_START
.ref    RAM_TEXT_START
.ref TEXT_SIZE
.ref FLASH_CINIT_START
.ref RAM_CINIT_START
.ref CINIT_SIZE
.ref FLASH_CONST_START
.ref RAM_CONST_START
.ref CONST_SIZE     
.ref FLASH_SWITCH_START
.ref RAM_SWITCH_START
.ref SWITCH_SIZE   
.ref FLASH_VECT_START
.ref RAM_VECT_START
.ref VECT_SIZE      
.sect "bootload"
_boot_start:
nop  5
mvkl  copyTable, a3 ; load table pointer
mvkh  copyTable, a3
copy_section_top:
ldw   *a3++, b0 ; byte count
ldw   *a3++, b4 ; load flash start (load) address
ldw   *a3++, a4 ; ram start address
nop   2
[!b0]  b copy_done
nop   5
copy_loop:
ldb   *b4++,b5  
sub   b0,1,b0   ; decrement counter
[ b0]  b copy_loop   ; setup branch if not done
[!b0]  b copy_section_top
zero  a1
[!b0]  and   3,a3,a1
stb   b5,*a4++
[!b0]  and   -4,a3,a5   ; round address up to next multiple of 4
[ a1]  add   4,a5,a3   ; round address up to next multiple of 4
copy_done:
mvkl .S2 _c_int00, B0
mvkh .S2 _c_int00, B0
b .S2 B0
nop   5
copyTable:
; count
; flash start (load) address
; ram start (run) address
;; .text
.word TEXT_SIZE
.word FLASH_TEXT_START
.word RAM_TEXT_START
;; .cinit
.word CINIT_SIZE
.word FLASH_CINIT_START
.word RAM_CINIT_START
;; .const
.word CONST_SIZE
.word FLASH_CONST_START
.word RAM_CONST_START
;; .switch
.word SWITCH_SIZE
.word FLASH_SWITCH_START
.word RAM_SWITCH_START
;; .vect
.word VECT_SIZE
.word FLASH_VECT_START
.word RAM_VECT_START
;; end of table
.word 0
.word 0
.word 0

 2  由第一步的.out文件转换为.hex文件,其中HEX6X.exe所使用的CMD文件如下:
/*******************************************************/
HEX6X.exe的CMD: 这里有一个需要特别指出的问题就是因为所使
用的NOR FLASH是16bit位宽,因此在下面的CMD
文件中变量“memwidth”和“romwidth”都设置
为16,这个不知道是否正确?实际上对于“memw
idth”,“romwidth”以及“len”三个设置项
一直没有理解清楚,麻烦知道的大虾指点下。
“len”和输入的.out文件有什么关系?
/*******************************************************/
Debug/mwg519a_test.out
-a
-memwidth  16
-image
ROMS
{
   FLASH: org = 0x70000000, len = 0x10000, romwidth = 16, files = {mwg519a_test.hex}
}
 
 
3  由第二步的.hex文件转换为.dat文件,转换工具b2ccs.exe(C:\
Program Files\Texas Instruments\mcsdk_2_00_05_17\tools\
boot_loader\ibl\src\util\btoccs)输入参数为:
mwg519a_test.hex mwg519a_test.dat。


4  由第三步的.dat文件转换为.bin文件,转换工具ccs2bin.exe(C:\
Program Files\Texas Instruments\mcsdk_2_00_05_17\tools\
boot_loader\ibl\src\util\btoccs)输入参数为:
mwg519a_test.dat mwg519a_test.bin。
这里一个问题是是否需要使用“-swap”参数?

 
5  NOR FLASH烧写:
NOR FLASH烧写程序是自己写的,已经通过读写测试验证。具体流程
是使用fopen以“RB”模式打开输入文件“mwg519a_test.bin”,每
次读出两个byte,然后写入NOR FLASH(从0x70000000开始)。
这里一个问题是在读取输入文件“mwg519a_test.bin”到写入NOR
FLASH的过程中是否会引起烧写文件的乱序问题?
    
   
6  问题小结:
A 步骤1中linker CMD文件声明boot table的方法是否正确,即FLASH_TEXT_START,
   RAM_TEXT_START,TEXT_SIZE等类似变量的使用?
B 步骤2中的boot loader没有对EMIF16和PLL进行初始化,是否可以进行正常搬运,
   另外C6678是否兼容C6455的汇编指令?
C 步骤2中hex CMD文件是否正确,特别是“memwidth”,“romwidth”以及“len”
   三个设置项的设置(考虑待NOR FLASH为16bit位宽)?
D 步骤4中是否需要“-swap”参数?
E 步骤5中读取文件与烧写流程是否合理?
F 整个.out文件生成到.bin文件生成的过程以及所使用的转换工具是否正确?




欢迎大家一起讨论:

QQ 85942591

最新回复

好贴,先MARK  详情 回复 发表于 2012-9-23 17:00
点赞 关注
 

回复
举报

1025

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
好贴,先MARK
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表