加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

mini2440bootloader的移植

发布时间:2020-12-15 06:13:33 所属栏目:百科 来源:网络整理
导读:? ? 最近由于学习的需要,准备开始深入的学习linux驱动开发,然而,自学是一个很痛苦的过程,刚起步,就被bootloader的一直给卡住了,然后各种百度,下面是整理的一些学习的心得,拿出来与大家分享分享。(s说明,我用的是windows7,没有并口,所以用了板子配
?

? 最近由于学习的需要,准备开始深入的学习linux驱动开发,然而,自学是一个很痛苦的过程,刚起步,就被bootloader的一直给卡住了,然后各种百度,下面是整理的一些学习的心得,拿出来与大家分享分享。(s说明,我用的是windows7,没有并口,所以用了板子配套的jlink,usb转并口,windows7没有超级终端,我用的是SecureCRT)

1.关于nandflash和norflash的区别

A,nor flash与nand flash的一些区别

1)接口区别:
NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。
NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。
通俗的说,就是光给地址不行,要先命令,再给地址,才能读到NAND的数据。而且都是在一个总线完成的。
结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.
2)性能区别
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
● NOR的读速度比NAND稍快一些。
● NAND的写入速度比NOR快很多。
● NAND的4ms擦除速度远比NOR的5s快。
● 大多数写入操作需要先进行擦除操作。
● NAND的擦除单元更小,相应的擦除电路更少。

===========================================

ARM的nor flash与nand flash启动过程区别

B,s3c2440启动过程详解
1:地址空间的分配
2:开发板上一般都用SDRAM做内存flash(nor、nand)来当做ROM。其中nand flash没有地址线,一次至少要读一页(512B).其他两个有地址线
3:nandflash不用来运行代码,只用来存储代码,NORflash,SDRAM可以直接运行代码)
4:s3c2440总共有8个内存banks
? 6个内存bank可以当作ROM或者SRAM来使用
? 留下的2个bank除了当作ROM 或者SRAM,还可以用SDRAM(各种内存的读写方式不一样)
? 7个bank的起始地址是固定的
? 还有一个灵活的bank的内存地址,并且bank大小也可以改变
5:s3c2440支持两种启动模式:NAND和非NAND(这里是nor flash)。
具体采用的方式取决于OM0、OM1两个引脚
OM[1:0所决定的启动方式
OM[1:0]=00时,处理器从NAND Flash启动
OM[1:0]=01时,处理器从16位宽度的ROM启动
OM[1:0]=10时,处理器从32位宽度的ROM启动。
OM[1:0]=11时,处理器从Test Mode启动。

当从NAND启动时

??? cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行


当从非NAND flash启动时

??? nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000). 然后cpu从0x00000000开始执行(也就是在Norfalsh中执行).

??? ?但是,由于水平的问题,用jfalsh直接移植的方法始终未成功,就是在还剩1%时给我报个地址错误,忘看到的大侠们给小弟指导指导,下面是我用的一种间接移植的方法,很好使!

?

在移植u-boot的NAND FLASH部分特别是NAND FLASH启动u-boot部分时,始终要把移植的u-boot烧写进NAND FLASH以验证NAND 启动u-boot能否成功。在实际过程中,即使用AXD仿真调试没问题了,但并不代表就能一次成功,往往一条指令的不小心,就可能导致挂机,再也起不来了。现在电脑上都很少有并口了,而JLINK烧写FLASH功能强大,但烧写Nor Flash时需要设置SDRAM,否则速率很慢;烧写Nand Flash只是从理论上能够达到,但是还没有人直接实现这点。为了在挂机或验证自己移植的u-boot能否从FLASH启动时,能够方便把u-boot镜像烧写进FLASH,把网上介绍的关于使用JLINK间接烧写FLASH的方法说明在这,同时增加了自己的使用心得和遇到问题的解决方法。

2. 使用JLINK间接烧写NAND FLASH的方法:

2.1 使用JLINK间接烧写FLASH的原理:

使用JLINK间接实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来烧写。

2.2 操作步骤:

操作步骤是,先把一个SDRAM的初始化程序init.bin下载到内部SRAM去运行,使SDRAM中可使用;然后再下载特制的或者好的、可启动并支持FLASH读写等操作的u-boot(称为u-boot0.bin,一定要可支持FLASH读写等操作)到SDRAM中运行,这个特制u-boot能实现对Nor、NAND FLASH读写等操作;然后通过JLINK或TFTP(需要特制的u-boot实现网络功能)再把另一个的u-boot(称为u-boot1.bin,可以是开发板本身带的u-boot或自己移植的uboot镜像文件,或者是这个特制的u-boot.bin镜像文件)下载到SDRAM的另一地址中;最后,在u-boot0.bin下把u-boot1.bin烧写进FLASH中。

