为什么烧写mini2440的BIOS时要先初始化

zhangjingrui   2009-8-10 16:39 楼主
烧写友善mini2440的板子的BIOS要设置初始化脚本,我看了脚本内容,基本都是设置内存数据。

我注释了一下:

SCRIPT SECTION:
Setmem 32-Bit 0x53000000 0x00000000 ; pWTCON , 看门狗定时器控制寄存器
Setmem 32-Bit 0x4A000008 0xFFFFFFFF ; INTMSK , 中断屏蔽寄存器
Setmem 32-Bit 0x4A00001C 0x000007FF ; INTSUBMSK , 针对INTMAK具体化的一个中断请求屏蔽寄存器
Setmem 32-Bit 0x53000000 0x00000000 ; pWTCON , 看门狗定时器控制寄存器
Setmem 32-Bit 0x56000050 0x000055AA ; rGPFCON , Port F control
Setmem 32-Bit 0x4C000014 0x00000007 ; CLKDIVN , CPU时钟分频控制寄存器
Setmem 32-Bit 0x4C000000 0x00FFFFFF ; LOCKTIME , 锁时计数寄存器
Setmem 32-Bit 0x4C000004 0x00061012 ; MPLLCON , MPLL寄存器
Setmem 32-Bit 0x4C000008 0x00040042 ; UPLLCON , UPLL寄存器
Setmem 32-Bit 0x48000000 0x22111120 ; Bus width & wait status
Setmem 32-Bit 0x48000004 0x00002F50 ; Boot ROM control
Setmem 32-Bit 0x48000008 0x00000700 ; BANK1 control
Setmem 32-Bit 0x4800000C 0x00000700 ; BANK2 control
Setmem 32-Bit 0x48000010 0x00000700 ; BANK3 control
Setmem 32-Bit 0x48000014 0x00000700 ; BANK4 control
Setmem 32-Bit 0x48000018 0x0007FFFC ; BANK5 control
Setmem 32-Bit 0x4800001C 0x00018005 ; BANK6 control
Setmem 32-Bit 0x48000020 0x00018005 ; BANK7 control
Setmem 32-Bit 0x48000024 0x008E0459 ; DRAM/SDRAM refresh
Setmem 32-Bit 0x48000028 0x00000032 ; Flexible Bank Size
Setmem 32-Bit 0x4800002C 0x00000030 ; Mode register set for SDRAM
Setmem 32-Bit 0x48000030 0x00000030 ; Mode register set for SDRAM


请问各位,为什么要初始化?
内存中写的这些值是给谁用的?

回复评论 (14)

这是初始化板子的  让arm板工作在一个合适的状态 然后才能往里面烧写东西
点赞  2009-8-10 19:12
楼上正解,不过楼主,正确来说应该叫bootloader吧。
点赞  2009-8-10 21:14
应该理解为是作标记,是为之后的工作做基础,就好比将求知的空间划分出来,这样要存放东西、数据就很方便而不会导致错乱
点赞  2009-8-10 21:34
引用: 引用 2 楼 goodlinux 的回复:
楼上正解,不过楼主,正确来说应该叫bootloader吧。


不是bootloader,是烧bootloader的时候写入的这些数据
点赞  2009-8-10 21:48
引用: 引用 3 楼 goolin 的回复:
应该理解为是作标记,是为之后的工作做基础,就好比将求知的空间划分出来,这样要存放东西、数据就很方便而不会导致错乱


问题是,这些数据谁用?

是烧写程序用,还是拷贝到内存的驱动用?

谁去读取并使用这些数据。
点赞  2009-8-10 21:50
引用: 引用 3 楼 goolin 的回复:
应该理解为是作标记,是为之后的工作做基础,就好比将求知的空间划分出来,这样要存放东西、数据就很方便而不会导致错乱


烧的时候没有这些初始化是烧不进去的。
而且也要用到bootloader的初始化代码中。
点赞  2009-8-10 22:15
引用: 引用 4 楼 hackcrack 的回复:
引用 2 楼 goodlinux 的回复:
楼上正解,不过楼主,正确来说应该叫bootloader吧。


不是bootloader,是烧bootloader的时候写入的这些数据


我是说不叫BIOS,叫bootloader、。
点赞  2009-8-10 22:15
如果已经有移植成功的bootloader,那么这些数据也可以从bootloader的启动代码中提取出来。
点赞  2009-8-10 22:17
引用: 引用 8 楼 goodlinux 的回复:
如果已经有移植成功的bootloader,那么这些数据也可以从bootloader的启动代码中提取出来。


那么这些数据谁去用呢?

如果不写这些数据的话,会有什么影响呢?
点赞  2009-8-10 22:31
这些数据是用来初始化内存控制器和一些关键寄存器的。
你的jtag少些是,会通过jtag的协议去初始化这些寄存器。是CPU和内存达到可用的状态。

当然bootloader启动也需要初始化CPU吧?也是要设置一下寄存器的。
点赞  2009-8-10 22:36
bootloader没有这些初始化,启动不了

jtag少些没有这些初始化数据,烧不进去,
就这么简单
点赞  2009-8-10 22:37
引用: 引用 11 楼 goodlinux 的回复:
bootloader没有这些初始化,启动不了

jtag少些没有这些初始化数据,烧不进去,
就这么简单


哦,明白了,我以为片上Flash是可以直接用的,还是我知识不足啊

多谢指点
点赞  2009-8-10 23:00
初始化了,内存才会工作啊,不然怎么下载东西到内存啊。
点赞  2009-8-11 11:15
先是分配空间,同时初始化值是为了以后读写数据的入口状态
点赞  2009-8-11 12:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复