想请教44b0的bootloader的问题
想请教一下各位大侠,想让44b0能运行uClinux,bootloader要完成那些设置才行? Bootloader在第一阶段的任务是: 基本硬件初始化(屏蔽所有中断、关闭处理器内部指令/数据cache等)。
为第二阶段准备RAM空间。
如果是从某个固态存储媒质中,则复制Bootloader的第二阶段代码到RAM。
设置堆栈。
跳转到第二阶段的C程序入口点。
第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。此阶段的主要任务是:
初始化本阶段要使用的硬件设备。
检测系统内存映射。
将内核映象和根文件系统映象从Flash读到RAM。
为内核设置启动参数。
调用内核
跳转时必须满足下列条件。
1) CPU寄存器设置
R0为0;
R1为机器类型ID;
R2为启动参数,表记列表在RAM中的起始基地址。
2) CPU模式
必须禁止中断;
CPU必须设置为SVC模式。
3) Cache设置
这些资料挺多的,可以搜一下看看 谢谢!郁闷,现在在sdram设置这一步就卡住了,bwscon寄存器不会设置 从网上当一个44B0的bootloader对比一下啊 再寻找ing...楼上的有好链接吗?麻烦分享一下 找到没有?如果没有的话,给我一个邮件地址,我给你发过去吧 谢谢你啊,我邮箱是[email protected]
我就找到了这一个,想他设置,sdram就能工作了吗?http://www.hfrk.net//peixun/n_hfrkq.htm
我用的是HY57V641620HG,使用默认设置不能工作,
主要是设置bwscon不明白其意思
STx位决定sram映射在bankx时是否采用UB/LB----这个不明白是什么来的
WSx位决定bankx上等待的状态-----我这块sdram是否需要等待?
DWx中的2位决定bankx上总线宽度-------就这个明白
希望各位大侠能指点一下! 我看了一下我的板子和bootloader,SDRAM芯片和你的一样
它的配置是0x22222220
STx和WSx都是0
根据这个配置来看HY57V641620HG的不需要等待 我块板是使用一块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 终于找到原因了,发觉这段批量送参数代码没有送数出去。
很奇怪,能编译过去,但是单步调试的时候发现没数据送出。
搞了我一晚,结果最后用最笨的方法一个一个送参数,sdram就可以工作了。
郁闷,大侠看看这段代码有什么错,我看过很多人都这样写的,怎么我的就不能正常送数据。
/* set memory */
memsetup:
ldr r0, =MEMORY_CONFIG
ldmia r0, {r1-r13}
ldr r0, =0x01c80000
stmia r0, {r1-r13} 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}
这里面好像有一个相对地址的概念吧
你那段代码和上面代码访问的地址是不同的所以你的数据没有传进去吧 :-( 崩溃了,现在又行了,但是最后跳转到sdram只能这样写才能在目标板运行我从flash复制到sdram的点led灯程序,为什么?是编译器有问题吗?
ldr r0, =0x0
ldr r1, =0xc300000
mov pc, r1 之前就这一段代码老出问题,现在只能这样写
/* 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,
/* set led */
ldr r1, =PDATF
ldr r0, =0x1f7
str r0,
stop:
b stop
页:
[1]