GEC210 烧写裸机程序到SD卡、flash

主机平台:Linux CentOS 6.5

arm平台:粤嵌GEC210开发板(S5PV210)


注:以下方法与S5PV210的启动流程有关,具体请参考S5PV210_UM_REV1.1“和“S5PV210_iROM_ApplicationNote_Preliminary_20091126”这两本数据手册,也因此在某些地方可能只S5PV210,其它的芯片请参照相关的数据手册。


总体步骤

SD卡:

1.编译程序

2.添加16字节的头信息,包括计算长度字段和校检和字段

3.将二进制文件以第二个扇区(512字节处)为起始地址写入SD卡


flash:

1.编译程序

2.添加16字节的头信息,长度字段为0x2000,校捡和字段随意(这样填写是因为当用fastboot烧写代码到flash时,会自动计算  0x2000字节的校并填入校检和字段中

3.烧写代码到flash中



具体步骤

SD卡:

1.将裸机程序写入SD卡,需要了解SD卡的启动流程以及代码在SD卡的位置

启动流程:

由上图可以看出,在执行完以固化好的IROM里的程序后,将复制启动设备的BL1到内存里运行。所以需要知道BL1的位置:

这里可以清楚看出BL1的起始地址位置是SD卡的第扇区处(512字节)。此外,在S5PV210中,BL1大小为8k,也就是说你的裸机程序不能超过8k,否则就要将代码复制到BL2在运行。为了简化问题,假设程序是小于8k的。


2.为二进制代码添加16字节的头信息

第一个字段为包括头信息的BL1大小

第三个字段为校检和,计算方式:

for(count=0;count< dataLength;count+=1)
{
        buffer = (*(volatile u8*)(uBlAddr+count));
        checkSum = checkSum + buffer;
}
其余两个字段为0


3.将二进制代码写入SD卡

这里的方法有很多:

(1在linux下使用dd命令

(2)在windows下使用dd_for_windows工具

(3)在windows下使用IROM_Fusing_Tool工具

(4)通过uboot,用dnw命令将代码写入内存,用mmc write 写入SD卡

这里用的是第(4)种方法


4.然后写入过程:

(1)启动uboot

2)用dnw工具将二进制文件写入内存,假设是0xc0000000

(3)用mmc list查看可用的mmc设备

GEC210 # mmc list
S3C_HSMMC0_dev0
S3C_HSMMC2_dev1
4)通过mmc write 写入

GEC210 # mmc write S3C_HSMMC2_dev1 0xc0000000 0x1 0x10

MMC write: dev # 0, block # 1, count 16 ... 16 blocks written: OK

mmcwrite参数:

设备标识:可由mmc list获得,不知到SD卡对应那个标识的话可以逐个试

内存读取起始地址:从内存中哪个地址开始读取,此处是0xc0000000

SD卡写入起始扇区号:扇区号从0开始,有前面可知,写入的起始扇区号为1,所以此处为0x1

读取的扇区数:可根据程序长度设定,也可以直接写BL1的大小,BL1大小为8k,即16ge扇区,也就是0x10


若出现:16 blocks written :OK  表示写入成功



flash:

1.代码在flash中的位置


也就是说,代码放在flash最前面就可以了


2.添加头信息

注意了,这里的头信息和SD卡时不同,代码长度字段必须为0x2000,校检和字段不用算,随便填,烧写时会自动计算的


3.烧写代码

有两种烧写方法:

用fastboot工具烧写(需要先下载fastboot工具,过程较简单

(1)启动开发板上的uboot,执行fastboot命令

(2)在linux下,执行fastboot flash uboot  <二进制文件>


arm:

GEC210 # fastboot
Fastboot: employ default partition information
[Partition table on NAND]
ptn 0 name='uboot' start=0x0 len=0x100000(~1024KB) 
ptn 1 name='recovery' start=0x100000 len=0x500000(~5120KB) 
ptn 2 name='kernel' start=0x600000 len=0x500000(~5120KB) 
ptn 3 name='ramdisk' start=0xB00000 len=0x300000(~3072KB) 
ptn 4 name='system' start=0xE00000 len=N/A (Yaffs)

//<span style="font-size:14px;">在linux下执行fastboot后会出现下面信息
</span>Received 17 bytes: download:0006c000
Starting download of 442368 bytes

downloading of 442368 bytes finished
Received 11 bytes: flash:uboot
flashing 'uboot'

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

NAND write: device 0 offset 0x0, size 0x80000
Main area write (4 blocks):
 524288 bytes written: OK
partition 'uboot' flashed

linu x:

# fastboot flash uboot u-boot-yaffs-4.3Inch.bin
sending 'uboot' (432 KB)... OKAY
writing 'uboot'... OKAY



用dnw和nand write 命令(不需要fastboot,但比较麻烦

(1)用dnw将二进制文件写入内存,假设为0xc0000000

(2)用nand erase擦除数据:nand erase 0x0 0x20000

用法:nand erase<起始地址<字节数>

注意:<起始地址><字节数> 在这两个参数必须要与block对齐,这里的block大为0x20000字节,所以字节数最小也要填写0x20000


(3)用nand write写入:nand write 0xc0000000 0x0 0x20000

第一个参数为要烧写的数据在内存中的起始地址,后面的两个参数与nand erase 相同








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值