QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2821|回复: 12

想请教44b0的bootloader的问题

[复制链接]
发表于 2006-3-25 18:01:27 | 显示全部楼层 |阅读模式
想请教一下各位大侠,想让44b0能运行uClinux,bootloader要完成那些设置才行?
发表于 2006-3-25 20:50:28 | 显示全部楼层
Bootloader在第一阶段的任务是:
        基本硬件初始化(屏蔽所有中断、关闭处理器内部指令/数据cache等)。
        为第二阶段准备RAM空间。
        如果是从某个固态存储媒质中,则复制Bootloader的第二阶段代码到RAM。
        设置堆栈。
        跳转到第二阶段的C程序入口点。

第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。此阶段的主要任务是:
        初始化本阶段要使用的硬件设备。
        检测系统内存映射。
        将内核映象和根文件系统映象从Flash读到RAM。
        为内核设置启动参数。
        调用内核
跳转时必须满足下列条件。
1)        CPU寄存器设置
        R0为0;
        R1为机器类型ID;
        R2为启动参数,表记列表在RAM中的起始基地址。
2)        CPU模式
        必须禁止中断;
        CPU必须设置为SVC模式。
3)        Cache设置
       
这些资料挺多的,可以搜一下看看
回复

使用道具 举报

 楼主| 发表于 2006-3-25 22:39:12 | 显示全部楼层
谢谢!郁闷,现在在sdram设置这一步就卡住了,bwscon寄存器不会设置
回复

使用道具 举报

发表于 2006-3-26 23:59:57 | 显示全部楼层
从网上当一个44B0的bootloader对比一下啊
回复

使用道具 举报

 楼主| 发表于 2006-3-27 03:27:16 | 显示全部楼层
再寻找ing...楼上的有好链接吗?麻烦分享一下
回复

使用道具 举报

发表于 2006-3-27 05:38:11 | 显示全部楼层
找到没有?如果没有的话,给我一个邮件地址,我给你发过去吧
回复

使用道具 举报

 楼主| 发表于 2006-3-27 12:45:57 | 显示全部楼层
谢谢你啊,我邮箱是[email protected]
我就找到了这一个,想他设置,sdram就能工作了吗?http://www.hfrk.net//peixun/n_hfrkq.htm
我用的是HY57V641620HG,使用默认设置不能工作,
主要是设置bwscon不明白其意思
STx位决定sram映射在bankx时是否采用UB/LB----这个不明白是什么来的
WSx位决定bankx上等待的状态-----我这块sdram是否需要等待?
DWx中的2位决定bankx上总线宽度-------就这个明白
希望各位大侠能指点一下!
回复

使用道具 举报

发表于 2006-3-27 23:27:20 | 显示全部楼层
我看了一下我的板子和bootloader,SDRAM芯片和你的一样
它的配置是0x22222220
STx和WSx都是0
根据这个配置来看HY57V641620HG的不需要等待
回复

使用道具 举报

 楼主| 发表于 2006-3-28 02:15:55 | 显示全部楼层
我块板是使用一块sdram的,使用16bit总线,所以我设成0x11111110,发现还是不行。
照你说的,应该没设错。可能其他的寄存器设错了,你能发一下其他的设置吗?
我是这样设置的
memwrite 0x01C80000 0x11111110        ; BWSCON (Bus Width & Wait Status Control Register)
memwrite 0x01C80004 0x00000600        ; BANKCON0
memwrite 0x01C80008 0x00007FFC        ; BANKCON1
memwrite 0x01C8000C 0x00007FFC        ; BANKCON2
memwrite 0x01C80010 0x00007FFC        ; BANKCON3
memwrite 0x01C80014 0x00007FFC        ; BANKCON4
memwrite 0x01C80018 0x00007FFC        ; BANKCON5
memwrite 0x01C8001C 0x00018000        ; BANKCON6
memwrite 0x01C80020 0x00018000        ; BANKCON7
memwrite 0x01C80024 0x00860459        ; REFRESH
memwrite 0x01C80028 0x00000010        ; BANKSIZE
memwrite 0x01C8002C 0x00000020        ; MRSRB6
memwrite 0x01C80030 0x00000020        ; MRSRB7
回复

使用道具 举报

 楼主| 发表于 2006-3-28 04:43:57 | 显示全部楼层
终于找到原因了,发觉这段批量送参数代码没有送数出去。
很奇怪,能编译过去,但是单步调试的时候发现没数据送出。
搞了我一晚,结果最后用最笨的方法一个一个送参数,sdram就可以工作了。
郁闷,大侠看看这段代码有什么错,我看过很多人都这样写的,怎么我的就不能正常送数据。
        /* set memory */
memsetup:
        ldr            r0, =MEMORY_CONFIG
        ldmia        r0, {r1-r13}
        ldr         r0, =0x01c80000
        stmia        r0, {r1-r13}
回复

使用道具 举报

发表于 2006-3-28 16:13:15 | 显示全部楼层
adr        r0, InitSystem
        ldr        r1, =InitSystem
        sub        r0, r1, r0               
        ldr        r1, =SMRDATA
        sub        r0, r1, r0
        ldmia   r0, {r1-r13}
        ldr            r0, =0x01c80000                ;BWSCON Address
        stmia   r0, {r1-r13}

这里面好像有一个相对地址的概念吧
你那段代码和上面代码访问的地址是不同的所以你的数据没有传进去吧
回复

使用道具 举报

 楼主| 发表于 2006-3-29 22:28:32 | 显示全部楼层
:-( 崩溃了,现在又行了,但是最后跳转到sdram只能这样写才能在目标板运行我从flash复制到sdram的点led灯程序,为什么?是编译器有问题吗?
        ldr r0, =0x0
        ldr        r1,        =0xc300000
        mov        pc,        r1
回复

使用道具 举报

 楼主| 发表于 2006-3-29 22:34:52 | 显示全部楼层
之前就这一段代码老出问题,现在只能这样写
/* set memory */
memsetup:
        ldr        r0, =MEMORY_CONFIG
        ldmia        r0, {r1-r13}
        ldr         r0, =0x01c80000
        stmia        r0, {r1-r13}

        /* copy kernel from Flash address 0x10000 to RAM address 0xc300000 */
        ldr r0,        =0x10000
        ldr r1,        =0xc300000
        add r2,        r0,        #(1536 * 1024)
copy_kernel:       
        ldmia        r0!, {r3-r10}
        stmia        r1!, {r3-r10}
        cmp        r0,        r2
        ble        copy_kernel

        /* jump to ram */
        ldr sp, =0xc700000
        ldr r0, =0x0
        ldr        r1,        =0xc300000
        mov        pc,        r1

我的点led程序是这样的        .equ        PCONF,                0x01D20034
        .equ        PDATF,                0x01D20038

.globl _start
_start:       
       
        /* set Port B */
        ldr r1, =PCONF
        ldr r0, =0x09256a
        str r0, [r1]  
       
        /* set led */
        ldr r1, =PDATF
        ldr r0, =0x1f7
        str r0, [r1]
       
stop:
        b stop
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 02:28 , Processed in 0.050500 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表