init.bin文件可从本人资源上下载:http://download.csdn.net/source/3396427

下面分别说明

2.2.1 连接硬件

把JLINK的JTAG口连接到板上的JTAG,注意引脚要匹配起来!如果JLINK带的JTAG线不能与板的JTAG对应起来,就要自己做转接,我的就是这样,自己转接了一下!

2.2.2 运行J-Link commander

J-Link commander启动界面如下图所示,如果没检测到CPU,执行usb命令连接JLink,注意,S3C2440 CPU的ID是:0x0032409D

2.2.3 在J-Link commander下载运行特制的程序

对于S3C2410、S3C2440处理器,它们内部有4K的SRAM,当使用Nor Flash启动时,地址为0x40000000;当使用Nand Flash启动时,地址为0。

对于S3C2410、S3C2440,一般都外接SDRAM。SDRAM被使用之前,需要经过初始化,这个初始化由init.bin程序完成。

假设init.bin在E:/1/init/目录下,u-boot0.bin和u-boot1.bin在E:/1/目录下。

1). 设置TCK为12M,下载程序时会很快 ,可以不做

J-Link>speed 12000

2). 下载并运行init.bin,这是用来初始化SDRAM的

a. 如果是NAND FLASH启动:?
J-Link>loadbin e:/1/init.bin 0??????
J-Link>setpc 0?
J-Link>g?
b. 如果是NOR FLASH启动:?
J-Link>loadbin e:/1/init.bin 0x40000000??????
J-Link>setpc 0x40000000?
J-Link>g

3). 下载并运行特制的u-boot.bin,提示,这个u-boot也并不就是特制的,可使用自己的,但必须要求具备读写FLASH等操作功能,在这里烧写的是扬创开发板所带的u-boot:

J-Link>loadbin e:/1/u-boot0.bin 0x33f80000?
J-Link>setpc 0x33f80000?
J-Link>g

上述操作如下图所示:

同时,u-boot已经启动了,在USB转串口中可以看到启动信息:

U-Boot 1.2.0-utulinux_s3c2440_bootloader (Sep 12 2007 - 23:33:00)

DRAM:? 64 MB
Flash:? 0 kB
NAND:? Bad block table not found for chip 0
Bad block table not found for chip 0
64 MiB
In:??? serial
Out:?? serial
Err:?? serial
Hit any key to stop autoboot:? 0

utu-bootloader=>>>
utu-bootloader=>>>

注意:在串口中看到启动信息后,可能你会发现,在uboot提示信息下可能对你的操作不响应,这时,你可在J-Link commander继续执行一个g指令就正常了。

4)下载目标u-boot1.bin到FLASH中,这里的u-boot1.bin是本人基于u-boot-2011.03移植的u-boot镜像文件

进入到u-boot0之后,就可以通过网络、串口下载文件了,然后使用u-boot0里的nand rase、nand wirte命令来烧写u-boot1.bin文件了,当然,如果没有网络,也不想忍受串口的速率,可通过jlink commander下载(推荐),如下操作:

a)通过JLINK把u-boot1.bin下载到SDRAM中,

J-Link>loadbin e:/1/u-boot1.bin 0x30000000

同样的,下载后,在u-boot0串口操作符下,又不响应了,在J-Link commander输入g命令就可以解决了。

b)在u-boot0串口操作符下,把刚才下载到0x30000000的u-boot1.bin烧写到NAND FLASH中

utu-bootloader=>>>nand erase 0 40000;nand write 30000000 0 40000

NAND erase: device 0 offset 0x0,size 0x40000
Erasing at 0x3c000 -- 100% complete.
OK

NAND write: device 0 offset 0x0,size 0x40000
262144 bytes written: OK
utu-bootloader=>>>

这样就把u-boot1.bin烧写进NAND FLASH了,复位重启可看到u-boot1.bin的启动信息:

u-bootloader=>>>reset

U-Boot 2011.03 (Jun 26 2011 - 02:40:58)

DRAM:? 64 MiB
NAND:? NAND_ECC_NONE selected by board driver. This is not recommended !!
64 MiB
*** Warning - bad CRC,using default environment

In:??? serial
Out:?? serial
Err:?? serial
Net:?? CS8900-0
[reille2440]#

3. "unable to halt arm core"的解决办法

在使用JLINK过程中,出现了"unable to halt arm core"的错误,解决方法是:把JLINK的USB口拔掉,同时把板的电脑断掉,稍等片刻,然后再重新开始就可以了。

4. 参考资料

使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法:http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3228953

U-Boot调试环境搭建请教~~如何实现u-boot和内核的源码级调试:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3521744&bbs_page_no=1&bbs_id=1032

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读