×
单片机 > 单片机程序设计 > 详情

Tiny4412和Tiny210裸板程序烧写比较

发布时间:2020-05-30 发布时间:
|

1、Tiny4412启动时首先运行固化在芯片内部iROM中的程序,把启动设备(可能是EMMC/nand flash、SD、USB启动)特定位置处的程序读入片内存 (iRAM) ,并执行它,BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个被称为 BL2(Bootloader 2) ,是我们编写的源码。(详情可参考博文“Exynos4412的启动过程分析”)在汇编流水灯程序中我们通过mkbl2工具制作的BL2:

    sudo ./sd_fusing.sh /dev/sdc ../../../hardware/1th_led_s/led.bin

分析sd_fusing.sh可知:

####################################

# check files

SOURCE_FILE=$2

MKBL2=./my_mkbl2

# make bl2

#使用my_mkbl2工具来处理传入的bin,从而生成bl2.bin

${MKBL2} ${SOURCE_FILE} bl2.bin 14336                                

####################################

# fusing images

signed_bl1_position=1  #bl1的镜像烧写到sd卡的第1个扇区

bl2_position=17        #bl2的镜像烧写到sd卡的第17个扇区

# BL1 fusing 

echo "---------------------------------------"

echo "BL1 fusing"

# 烧写bl1到SD卡512字节处

dd iflag=dsync oflag=dsync if=/work/4412/tools/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position

# BL2 fusing 

echo "---------------------------------------"

echo "BL2 fusing"

# 烧写bl2到SD卡(512+8K)字节处, 512+8K=17x512,即第17个block

dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position

# flush to disk 

# 同步文件

sync

rm bl2.bin

####################################

# Message Display 

echo "---------------------------------------"

echo "source file image is fused successfully."

echo "Eject SD card and insert it to Exynos 4412 board again."

故Tiny4412是把裸板固件放在SD卡BL2地址处运行。

2、Tiny210(S5PV210)上电将iROM(interal ROM)处执行固化的启动代码,它对系统时钟进行初始化,对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到iRAM(0xd002_0000处,其中0xd002_0010之前的16个字节存储的的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,检验OK转入BL1进行执行;BL1执行完成后,开始执行BL2,BL2加载内核,把OS在SDRAM中运行起来。

S5PV210用SD/MMC启动时:

在这种模式下,BL0会跳过SD的block0,从SD的block1加载,先加载block1到0xD002_0000,通过header中的size判断需要读取多少block,然后再加载剩余的block。 最后计算除header外的数据的校验和,和header中的校验和比较,一旦匹配,则跳转到0xD002_0010。 因此,当我们选择这种方式的时候,需要给BL1的镜像加上16B的header,然后以block1位置开始存放整个镜像。

而在烧写裸板时要先把编译出来的裸板固件经过mktiny210spl.exe工具(是u-boot生成的,可以参考博文:“自己写mktiny210spl工具生成bin文件”制作一个)重新生成一个新的bin文件,而该bin文件只比旧的bin文件多出四行信息(共16字节不能够是真正的代码,而应该是头部信息),对上述内容解析:

---------------------------------------------

0x0地址:BL1 size

---------------------------------------------

0x4地址:必须设置为0 (是规定)

---------------------------------------------

0x8地址:CheckSum

---------------------------------------------

0xc地址:必须设置为0 (是规定)

---------------------------------------------

进一步解析:

BL1 size:就是用于告诉IROM中的代码,需要从外部存储器中(SD,Nand等)拷贝多大的数据到IRAM中,最多16K;

CheckSum:用作校验,当IROM将数据往IRAM拷贝完以后,会自动生成一个“校验数据”,然后会让该“校验数据”和CheckSum进行比较。

根据:“SD卡烧写210裸板、uboot”

先用mktiny210spl.exe工具生成可用的.bin文件,再用下面方法烧写:

下载sd-wy.bin文件到SD卡,PC上执行:

    dd iflag=dsync oflag=dsync if=sd-wy.bin of=/dev/sdb seek=1

下载sd-wy.bin文件到SD卡,dd命令用于对SD进行烧写,根据三星手册《S5PV210_iROM_ApplicationNote_Preliminary_20091126》,将sd-wy.bin烧写到SD卡的第1个Block,保留第0个block不用,每个block=512B。 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
TQ210天嵌开发板S5PV210 LED闪烁程序C语言代码记录