要研究裸机程序的编写,必须要有一个“全裸”的环境。友善提供的superboot可以提供执行用户自定义程序的能力,但其实这样运行的程序环境还是依赖于superboot的, 那些内存初始化、时钟初始化,串口初始化等工作都已经由superboot做了。tiny6410支持nandflash和sd卡启动两种模式,nandflash的烧写还是依赖superboot,所以比较简便的方法是通过sd卡启动,superboot本身也是通过sd卡启动的。
从网上搜了一下这方面的资料,主要参考文章来来去去就几篇, 三星的S3C6410_Internal_Rom_Booting.pdf是一份比较有用的资料,当然还有其中一些文章也比较有用,例如djyos的sd卡启动试验。这些文章描述s3c6410的要点总结如下:
(1) s3c6410启动过程分成BL0, BL1, BL2几个阶段, 其中BL0是固化在s3c6410内部的IROM中的, 该段程序根据所选择的启动模式从存储介质加载BL1. s3c6410支持从多种存储介质中启动,nandflash, sd卡,sdhc卡,OneNand, MoviNand.... BL1和BL2存储于这些存储介质中。这里我主要关注sd和sdhc卡.
(2) BL0在加载BL1前已经做了很多工作,sd控制器初始化,关闭看门狗等。
(3) 对于sd卡, BL1位于 (totalSector - 18) 的扇区;对于sdhc卡,BL1位于(totalSector-1042)的扇区。BL1由BL0加载到 0x0C000000处运行,大小为8K.
知道了上面几点,就可以制作sd启动卡了,可以将所编写的裸机程序放到BL1的位置。下面编写一个最简单的点灯程序(LED1~LED4全亮):
led.s:
1 .text
2 .code 32
3 .global _start
4 _start:
5 ldr r0,=0x7f008800
6 ldr r1,=0x11111111
7 str r1,[r0]
8 ldr r0,=0x7f008808
9 ldr r2,=0xff0f
10 str r2,[r0]
11 loop:
12 b loop
13
makefile:
CC=arm-linux-gcc
LD=arm-linux-ld
OBJCOPY=arm-linux-objcopy
CFLAG=-c
LDFLAG=-e _start -Ttext 0x0c000000
led.bin: led
$(OBJCOPY) -O binary $< $@
led: led.o
$(LD) $(LDFLAG) $? -o $@
led.o:led.s
$(CC) $(CFLAG) $< -o $@
clean:
rm *.o
rm led
rm led.bin
下面要将led.bin写入BL1.使用的是2G的sd卡,所以应该写到 -512 * 18处。网上的文章都说用WinHex写入,我使用的是linux环境,没有WinHex可用,不过其实dd命令就可以对绝对磁盘扇区做读写。还有一个问题就是要知道sd卡的大小, 用fdisk命令就可以了:
$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 2059 MB, 2059403264 bytes
207 heads, 37 sectors/track, 525 cylinders
Units = cylinders of 7659 * 512 = 3921408 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb2a60e0e
Device Boot Start End Blocks Id System
/dev/sdb1 1 525 2010469 b W95 FAT32
所以要写入的地址为 2059403264 - 18 * 512 = 2059394048
然后用dd命令写入led.bin :
$ sudo dd if=./led.bin of=/dev/sdb seek=2059394048 bs=1
至此一张可启动的sd卡就完成了,插入tiny6410, 选择sd卡启动模式,就可以看到板子启动时4灯全亮。
注:友善宣称它提供的SDFlasher.exe可以不论sd和sdhc卡都可以支持,从而优于三星提供的IROM_Flushing_Tool, 三星的要选择是sd还是sdhc。其实原理很简单,SDFlasher.exe写入时不论是-18扇区还是-1042扇区都写入。
上一篇:[S3C6410-01]烧写Linux3.0.1系统
下一篇:Tiny6410裸机编程-----WatchDog
推荐阅读最新更新时间:2024-11-09 10:16
设计资源 培训 开发板 精华推荐
- LTC3631EMS8E 小尺寸、有限峰值电流、20mA 稳压器的典型应用电路
- LTC3630EDHC 4V 至 65V 输入至 3.3V 输出、500mA 降压转换器的典型应用电路
- 使用 California Eastern Laboratories 的 ZICM3588SP2-1C-R 的参考设计
- 使用 ON Semiconductor 的 CAT3614 的参考设计
- LTM9009-14 演示板,14 位,80Msps,1.8V 八路串行 ADC,DC <艾因< 70MHz
- 使用 ROHM Semiconductor 的 BD45471 的参考设计
- 使用 NXP Semiconductors 的 TDA8559 的参考设计
- 用于射频发射器的 LTC3121EDE 单节锂电池至 6V、2.5W、3MHz 同步升压转换器的典型应用电路
- 用于 MCU 系统负载感应的 NCP300LSN25T1 2.5V 电压检测器的典型应用
- 使用 Analog Devices 的 LTC5800IWR-IPRB 的参考设计
- Silicon Labs BG22-EK4108A 开发套件 用科技连接未来 申请进行时!
- 据说,来挑战的都是“老司机”,TE答题排位赛火热进行中,不服来战!
- 泰克移动多媒体总线系列专题来袭~《HDMI2.0规范测试方案》下载有礼!
- 技术直播:TI 60G毫米波传感器概述和应用介绍,种草封装了天线的智能传感器IWR6843
- 西门子电子书下载《PCB 制造流程 - 通过数字化转型进行优化》
- 基于USB PD受电协议芯片CH224 DIY创意秀
- 马上下载Intel白皮书 赢取惊喜礼品
- CadenceLIVE China 2022中国线上用户大会 报名中!
- 英飞凌ADAS解决方案,确保您每一次安全出行 参与赢好礼!