最近无意中看到一篇关于s3c6410 RomCode的介绍,结合自己的经验,做个总结。
首先贴张图,具体描述下该芯片的启动方式及具体流程。
因为s3c6410的板子多数是从SD或者Nand方式启动,重点就先放在Nand启动上。
启动基本流程:
上图中的IROM为芯片固化程序,被称为BL0,开机后最先运行,它会去做一些硬件初始化动作,代码里通过检测GPN[15:13]管脚状态从相应设备指定区域BL1中拷贝4KB执行代码到Stepping stone中运行;
Disable the Watch-Dog Timer
Initialize the TCM.
Initialize the Block Device Copy Function.
Initialize the stack region.
Initialize the PLL.
Initialize the instruction cache.
Initialize the heap region.
Copy the BL1 to the stepping stone region.
Verify the integrity of BL1.
Jump to the stepping stone.
BL1中主要完成外部sdram和uart的初始化,并拷贝BL2至sdram中;
跳转到sdram中的对应地址执行剩下的bootloader,完成加载运行kernel和user image的功能。
代码流程图如下:
个人总结:
以目前市场上手机平台为例,基本都在RomCode中添加了uart和usb下载功能,搭配PC端工具直接完成对flash的烧写,使整个流程更符合开发需求。
在文中结尾有关于Error Handling的介绍
考虑到越来越多的安全需求,芯片的Secure Boot功能不可或缺,但是在功能调试中却难以分析,通过这种方式便可以快速定位问题原因,后续考虑在方案中添加异常波形设置。
笔者在开发手机Secure Boot方案时,功能调试过程中刷死了很多机器,但是却无法快速定位,基本每次都要接上Trace32进行调试,如果添加GPIO状态可以快速甄别,协助定位问题。
关键字:s3c6410
引用地址:
s3c6410 RomCode文档读后总结
推荐阅读最新更新时间:2024-11-13 06:53
ARM11(s3c6410)和ARM9(2440)的区别
1.主频不同。2440是400M的。6410是533/667M的; 2.处理器版本不一样:2440是ARM920T内核,6410是ARM1176ZJF内核; 3.6410在视频处理方面比2440要强很多。内部视频解码器,包括MPEG4等视频格式; 4.6410支持WMV9、xvid、mpeg4、h264等格式的硬解码和编码; 5. 6410多和很多扩展接口比如:tv-out、CF卡和S-Video输出等; 6. spi、串口、sd接口也比那两个要丰富; 7.6410采用的是DDR内存控制器;2440采用的是SDRam内存控制器; 8.6410为双总线架构,一路用于内存总线、一路用于Fl
[单片机]
LED:控制发光二极管
1、LED驱动实现原理,如图: 2、编写LED驱动 (1)创建LED驱动的设备文件 第一步:使用cdev_init函数初始化cdev 第二步:指定设备号 第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中 第四步:使用class_create宏创建struct class 第五步:使用device_create函数创建设备文件 #define DEVICE_NAME s3c6410_leds //定义设备文件名称 #define DEVICE_COUNT 1 //创建设备文件的数量 #define S3C6410_LEDS_MAJOR 0 //默认主设备号 #de
[单片机]
s3c6410 SD卡启动的Secure mode
前段时间我新来的同事弄SD卡启动的时候,按照三星Internal ROM Booting的Application Note弄得,也和网上的文章写的一样,irom启动完了以后开始u-boot的汇编初始化的代码,配置PLL、配置RAM...,然后到C语言段的时候开始调用irom自己提供的CopyMMCtoMem函数将代码复制到内存开始运行。但无论如何跑不起来,还报了4.2 Verification failure of BL1 integrity的错误。后来找了好久,用Jlink连上以后一步一步的看irom的代码才发现了是启动时候的Secure mode的问题。手册里面对于这方面什么都没写,就把我们知道的一点东西写一下吧。 在IR
[单片机]
s3c6410的UART设备驱动(5)
上一篇中说到了这个函数,源码如下: static int s3c6400_serial_probe(struct platform_device *dev) { dbg( s3c6400_serial_probe: dev=%pn , dev); return s3c24xx_serial_probe(dev, &s3c6400_uart_inf); } 现在接着往下说: int s3c24xx_serial_probe(struct platform_device *dev, struct s3c24xx_uart_info *info) { struct s3c24xx_uart_port *ourport;
[单片机]
s3c6410 定时器中断的实现
6410手册中的相关内容 five 32-bit timers Timers 0 and 1 include a PWM function Each timer has its own 32-bit down-counter which is driven by the timer clock. The down-counter is initially loaded from the Timer Count Buffer register (TCNTBn). When the down-counter reaches zero, the timer interrupt request is generated to infor
[单片机]
linux串口终端驱动——s3c6410平台(三)
上一篇关注的是tty上层字符层面的操作和注册,这一篇主要关注线程的注册,如何与上层建筑联系起来。 一、 tty_ldisc.c提供了tty_register_ldisc()接口用于注册线路规程,例如/driver/char/n_tty.c文件则针对N_TTY线路规程实现了具体的tty_disc结构体中的成员。 tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY) 其中有 #define N_TTY 0 struct tty_ldisc_ops tty_ldisc_N_TTY = { .magic = TTY_LDISC_MAGIC, .name = n_tt
[单片机]
s3c6410学习笔记-将内核zImage、文件系统写到nandflash、屏幕校准
1、之前已经将uboot写到nandflash里面了,接下来将内核zImage、文件系统写到nandflash。 2、编译内核 cd linux-2.6.28_smdk6410 make clean make distclean cp smdk6410_config .config make menuconfig 将Device Drivers ---》Graphics support --- Support for frame buffer devices --- select LCD Type 分辨率调到480*272 保存(之后要校准屏幕) make make 完成之后将 /arch/a
[单片机]
s3c6410_时钟初始化
参考: 1)《USER'S MANUAL-S3C6410X》第三章 SYSTEM CONTROLLER 2)u-boot/board/samsumg/smdk6410/lowlevel_init.S 1. PLL与CLK的关系: 详细关系图见用户手册122页Figure 3-2 The block diagram of clock generator。 三种PLL:APLL,MPLL,EPLL 四种CLK:ACLK,HCLK,PCLK 1)APLL产生ACLK,,ACLK为CPU提供时钟; 2)同步模式下APLL产生HCLK/PCLK,异步模式下MPLL产生HCLK/PCLK,HCLK为AXI/AHB总线上的外设提供时钟,
[单片机]