天嵌 ARM开发社区

 找回密码
 注册
查看: 5206|回复: 0

TQ210裸机编程(12)——从SD卡拷贝程序到DDR内存

[复制链接]
freewing 发表于 2014-6-8 01:08:51 | 显示全部楼层 |阅读模式
参考手册:

S5PV210_UM_REV1.1.pdf       S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf




参考《TQ210裸机编程(5)——S5PV210启动流程和系统时钟配置》




本次实验中,程序分为2部分,BL1和BL2。BL1烧写到SD卡的扇区1,BL2烧写到SD卡的扇区10,S5PV210上电从SD卡启动,内部IROM中的代码自动拷贝BL1到内部SRAM,然后运行BL1,我们在BL1初始化串口、DDR内存、时钟,拷贝BL2到DDR,然后跳转到DDR执行BL2。




要从SD卡拷贝程序到内存,不用我们自己实现拷贝函数,S5PV210内部IROM固话的代码包含了这个拷贝函数,我们只需按照手册(S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf)要求调用这个函数就可以了。







关键点解析:

1、如何判断SD卡当前启动通道?

在《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》中2.6 Global Variable中写着地址0xD0037488保存着V210_SDMMC_BASE(SDMMC寄存器的基地址),再查看《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》中7.9.1  REGISTER MAP,0xEB00_0000即代表通道0,0xEB20_0000即代表通道2.




2、在《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》写着SD/MMC Copy函数的工作时钟源External source clock parameter is used to fit EPLL source clock at 20MHz. ,这个EPLL的20MHz时钟在系统上电由内部IROM代码初始化,因此我们必须先执行程序拷贝,在执行自己的时钟初始化代码。




3、系统自动初始化的时钟配置信息在《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》中2.11 Clock Configuration




下面列出源程序

root@zjh:/mnt/hgfs/E/cloud/embedded/my_code/tq210/12-CopySDMMCtoMem# tree .
.
├── bl1
│   ├── clock.c
│   ├── copy.c
│   ├── ddr.c
│   ├── link.lds
│   ├── Makefile
│   ├── start.S
│   ├── types.h
│   ├── uart.c
│   └── uart.h
├── bl2
│   ├── led.c
│   ├── Makefile
│   ├── start.S
│   └── \350\257\264\346\230\216.txt
└── \350\257\264\346\230\216.txt

2 directories, 14 files

编译步骤:

进入变bl1文件夹执行

root@zjh:/mnt/hgfs/E/cloud/embedded/my_code/tq210/12-CopySDMMCtoMem/bl1# make
arm-linux-gcc -c start.S -o start.o
arm-linux-gcc -c clock.c -o clock.o -fno-builtin
arm-linux-gcc -c uart.c -o uart.o -fno-builtin
arm-linux-gcc -c ddr.c -o ddr.o -fno-builtin
arm-linux-gcc -c copy.c -o copy.o -fno-builtin
arm-linux-ld -Tlink.lds -o uart.elf start.o clock.o uart.o ddr.o copy.o
arm-linux-objcopy -O binary uart.elf uart.bin
arm-linux-objdump -D uart.elf > uart.dis




进入bl2文件夹执行

root@zjh:/mnt/hgfs/E/cloud/embedded/my_code/tq210/12-CopySDMMCtoMem/bl2# make
arm-linux-gcc -c start.S -o start.o
arm-linux-gcc -c led.c -o led.o
arm-linux-ld -Ttext 0x20000000 -o led.elf start.o led.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis




使用前面几节讲解到的addheader给bl1下的uart.bin添加头信息。


root@zjh:/mnt/hgfs/E/cloud/embedded/my_code/tq210/12-CopySDMMCtoMem/bl1# ../../addheader uart.bin /mnt/hgfs/E/210.bin




最终得到要烧写的程序210.bin和led.bin,我们将210.bin 烧写到SD的扇区1,将led.bin烧写到SD的扇区10,从SD卡启动可以看到串口打印信息(从BL1中打印),以及跑马灯效果(BL2)。




有读卡器的朋友可以在虚拟机下使用dd命令烧写:

root@zjh:/mnt/hgfs/E/cloud/embedded/my_code/tq210/12-CopySDMMCtoMem/bl1# dd iflag=dsync oflag=dsync if=./210.bin of=/dev/sdb seek=1




root@zjh:/mnt/hgfs/E/cloud/embedded/my_code/tq210/12-CopySDMMCtoMem/bl2# dd iflag=dsync oflag=dsync if=./led.bin of=/dev/sdb seek=10





对于没有读卡器的朋友,可以在Windows下使用我写的工具进行烧写,选择文件210.bin烧写到扇区1,然后选择文件led.bin烧写到扇区10.






所有裸机程序下载地址在我的QQ群共享里面:153530783





转载请注明来源:http://blog.csdn.net/zjhsucceed_329/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-24 23:47 , Processed in 1.078125 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表