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? <二进制文件>
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 相同 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |