TI中文支持网
TI专业的中文技术问题搜集分享网站

6678 emif16 boot cmd文件中bootloader的指向问题

本人在做6678的emif16启动 是自己设计的板子 。

烧写方法是二次加载 待烧写工程为 A 烧写工程为emif16.

烧写流程是 .out 转为.bin ;用emif16烧写工程 写到0x70000000地址以后 0x70000000~0x70000400 为bootloader 之后为应用程序。

目前的问题是:断电重启加仿真器可以看到对应的flash有数据 就是烧正确 跑不起。(和.bin比对过没有问题)

下面贴上烧写工程的A bootloader 和 CMD

                 

BOOTLOADER
CODE_ROM .equ 0x70000400 ;ROM (CE1-32bit)

GPIO_DIRREG .equ 0x02320010 ;DIR reg.
GPIO_DIRREG_V .equ 0x0000FFDF ;GPIO[4]=output,(0–output,1–input)

GPIO_SETDATAREG .equ 0x02320018 ;SET DATA reg.
GPIO_SETDATAREG_V .equ 0x00000020 ;1–high level

GPIO_CLRDATAREG .equ 0x0232001C ;CLEAR DATA reg.
GPIO_CLRDATAREG_V .equ 0x00000020 ;1–low level

.global _boot
.ref _c_int00
; .sect ".boot"
; .align 1024

.sect ".bootembed"
.align 1024

_boot:

;****************************************************************************
;* SET REG VAL == REG_VAL
;****************************************************************************
mvkl GPIO_DIRREG,A4 || mvkl GPIO_DIRREG_V,B4
mvkh GPIO_DIRREG,A4
|| mvkh GPIO_DIRREG_V,B4
stw B4,*A4

mvkl GPIO_CLRDATAREG,A4
|| mvkl GPIO_CLRDATAREG_V,B4
mvkh GPIO_SETDATAREG,A4
|| mvkh GPIO_CLRDATAREG_V,B4
stw B4,*A4

;****************************************************************************
;* Copy code sections
;****************************************************************************
mvkl CODE_ROM, a3 ; load table pointer
mvkh CODE_ROM, a3

ldw *a3++, b1 ; Load entry point

copy_section_top:
ldw *a3++, b0 ; byte count ldw *a3++, a4 ; ram start address
nop 3

[!b0] b copy_done ; have we copied all sections?
nop 5

copy_loop:
ldw *a3++,b5
sub b0,4,b0 ; decrement counter
[ b0] b copy_loop ; setup branch if not done
[!b0] b copy_section_top
zero a1
[!b0] and 3,a3,a1
stw 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
;****************************************************************************
;* Jump to entry point
;****************************************************************************
copy_done:
b .S2 b1
nop 5

;************************************************************************

           CMD

 

-heap 0x1000
-stack 0x2000

MEMORY
{
/* Local L2, 0.5~1MB*/
VECTORS: o = 0x00800000 l = 0x00000200
LL2_CODE: o = 0x00800200 l = 0x0000FE00 
LL2_R_DATA: o = 0x00810000 l = 0x00008000 
LL2_RW_DATA: o = 0x00818000 l = 0x00068000

Cor0_SL2: o = 0x10800000 l = 0x00080000
SL2: o = 0x0C000000 l = 0x00180000
/* Shared L2 2~4MB*/
SL2_RW_DATA: o = 0x18000000 l = 0x00200000 
BootFlash: o = 0x70000000 l = 0x00000400
/* External DDR3, upto 2GB per core */
DDR3_CODE: o = 0x80000000 l = 0x01000000 
DDR3_R_DATA: o = 0x81000000 l = 0x01000000
DDR3_RW_DATA: o = 0x82000000 l = 0x06000000 
}

SECTIONS
{
vecs > VECTORS .bootembed > Cor0_SL2
.text > SL2
.cinit > SL2
.const > SL2
.switch > SL2
.cio > SL2
.stack > LL2_RW_DATA
GROUP
{
.neardata
.rodata
.bss
} > LL2_RW_DATA
.far > LL2_RW_DATA
.fardata > LL2_RW_DATA
.sysmem > LL2_RW_DATA
External_NonCache_Data > DDR3_RW_DATA
}

CMD中bootloader 的指向对吗?

bootembed > Cor0_SL2

Zhan Xiang:

通常烧写程序后运行不起来可以从以下点debug:

1. 确认boot管脚的配置是否正确

2. 确认大小端和烧写到Nor flash的字节序一致

3. 上电后连接仿真器,看看代码运行到哪里,是否在期望的地址

4. 我看你的代码定义了DDR3 的memory,bootloader是不是用到了DDR3,如果用到了,需要先初始化DDR3

user4528146:

回复 Zhan Xiang:

您好:

 1boot管脚确认没问题。

 2大小端和烧写到Nor flash确定一致

3.对于  上电后连接仿真器,看看代码运行到哪里,是否在期望的地址  这一步不是很懂刚开始接触。希望不吝赐教。

4 还有个问题 两端程序 bootloader和cmd相同  一段烧写成功 一段失败 。 但加载仿真器都能满足需求。。

赞(0)
未经允许不得转载:TI中文支持网 » 6678 emif16 boot cmd文件中bootloader的指向问题
分享到: 更多 (0)