1. S3C2416概述
S3C2416是低功耗、高性能、低成本的SAMSUNG ARM9(ARM926EJ)处理器,目前三星已停止生产S3C2440, S3C2416具有更高的性能,以及更低的价格,是S3C2440、S3C2410等处理器的完美替代者。相比S3C2440,S3C2416采用了双总线架构,主频也可稳定达到533M,内存接口也支持DDR/DDR2等,具有2D图形加速器,支持MLC nand flash,支持SD卡启动。尤其是支持SD卡启动,使之代码调试,烧录变得极其简单,无需任何的代码烧录设备,只要把代码烧写进SD卡,设置从SD卡启动即可对代码进行更新。S3C2416的特性有以下几点:
- 1.3V 内核供电,主频400M, 1.8V/2.5V/3.0V/3.3V ROM/SRAM储存器供电, 1.8V/2.5V mSDR/mDDR/DDR2 动态存储器供电,1.8V/2.5V/3.3V 外部I/O 供电,具备16KB 的指令缓存和16KB 的数据缓存和MMU
- 外部存储控制器(mSDR/mDDR/DDR2控制和片选逻辑)
- LCD 控制器(最大支持256K色)提供1 通道LCD 专用DMA
- 6通道DMA 并有外部请求引脚
- 4通道UART(IrDA1.0,64字节发送FIFO和64字节接收FIFO)
- 1通道高速SPI
- 1通道IIC总线接口(支持多主机)
- 1通道IIS总线音频编解码器接口(24位,端口0支持5.1声道)
- AC97/PCM编解码器接口(和IIS复用)
- 2通道高速MMC/SD接口(SD主接口协议2.0版,MMC协议兼容4.2版)
- 2通道USB主机(兼容1.1版)/1通道USB设备(兼容2.0版)
- 4通道PWM 定时器和1通道内部定时器/看门狗定时器
- 10通道12位ADC 和触摸屏接口
- 具有日历功能的RTC
- 138个通用I/O口和16通道外部中断源
- 电源管理具有工作,空闲,待机,深度待机和休眠模式
- 具有PLL片上时钟发生器
2. S3C2416编程环境概述
2.1. 代码编译工具
S3C2416是ARM926EJ内核,使用armv5指令集,相比armv4指令集,指令只是增加了软件断点BKPT,双字加载,存储指令LDRD/STRD等。因此,只要能编译armv4指令集(常见arm7/arm9芯片采用的指令版本)的编译器都可以用来开发S3C2416。目前流行的常用arm编译器有IAR,Keil MDK,arm-linux-gcc等。尤其是对于嵌入式linux方面的开发,几乎无疑选用arm-linux-gcc,但此处笔者暂时是用来作裸机方面的开发,因此选用一款windows下集成开发环境更适合。Keil用于开发arm的集成环境有很多称呼uVersion、MDK、Keil for arm等。而Keil公司已经被ARM公司收购,因此编译器方面选择MDK是不错的选择。
图2.1-1 MDK集成开发环境
2.2. 三星专用工具
对于三星系列的cpu,三星公司开发了两个专用工具来开发其门下的芯片。dnw.exe用来串口调试以及通过usb进行下载,而IROM_Fusing_Tool.exe是用来烧写代码到sd卡特定位置的,通过设置sd卡启动,即可运行sd卡里面的代码。在没有任何烧录设备时,这是唯一简单,省成本的代码烧录方式。从sd卡启动后可把bootloader烧写进nand flash等固化存储器,以后通过nand启动等方式运行bootloader即可。
图2.2-1 串口调试及usb下载工具dnw
图2.2-2 sd卡启动代码烧录工具
3. S3C2416启动模式
S3C2416支持多种启动模式,通过外部引脚OM[4:0]来决定从哪个存储设备上启动,引脚配置对应的启动模式见下图。目前市面上的各类S3C2416开发板都是参照三星smdk2416开发板进行开发的。由于有了IROM启动以及NAND启动,Nor flash已基本没有用处,因为代码一般是不会在Norflash执行,都是要搬到RAM里执行,不然性能无法忍受。因此,市面上的开发板基本都是不再配置Nor flash,只配置了NAND flash。笔者此处只讲解市面上S3C2416开发板支持的两种启动模式,IROM启动和NAND启动。
图3-1 S3C2416启动模式配置
图3-2 启动模式对应的存储器映射
3.1. IROM启动
通过设置[OM4, OM3, OM2, OM1, OM0] = [0,1,0,0,x],上电复位即可从IROM启动,IROM启动即先执行芯片固化代码(在0x0位置处),固化代码先进行初始化芯片,如设置系统时钟,初始化堆栈等,随后会再根据相关引脚的配置([GPC7:GPC5]),确定启动设备是SD/MMC还是NAND,对于IROM NAND启动,固化代码从[GPC7:GPC5]的引脚配置状态得出NANDFLASH的信息,如页大小,地址周期多少。之后固化代码再从NANDFLASH的0x0地址偏移出读出8k的代码到内部RAM地址0x40000000处,这块8k的IRAM就被叫做Steppingstone。因为这8k的IRAM代码往往需要进一步引导用户的其它代码到RAM运行。对于IROM SD/MMC启动,固化代码会直接从SD/MMC卡的一个特殊位置读出8k的代码到0x40000000处的Steppingstone。复制完代码到Steppingstone后,固化代码跳转到0x40000000处开始执行用户的代码。IROM启动的更多细节,笔者已在文章的最后给出相关的参考文档S3C2450_51_16_IROM_ApplicationNote.pdf。
图3.1-1 IROM启动存储设备配置
3.2. NAND启动
首先要先确定板载NAND FLASH的信息,如地址周期,页大小等,然后再根据NAND FLASH的信息配置相应的[OM4:OM0],上电复位即可从NAND启动。NAND启动模式下,NAND控制器会自动从NAND FLASH 0x0地址偏移处拷贝8k的代码到内部RAM地址0x0处,用户代码从0x0处开始执行。从Samsung给出的S3C2416数据手册来看,较新的数据手册都已经把NAND启动[OM4:OM0]引脚配置以及内存映射信息都删除了,因此Samsung是推荐用户从IROM NAND启动的,因为这样用户代码可以统一处理IROM SD/MMC或IROM/NAND,而不用考虑过多的启动模式。
附注:
以下资料笔者认为是与本文相关的,可供学习与参考,点击下面链接即可下载。
a. S3C2416X_UM_Rev0.01_20080412.pdf,S3C2416数据手册,开发必备
b. S3C2450_51_16_IROM_ApplicationNote.pdf,S3C2416及其同类芯片的IROM启动流程详述
c. dnw.exe,三星cpu串口调试及usb下载工具
d. IROM_Fusing_Tool.exe,三星cpu从sd卡代码烧写工具,用于从sd卡启动