主题 : smart210SDK 1305 DRAM初始化裸机程序有问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 99126
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2013-12-19
最后登录: 2017-11-01
楼主  发表于: 2017-06-26 20:34

 smart210SDK 1305 DRAM初始化裸机程序有问题

本人用的是smart210SDK 1305(Tiny210V2SDK)+4片128MB的K4T1G084QF

最近在搞DRAM裸机初始化,自己的程序将代码重定位到0x3XXX_XXXX这样的地址,链接脚本里面地址也保持一致(也就是DMC0的chip2的地址),程序会卡死(但是链接地址若是在0x2XXX_XXXX,即DMC0的chip1就没有问题)

转向用官方提供的代码去测试,也有同样问题。(链接地址以及BL2的copy地址都改成0x3XXX_XXXX):

sdram.lds:
SECTIONS
{
    . = 0x33E00000; //修改成了0x33E00000
    .text : {
        start.o
        * (.text)
    }

    .bss : {
        * (.bss)
    }
    
    .data : {
        * (.data)
    }


mmc_relocate.c:
void copy_code_to_dram(void)
{
    unsigned long ch;
    void (*BL2)(void);
    ch = *(volatile unsigned int *)(0xD0037488);

    // 函数指针
    copy_sd_mmc_to_mem copy_bl2 = (copy_sd_mmc_to_mem) (*(unsigned int *) (0xD0037F98));

    unsigned int ret;
    
    // 通道0
    if (ch == 0xEB000000)
    {
        // 0:channel 0
        // 49:源,代码位于扇区49,1 sector = 512 bytes
        // 32:长度,拷贝32 sector,即16K
        // 0x23E00000:目的,链接地址0x23E00000
        ret = copy_bl2(0, 49, 32,(unsigned int *)0x33E00000, 0);//修改成了0x33E00000
    }
    // 通道2
    else if (ch == 0xEB200000)
    {
        ret = copy_bl2(2, 49, 32,(unsigned int *)0x33E00000, 0);//修改成了0x33E00000
    }
    else
        return;

    // 跳转到DRAM
    BL2 = (void *)0x33E00000;//修改成了0x33E00000
    (*BL2)();
}



当前现象及分析结果(只分析了我自己的代码):
1、DRAM的初始化程序能够跑通
2、汇编卡死在用str指令去将数据保存到0x3XXX_XXXX的地方,认为应该是找不到这个地址


请问有朋友遇到过吗??