2024年4月16日发(作者:甲月杉)
ARM微处理器 S3C2410的简介
1.1 ARM微处理器的介绍
1)ARM微处理器的工作状态和工作模式
从编程的角度看,ARM微处理器的工作状态有两种,可在两种状态之间切
换:
第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
2)ARM微处理器支持7种运行模式,分别为:
用户模式(USR):ARM处理器正常程序执行的模式。
快速中断模式( FIQ ):用于高速数据传输或通道处理用于快速中断服务
程序。当处理器的快速中断请求引脚有效,且CPSR(6位)中F位为0时(开
中断),会产生FIQ异常。
外部中断模式( IRQ ):用于通用的中断处理,当处理器的外部中断请求
引脚有效,且CPSR(7位)中I位为0时(开中断),会产生IRQ异常。系统的
外设可通过该异常请求中服务。
特权模式或管理员模式(SVE):操作系统使用的保护。执行软件中断SWI
指令和复位指令时,就进入管理模式,在对操作系统运行时工作在该模式下。
1.2 S3C2410微处理器
1.2.1 概述
S3C2410是韩国三星公司的一款基于ARM920T内核的16/32位RISC嵌入式
微处理器,主要面向手持设备以及高性价比,低功耗的应用。运行的频率可以
达到203MHz。
ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。其
中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache
组成。
ARM920T有两个协处理器:CP14和CP15。CP14用于调试控制,CP15用于
存储系统控制以及测试控制。
ARM920T体系结构框图
图2-1 ARM920T体系结构框图
1.2.2 S3C2410微处理器的结构
S3C2410内部结构原理
内部原理框图如下:
图2-2
S3C2410内部结构原理
ARM 微处理器中共定义了37个编程可见寄存器,每个寄存器的长度均为
32位。根据不同的用途,可将其划分为以下几下:30个通用寄存器,在任意一
种处理器模式下,只有15个通用寄存器可以使用,编号分别为r0, …, r14。
其中,r13一般作为堆栈指针寄存器( SP: Stack Pointer )。该寄存器由ARM
编译器自动使用。r14一般作为链接寄存器( LR: Link Register )。当系统中
发生子程序调用时,用r14来记录返回地址。如果返回地址已经保存在堆栈中,
则该寄存器也可以用于其它用途。
程序指针( PC: Program Counter )PC即为r15,用于记录程序当前的运行
地址。ARM处理器每执行一条指令,都会把PC增加4字节(Thumb模式为两个字
节)。此外,相应的分支指令(如BL等)也会改变PC的值。
1) 状态备份寄存器( SPSR: Saved Program Status Resister )
CPSR用于存储条件码。各种模式公用该寄存器
SPSR寄存器主要是在处理器异常发生时,用来保存CPSR (Current Program
Status Resister)。每一种处理器模式下将使用一个SPSR来保存CPSR,而用
户模式和系统模式下不需要SPSR,因为该模式下不会发生异常。
ARM 高级中断控制器有 8 种优先控制权,可屏蔽特定中断源,提供中断向
量控制器,同时可以接受 32 个中断源请求,ARM 中断体系充分减少中断响应
时间,提高系统的实时性。
图2-3 S3C2410B系统应用板
S3C2410B开发板是采用Samsung S3C2410B ARM920T微处理器的最小系统
板,具有开放式设计、集成度高、尺寸小、可扩展性强、低功耗等特点。S3C2410B
开发板适用于下一代无线应用、数字家电、车载设备、通信终端等应用场合,
是嵌入式工程师进行上述应用开发的最佳选择。
S3C2410X最小系统
S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造
工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,
支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的
Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接
口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最
高可运行在203MHz。
核心板的尺寸仅相当于名片的2/3大小,尺寸如此小巧的嵌入式核心板是国内首创。
开发商可以充分发挥想象力,设计制造出小体积,高性能的嵌入式应用产品。
(1)S3C2410芯片集成了大量的功能单元,包括:
◆ 内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据Cache,16KB指令Cache,
MMU。
◆ 内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。
◆ LCD控制器,一个LCD专业DMA。
◆ 4个带外部请求线的DMA。
◆ 3个通用异步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道
SPI
◆ 一个多主I2C总线,一个I2S总线控制器。
◆ SD主接口版本1.0和多媒体卡协议版本2.11兼容。
◆ 两个USB HOST,一个USB DEVICE(VER1.1)。
◆ 4个PWM定时器和一个内部定时器。
◆ 看门狗定时器。
◆ 117个通用I/O。
◆ 56个中断源。
◆ 24个外部中断。
◆ 电源控制模式:标准、慢速、休眠、掉电。
◆ 8通道10位ADC和触摸屏接口。
◆ 带日历功能的实时时钟。
◆ 芯片内置PLL。
◆ 设计用于手持设备和通用嵌入式系统。
◆ 16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。
◆ 带MMU的先进的体系结构支持WinCE、EPOC32、Linux。
◆ 指令缓存(Cache)、数据缓存、写缓存和物理地址TAG RAM,减小了对主存储器
带宽和性能的影响。
◆ ARM920T CPU核支持ARM调试的体系结构。
◆ 内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。
(2)系统管理
◆ 小端/大端支持
◆ 地址空间:每个BANK128MB(全部为1GB)。
◆ 每个BANK可编程为8/16/32位数据总线。
◆ BANK0到BANK6为固定起始地址。
◆ BANK7可编程BANK起始地址和大小。
◆ 一共8个存储器BANK。
◆ 前6个存储器BANK用于ROM、SRAM和其它。
◆ 两个存储器BANK用于ROM、SRAM、和SDRAM(同步随机存储器)。
◆ 支持等待信号用以扩展总线周期。
◆ 支持SDRAM掉电模式下的自刷新。
◆ 支持不同类型的ROM用于启动(NOR/NAND Flash、EEPROM和其它)。
(3)芯片封装
272-FBGA封装
S3C2410最小系统设计
摘要
:介绍了以嵌入式芯片S3C2410为核心的最小嵌入式系统构建方法,给出了S3C2410的复
位电路、电源电路、存储器电路和串口电路等硬件组成。还介绍了在ADS环境下自制的最小
Boot loader程序开发和调试方法。
关键字:嵌入式;S3C2410;ADS;Boot loader
S3C2410是Samsung公司基于ARM920T内核的嵌入式微处理器。本文以S3C2410为核心,配
置了最基本外围电路构成了最小的嵌入式系统,并在ADS上开发了启动程序,完成硬件初始化,配
置运行环境,串口调试功能。通过本文可以从底层了解S3C2410的特性和工作原理,并对Boot loader
程序会有深入的认识,为嵌入式系统的学习做铺垫。
S3C2410基本外围电路设计
系统框图
复位电路 Nand Flash
JTAG
电源、晶振
S3C2410
SDRAM
串口电路
图1 系统框图
Fig.1 Diagram of System
电源电路
S3C2410工作时内核需要1.8V电压,I/O端口和外设需要3.3V电压
[1]
。VDDi/VDDiarm引脚是供
S3C2410内核的1.8V电压;VDDalive引脚是功能复位和端口状态寄存器电压。 M12引脚RTCVDD是RTC
模块的1.8V电压,用电池供电保证系统的掉电后保持实时时钟。VDDOP引脚是I/O端口3.3V电压;
VDDMOP引脚是存储器I/O端口电压;还有一系列VSS引脚需要接到电源地上。3.3V电压从5V用
6
AMS1117-3.3转换得到如图2所示;1.8V从3.3V通过MIC5207-1.8转换得到如图3所示。
VDD5V
AMS1117-3.3
3
VinVout
2
C2
100u
VDD33
MIC5207-1.8
VDD33
1
2
C1
3
10u
IN
OUT
GND
BYP
EN
5
4
C3
470pF
C2
10u
VDD18
C1
图2 5V转3.3V
1
100u
G
N
D
图3 3.3V转1.8V
Fig.2 5V to 3.3V
Fig.3 3.3V to 1.8V
晶振电路
S3C2410内部有时钟管理模块,有2个锁相环,其中MPLL产生CPU主频FCLK、AHB总线外设
时钟HCLK和APB总线外设时钟PCLK;UPLL产生USB模块的时钟。OM3、OM2都接地时主时钟源和USB
模块时钟源都由外接晶振产生
[1]
。在XTIpll和XTOpll之间连接主晶振,可以选择12MHz晶振,通
过内部寄存器的设置产生不同频率的FCLK、HCLK和PCLK;在XTIrtc和XTOrtc上需要接32.768 kHz
的晶振供RTC模块使用。同时在MPLLCAP和UPLLCAP上也要外接5pF的环路滤波电容。晶振电路如
图4所示。
C1
XTIpll
15pF15pF
Y1
12MHz
C2
XTOpll
15pF15pF
R1
1M
C4
XTOrtcC6
5pF
UPLLCAP
C3
XTIrtcC5
5pF
Y2
32.768KHz
MPLLCAP
图4 晶振电路
Fig.4 Crystal Circuit
7
VDD33
复位电路
S3C2410的J12引脚为nRESET复位引脚,
D1
1N4148
R1
15K
1
74HC14
2
1
+
C1
2
74HC14
nRESET
nRESET上给4个FCLK时间的低电平后就可以复位。
可以设计如图5所示的复位电路,其中上电复位是靠
RC电路特性完成,开关二极管1N4148在手动复位时
10u
S1
Reset
对电容起快速放电的作用,因此可以把复位电平快速拉到0V。反响门74HC14可以起到延时作用,
图5 复位电路
保证有足够复位时间。
Fig.5 Reset Circuit
JTAG接口
S3C2410有标准的JTAG接口,TCK(H6)为测试时钟输入;TDI(J1)为测试数据输入;TDO(J5)
为测试数据输出;TMS(J3)为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;
nTRST(H5)为测试复位,输入引脚,低电平有效。其中nTRST、TMS、TCK、TDI需要接10K的上拉
电阻。通过JTAG口可以完成芯片测试或在线编程。
1.6SDRAM存储器
S3C2410有32根数据线和27根地址线,因此地址线的寻址范围为128M;但是S3C2410还有8
根存储器芯片片选信号线nGCS0~nGCS7,因此总的寻址空间为128M*8=1G。Nand
Flash启动模式下复位时S3C2410的存储器映射如图6所示。如当访问物理地址
0x08000000~0x10000000内的地址则nGCS1自动为低电平,以此类推。
通过图6可知SDRAM只能连接在nGCS6和nGCS7片选引脚上。S3C2410提供
了SDRAM的接口,其中包括nSRAS:行信号锁存;nSCAS:列信号锁存;nSCS[1:0](就
是nGCS[6:7]):片选信号;DQM[3:0]:数据屏蔽;SCLK[1:0]:时钟;SCKE:时钟
有效;nBE[3:0]:高/低字节有效;nWBE[3:0]:写有效。下面以2片HY57V561620
为例介绍SDRAM和S3C2410的连接方法。HY57V561620是4块16位32M的SDRAM
存储器,用2片可以构成32位的64M存储器。HY57V561620的行地址13位RA0~
RA12,列地址9位CA0~CA8,行和列地址是复用的。HY57V561620包括4个块,通
[1]
8
过BA0、BA1的组合选择块。HY57V561620是16位存储器,因此数据线为DQ0~DQ15,还有CS片选,
CLK时钟,CKE时钟使能,RAS行锁存,CAS列锁存, WE写使能等引脚。图7表示了HY57V561620
和S3C2410的连接方法,其中BA0、BA1需要连接ADD24和ADDR25,通过S3C2410的说明可知,因
为内存总大小是64M因此块选择信号必须使用ADDR24和ADDR25。因为HY57V561620的行列地址复
用,因此S3C2410必须知道行列地址各多少位,这个需要在BANKCON6寄存器的SCAN字段指定。
HY57V561620
ADDR2-ADDR14
DATA0-DATA15
ADDR24
ADDR25
nSRAS
nSCRA
A0-A12
D0-D15
BA0
BA1
RAS
CAS
LDQM
UDQM
WE
CLK
CKE
CS
VDD/VSS
nWBE0
nWBE1
nWE
SCLK0
SCKE
nGCS6
ADDR2-ADDR14
DATA16-DATA31
ADDR24
ADDR25
nSRAS
nSCRA
HY57V561620
A0-A12
D0-D15
BA0
BA1
RAS
CAS
LDQM
UDQM
WE
CLK
CKE
CS
VDD/VSS
nWBE0
nWBE1
图7 SDRAM连接图
nWE
SCLK0
SCKE
Fig.7 SDRAM Connection
nGCS6
NAND Flash 存储器
S3C2410内部有NAND Flash控制器,支持从NADN Flash启动。图8是K9F1208 64M Flash
芯片和S3C2410的连接方式。S3C2410采用一组内部寄存器来完成NAND Flash的操作。
++
[2]
VCC
116
2
+
图8 NAND Flash连接图
Fig.8 NAND Flash Connection
DB9
Fig.9 UART Connection
串口电路
S3C2410的UART提供了三个同步串行IO口,图9是COM0的连接方式。串口数据的收发有查
询方式、中断方式和DMA方式等,这些可以在UCON0 (UART channel 0 control register )寄存器
中设置。UTXH0 (UART channel 0 transmit buffer register )把要发送的数据写入此寄存器。URXH0
[3]
9
+
CLE
ALE
nFCE
nFRE
nFWE
R/nB
16
17
9
8
18
7
CLE
ALE
CE
RE
WE
R/B
IO1
IO2
IO3
IO4
IO5
IO6
IO7
IO8
29
30
31
32
41
42
43
44
DATA0
DATA1
DATA2
DATA3
DATA4
DATA5
DATA6
DATA7
C1+
C1-
C2+
C2-
VDD
V+
V-
GND
3
J?
5
9
4
8
3
7
2
6
1
4
5
K9F1208
6
15
14
13
7
8
T1OUT
R1IN
T2OUT
R2IN
T1IN
R1OUT
T2IN
R2OUT
11
TXD0(K15)
12
RXD0(K17)
10
9
MAX3232CAS
图9 UART连接图
(UART
channel 0 receive buffer register )读此寄存器获得串口接收的数据。串口一般可以用作程序运
行信息的输出和程序调试。
S3C2410启动过程
[1]
当S3C2410的OM0、OM1引脚接低电平时S3C2410就从NADN Flash启动。在NAND Flash
启动模式下上电后NAND Flash控制器自动将NAND Flash的最前面的4k区域拷贝到所谓的
“steppingstone”里面。这一过程完全由硬件自动实现。“steppingstone”实际上是S3C2410内部的
一个SRAM,因为NADN Flash不支持程序片内运行,因此必须把NAND Flash内的指令拷贝到SRAM
或SDRAM中才可以运行。在拷贝完前4k代码后,NAND Flash控制器自动将“steppingstone”映射
到arm地址空间0x00000000开始的前4k区域。在映射过程完成后NAND Flash控制器将pc指针直
接指向arm地址空间的0x00000000位置,准备开始执行“steppingstone”上的代码。而“steppingstone”
上从NAND Flash拷贝过来的4k代码,是程序员
写的boot loader的前4k代码。 boot loader之前
写好,并已经被烧写到NAND Flash的
0x00000000开始区域。
开始
设置中断向量表
关闭看门狗
关闭中断
初始化SDRAM
初始化串口
初始化网口
初始化USB
处理用户命令
结束
加载操作系统
开始
是否启动加载
N
初始化MMU
Y
简单Boot loader的制
作
Boot loader工作原理
[4]
设置堆栈
NandFlash拷贝
跳转main
结束
图10 流程图
Fig.10 Flow Chart
Boot loader是引导操作系统的程序,也是开发阶段目标板和PC机的通信工具。Boot loader
一般都放在NAND Flash 的起始位置,这样上电后Boot loader的第一个指令被自动执行。由于 Boot
Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大
部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都
用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给
10
复杂的功能,而且代码会具有更好的可读性和可移植性。阶段1和阶段2的工作流程如图10。
第一阶段
第一阶段主要工作是硬件设备初始化,加载 Boot Loader的stage2,准备RAM 空间;拷贝 Boot
Loader的stage2到RAM空间中;设置好堆栈;跳转到 stage2 的 C 入口点。
下面介绍ADS环境下开始制作简单Bootloader的方法。
先建立工程命名为myBoot,定义出程序的基本结构如下:
AREA myBoot, CODE, READONLY ;声明一个代码段,名称为myBoot
ENTRY ;程序入口声明,程序的开始执行位置
__ENTRY ;入口名称为__ENTRY
…… ;中间写主要代码
END ;程序结束
在myBoot工程的Settings中做一些设置。首先设置Target-->Target Setting--> post Link
中选择"ARM fromELF",表示在链接生成映像文件后,再调用FromELF命令映像文件转换成其他格式
的文件。Linker-->Arm Linker-->Output-->Link Type选Simple 简单连接方式;RO Base设置为
0x30008000 代码段连接地址。实际上RO BASE指定了程序的静态连接地址。程序真正被执行时所在
的内存地址叫做运行地址。如果连接时用到绝对地址的话运行地址和链接地址保持一致时程序才能
正常运行,这种代码叫做与位置有关代码。如果连接时没有涉及到绝对地址那么连接地址和运行地
址不一样程序也可以正常运行,这种代码叫做位置无关的代码。但是Bootloader一开始时被加载在
0x00位置开始运行,这会不会和RO Base设置地址冲突呢?实际上是会冲突的,解决冲突的办法就
采用位置无关代码(PIC)。实际上Boodloader的绝大部分代码最后想让它运行在0x30000800开始
的SDRAM里,只有第一阶段代码运行在0x00开始的SRAM里,因此把阶段1用位置无关的汇编代码
实现整个程序就正常运行了。RW Base是数据段的开始位置,如果不指定数据段就紧接着代码段放
置。如果自己设置的话程序里还需要自己处理加载数据段到实际数据段RW Base的搬移操作,否则
具有初始值的变量的初始值不起作用。在Options->Image entry point指定代码的入口__ENTRY。
程序的第一步要设置中断向量表。S3C2410有7种中断,中断入口地址在0x00开始处,每个中
断占用4可字节,正好可以放一个跳转指令。程序如下:
b ResetHandler ;复位中断,也是整个程序的入口,b指令是根据当前PC进行跳转,因此可
以实现位置无关代码
[5]
。在ResetHandler中需要做的工作有:关闭看门狗、关闭所有中断、设置主
频、初始化SDRAM、设置中断堆栈,最后搬移代码到SDRAM中。最后一步跳转到C程序的入口函数
11
main中。
第二阶段
这阶段代码用C语言编写,从main函数开始。这个阶段的主要任务有串口初始化、MMU的初
始化、USB初始化、以太网初始化等。Bootloader工作时显示屏可能还没有工作,或者目标板根本
就没有显示屏或键盘等设备,因此人机交互一般通过串口来实现。因此必须初始化串口,通过串口
打印运行信息或者接收用户输入。用串口连接到PC上,用专用或通用的串口软件来接收信息或输入
信息。USB口、以太网可以实现快速的文件传输,其他程序或操作系统内核可以通过USB或以太网
口快速的下载到目标板上。
[6]
程序的下载和调试
编译工程后会得到一个bin文件,这就是在目标板上运行最后文件。Bootloader一般用JTAG
口来烧写,因为Bootloader之前板子上其他任何接口(串口、USB、以太网)都是不可用的,Bootloader
是板子上运行的第一个程序。PC机上通过JTAG口烧写文件可以用这个程序,运行方
式如下sjf2410 /f:。如果JTAG口连接正常的话,会发现CPU,然后根据提示选择相应
的位置烧写就可以了。烧写完复位板子后可以在PC上通过串口看到Bootloader的运行情况。
12
2024年4月16日发(作者:甲月杉)
ARM微处理器 S3C2410的简介
1.1 ARM微处理器的介绍
1)ARM微处理器的工作状态和工作模式
从编程的角度看,ARM微处理器的工作状态有两种,可在两种状态之间切
换:
第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
2)ARM微处理器支持7种运行模式,分别为:
用户模式(USR):ARM处理器正常程序执行的模式。
快速中断模式( FIQ ):用于高速数据传输或通道处理用于快速中断服务
程序。当处理器的快速中断请求引脚有效,且CPSR(6位)中F位为0时(开
中断),会产生FIQ异常。
外部中断模式( IRQ ):用于通用的中断处理,当处理器的外部中断请求
引脚有效,且CPSR(7位)中I位为0时(开中断),会产生IRQ异常。系统的
外设可通过该异常请求中服务。
特权模式或管理员模式(SVE):操作系统使用的保护。执行软件中断SWI
指令和复位指令时,就进入管理模式,在对操作系统运行时工作在该模式下。
1.2 S3C2410微处理器
1.2.1 概述
S3C2410是韩国三星公司的一款基于ARM920T内核的16/32位RISC嵌入式
微处理器,主要面向手持设备以及高性价比,低功耗的应用。运行的频率可以
达到203MHz。
ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。其
中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache
组成。
ARM920T有两个协处理器:CP14和CP15。CP14用于调试控制,CP15用于
存储系统控制以及测试控制。
ARM920T体系结构框图
图2-1 ARM920T体系结构框图
1.2.2 S3C2410微处理器的结构
S3C2410内部结构原理
内部原理框图如下:
图2-2
S3C2410内部结构原理
ARM 微处理器中共定义了37个编程可见寄存器,每个寄存器的长度均为
32位。根据不同的用途,可将其划分为以下几下:30个通用寄存器,在任意一
种处理器模式下,只有15个通用寄存器可以使用,编号分别为r0, …, r14。
其中,r13一般作为堆栈指针寄存器( SP: Stack Pointer )。该寄存器由ARM
编译器自动使用。r14一般作为链接寄存器( LR: Link Register )。当系统中
发生子程序调用时,用r14来记录返回地址。如果返回地址已经保存在堆栈中,
则该寄存器也可以用于其它用途。
程序指针( PC: Program Counter )PC即为r15,用于记录程序当前的运行
地址。ARM处理器每执行一条指令,都会把PC增加4字节(Thumb模式为两个字
节)。此外,相应的分支指令(如BL等)也会改变PC的值。
1) 状态备份寄存器( SPSR: Saved Program Status Resister )
CPSR用于存储条件码。各种模式公用该寄存器
SPSR寄存器主要是在处理器异常发生时,用来保存CPSR (Current Program
Status Resister)。每一种处理器模式下将使用一个SPSR来保存CPSR,而用
户模式和系统模式下不需要SPSR,因为该模式下不会发生异常。
ARM 高级中断控制器有 8 种优先控制权,可屏蔽特定中断源,提供中断向
量控制器,同时可以接受 32 个中断源请求,ARM 中断体系充分减少中断响应
时间,提高系统的实时性。
图2-3 S3C2410B系统应用板
S3C2410B开发板是采用Samsung S3C2410B ARM920T微处理器的最小系统
板,具有开放式设计、集成度高、尺寸小、可扩展性强、低功耗等特点。S3C2410B
开发板适用于下一代无线应用、数字家电、车载设备、通信终端等应用场合,
是嵌入式工程师进行上述应用开发的最佳选择。
S3C2410X最小系统
S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造
工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,
支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的
Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接
口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最
高可运行在203MHz。
核心板的尺寸仅相当于名片的2/3大小,尺寸如此小巧的嵌入式核心板是国内首创。
开发商可以充分发挥想象力,设计制造出小体积,高性能的嵌入式应用产品。
(1)S3C2410芯片集成了大量的功能单元,包括:
◆ 内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据Cache,16KB指令Cache,
MMU。
◆ 内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。
◆ LCD控制器,一个LCD专业DMA。
◆ 4个带外部请求线的DMA。
◆ 3个通用异步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道
SPI
◆ 一个多主I2C总线,一个I2S总线控制器。
◆ SD主接口版本1.0和多媒体卡协议版本2.11兼容。
◆ 两个USB HOST,一个USB DEVICE(VER1.1)。
◆ 4个PWM定时器和一个内部定时器。
◆ 看门狗定时器。
◆ 117个通用I/O。
◆ 56个中断源。
◆ 24个外部中断。
◆ 电源控制模式:标准、慢速、休眠、掉电。
◆ 8通道10位ADC和触摸屏接口。
◆ 带日历功能的实时时钟。
◆ 芯片内置PLL。
◆ 设计用于手持设备和通用嵌入式系统。
◆ 16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。
◆ 带MMU的先进的体系结构支持WinCE、EPOC32、Linux。
◆ 指令缓存(Cache)、数据缓存、写缓存和物理地址TAG RAM,减小了对主存储器
带宽和性能的影响。
◆ ARM920T CPU核支持ARM调试的体系结构。
◆ 内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。
(2)系统管理
◆ 小端/大端支持
◆ 地址空间:每个BANK128MB(全部为1GB)。
◆ 每个BANK可编程为8/16/32位数据总线。
◆ BANK0到BANK6为固定起始地址。
◆ BANK7可编程BANK起始地址和大小。
◆ 一共8个存储器BANK。
◆ 前6个存储器BANK用于ROM、SRAM和其它。
◆ 两个存储器BANK用于ROM、SRAM、和SDRAM(同步随机存储器)。
◆ 支持等待信号用以扩展总线周期。
◆ 支持SDRAM掉电模式下的自刷新。
◆ 支持不同类型的ROM用于启动(NOR/NAND Flash、EEPROM和其它)。
(3)芯片封装
272-FBGA封装
S3C2410最小系统设计
摘要
:介绍了以嵌入式芯片S3C2410为核心的最小嵌入式系统构建方法,给出了S3C2410的复
位电路、电源电路、存储器电路和串口电路等硬件组成。还介绍了在ADS环境下自制的最小
Boot loader程序开发和调试方法。
关键字:嵌入式;S3C2410;ADS;Boot loader
S3C2410是Samsung公司基于ARM920T内核的嵌入式微处理器。本文以S3C2410为核心,配
置了最基本外围电路构成了最小的嵌入式系统,并在ADS上开发了启动程序,完成硬件初始化,配
置运行环境,串口调试功能。通过本文可以从底层了解S3C2410的特性和工作原理,并对Boot loader
程序会有深入的认识,为嵌入式系统的学习做铺垫。
S3C2410基本外围电路设计
系统框图
复位电路 Nand Flash
JTAG
电源、晶振
S3C2410
SDRAM
串口电路
图1 系统框图
Fig.1 Diagram of System
电源电路
S3C2410工作时内核需要1.8V电压,I/O端口和外设需要3.3V电压
[1]
。VDDi/VDDiarm引脚是供
S3C2410内核的1.8V电压;VDDalive引脚是功能复位和端口状态寄存器电压。 M12引脚RTCVDD是RTC
模块的1.8V电压,用电池供电保证系统的掉电后保持实时时钟。VDDOP引脚是I/O端口3.3V电压;
VDDMOP引脚是存储器I/O端口电压;还有一系列VSS引脚需要接到电源地上。3.3V电压从5V用
6
AMS1117-3.3转换得到如图2所示;1.8V从3.3V通过MIC5207-1.8转换得到如图3所示。
VDD5V
AMS1117-3.3
3
VinVout
2
C2
100u
VDD33
MIC5207-1.8
VDD33
1
2
C1
3
10u
IN
OUT
GND
BYP
EN
5
4
C3
470pF
C2
10u
VDD18
C1
图2 5V转3.3V
1
100u
G
N
D
图3 3.3V转1.8V
Fig.2 5V to 3.3V
Fig.3 3.3V to 1.8V
晶振电路
S3C2410内部有时钟管理模块,有2个锁相环,其中MPLL产生CPU主频FCLK、AHB总线外设
时钟HCLK和APB总线外设时钟PCLK;UPLL产生USB模块的时钟。OM3、OM2都接地时主时钟源和USB
模块时钟源都由外接晶振产生
[1]
。在XTIpll和XTOpll之间连接主晶振,可以选择12MHz晶振,通
过内部寄存器的设置产生不同频率的FCLK、HCLK和PCLK;在XTIrtc和XTOrtc上需要接32.768 kHz
的晶振供RTC模块使用。同时在MPLLCAP和UPLLCAP上也要外接5pF的环路滤波电容。晶振电路如
图4所示。
C1
XTIpll
15pF15pF
Y1
12MHz
C2
XTOpll
15pF15pF
R1
1M
C4
XTOrtcC6
5pF
UPLLCAP
C3
XTIrtcC5
5pF
Y2
32.768KHz
MPLLCAP
图4 晶振电路
Fig.4 Crystal Circuit
7
VDD33
复位电路
S3C2410的J12引脚为nRESET复位引脚,
D1
1N4148
R1
15K
1
74HC14
2
1
+
C1
2
74HC14
nRESET
nRESET上给4个FCLK时间的低电平后就可以复位。
可以设计如图5所示的复位电路,其中上电复位是靠
RC电路特性完成,开关二极管1N4148在手动复位时
10u
S1
Reset
对电容起快速放电的作用,因此可以把复位电平快速拉到0V。反响门74HC14可以起到延时作用,
图5 复位电路
保证有足够复位时间。
Fig.5 Reset Circuit
JTAG接口
S3C2410有标准的JTAG接口,TCK(H6)为测试时钟输入;TDI(J1)为测试数据输入;TDO(J5)
为测试数据输出;TMS(J3)为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;
nTRST(H5)为测试复位,输入引脚,低电平有效。其中nTRST、TMS、TCK、TDI需要接10K的上拉
电阻。通过JTAG口可以完成芯片测试或在线编程。
1.6SDRAM存储器
S3C2410有32根数据线和27根地址线,因此地址线的寻址范围为128M;但是S3C2410还有8
根存储器芯片片选信号线nGCS0~nGCS7,因此总的寻址空间为128M*8=1G。Nand
Flash启动模式下复位时S3C2410的存储器映射如图6所示。如当访问物理地址
0x08000000~0x10000000内的地址则nGCS1自动为低电平,以此类推。
通过图6可知SDRAM只能连接在nGCS6和nGCS7片选引脚上。S3C2410提供
了SDRAM的接口,其中包括nSRAS:行信号锁存;nSCAS:列信号锁存;nSCS[1:0](就
是nGCS[6:7]):片选信号;DQM[3:0]:数据屏蔽;SCLK[1:0]:时钟;SCKE:时钟
有效;nBE[3:0]:高/低字节有效;nWBE[3:0]:写有效。下面以2片HY57V561620
为例介绍SDRAM和S3C2410的连接方法。HY57V561620是4块16位32M的SDRAM
存储器,用2片可以构成32位的64M存储器。HY57V561620的行地址13位RA0~
RA12,列地址9位CA0~CA8,行和列地址是复用的。HY57V561620包括4个块,通
[1]
8
过BA0、BA1的组合选择块。HY57V561620是16位存储器,因此数据线为DQ0~DQ15,还有CS片选,
CLK时钟,CKE时钟使能,RAS行锁存,CAS列锁存, WE写使能等引脚。图7表示了HY57V561620
和S3C2410的连接方法,其中BA0、BA1需要连接ADD24和ADDR25,通过S3C2410的说明可知,因
为内存总大小是64M因此块选择信号必须使用ADDR24和ADDR25。因为HY57V561620的行列地址复
用,因此S3C2410必须知道行列地址各多少位,这个需要在BANKCON6寄存器的SCAN字段指定。
HY57V561620
ADDR2-ADDR14
DATA0-DATA15
ADDR24
ADDR25
nSRAS
nSCRA
A0-A12
D0-D15
BA0
BA1
RAS
CAS
LDQM
UDQM
WE
CLK
CKE
CS
VDD/VSS
nWBE0
nWBE1
nWE
SCLK0
SCKE
nGCS6
ADDR2-ADDR14
DATA16-DATA31
ADDR24
ADDR25
nSRAS
nSCRA
HY57V561620
A0-A12
D0-D15
BA0
BA1
RAS
CAS
LDQM
UDQM
WE
CLK
CKE
CS
VDD/VSS
nWBE0
nWBE1
图7 SDRAM连接图
nWE
SCLK0
SCKE
Fig.7 SDRAM Connection
nGCS6
NAND Flash 存储器
S3C2410内部有NAND Flash控制器,支持从NADN Flash启动。图8是K9F1208 64M Flash
芯片和S3C2410的连接方式。S3C2410采用一组内部寄存器来完成NAND Flash的操作。
++
[2]
VCC
116
2
+
图8 NAND Flash连接图
Fig.8 NAND Flash Connection
DB9
Fig.9 UART Connection
串口电路
S3C2410的UART提供了三个同步串行IO口,图9是COM0的连接方式。串口数据的收发有查
询方式、中断方式和DMA方式等,这些可以在UCON0 (UART channel 0 control register )寄存器
中设置。UTXH0 (UART channel 0 transmit buffer register )把要发送的数据写入此寄存器。URXH0
[3]
9
+
CLE
ALE
nFCE
nFRE
nFWE
R/nB
16
17
9
8
18
7
CLE
ALE
CE
RE
WE
R/B
IO1
IO2
IO3
IO4
IO5
IO6
IO7
IO8
29
30
31
32
41
42
43
44
DATA0
DATA1
DATA2
DATA3
DATA4
DATA5
DATA6
DATA7
C1+
C1-
C2+
C2-
VDD
V+
V-
GND
3
J?
5
9
4
8
3
7
2
6
1
4
5
K9F1208
6
15
14
13
7
8
T1OUT
R1IN
T2OUT
R2IN
T1IN
R1OUT
T2IN
R2OUT
11
TXD0(K15)
12
RXD0(K17)
10
9
MAX3232CAS
图9 UART连接图
(UART
channel 0 receive buffer register )读此寄存器获得串口接收的数据。串口一般可以用作程序运
行信息的输出和程序调试。
S3C2410启动过程
[1]
当S3C2410的OM0、OM1引脚接低电平时S3C2410就从NADN Flash启动。在NAND Flash
启动模式下上电后NAND Flash控制器自动将NAND Flash的最前面的4k区域拷贝到所谓的
“steppingstone”里面。这一过程完全由硬件自动实现。“steppingstone”实际上是S3C2410内部的
一个SRAM,因为NADN Flash不支持程序片内运行,因此必须把NAND Flash内的指令拷贝到SRAM
或SDRAM中才可以运行。在拷贝完前4k代码后,NAND Flash控制器自动将“steppingstone”映射
到arm地址空间0x00000000开始的前4k区域。在映射过程完成后NAND Flash控制器将pc指针直
接指向arm地址空间的0x00000000位置,准备开始执行“steppingstone”上的代码。而“steppingstone”
上从NAND Flash拷贝过来的4k代码,是程序员
写的boot loader的前4k代码。 boot loader之前
写好,并已经被烧写到NAND Flash的
0x00000000开始区域。
开始
设置中断向量表
关闭看门狗
关闭中断
初始化SDRAM
初始化串口
初始化网口
初始化USB
处理用户命令
结束
加载操作系统
开始
是否启动加载
N
初始化MMU
Y
简单Boot loader的制
作
Boot loader工作原理
[4]
设置堆栈
NandFlash拷贝
跳转main
结束
图10 流程图
Fig.10 Flow Chart
Boot loader是引导操作系统的程序,也是开发阶段目标板和PC机的通信工具。Boot loader
一般都放在NAND Flash 的起始位置,这样上电后Boot loader的第一个指令被自动执行。由于 Boot
Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大
部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都
用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给
10
复杂的功能,而且代码会具有更好的可读性和可移植性。阶段1和阶段2的工作流程如图10。
第一阶段
第一阶段主要工作是硬件设备初始化,加载 Boot Loader的stage2,准备RAM 空间;拷贝 Boot
Loader的stage2到RAM空间中;设置好堆栈;跳转到 stage2 的 C 入口点。
下面介绍ADS环境下开始制作简单Bootloader的方法。
先建立工程命名为myBoot,定义出程序的基本结构如下:
AREA myBoot, CODE, READONLY ;声明一个代码段,名称为myBoot
ENTRY ;程序入口声明,程序的开始执行位置
__ENTRY ;入口名称为__ENTRY
…… ;中间写主要代码
END ;程序结束
在myBoot工程的Settings中做一些设置。首先设置Target-->Target Setting--> post Link
中选择"ARM fromELF",表示在链接生成映像文件后,再调用FromELF命令映像文件转换成其他格式
的文件。Linker-->Arm Linker-->Output-->Link Type选Simple 简单连接方式;RO Base设置为
0x30008000 代码段连接地址。实际上RO BASE指定了程序的静态连接地址。程序真正被执行时所在
的内存地址叫做运行地址。如果连接时用到绝对地址的话运行地址和链接地址保持一致时程序才能
正常运行,这种代码叫做与位置有关代码。如果连接时没有涉及到绝对地址那么连接地址和运行地
址不一样程序也可以正常运行,这种代码叫做位置无关的代码。但是Bootloader一开始时被加载在
0x00位置开始运行,这会不会和RO Base设置地址冲突呢?实际上是会冲突的,解决冲突的办法就
采用位置无关代码(PIC)。实际上Boodloader的绝大部分代码最后想让它运行在0x30000800开始
的SDRAM里,只有第一阶段代码运行在0x00开始的SRAM里,因此把阶段1用位置无关的汇编代码
实现整个程序就正常运行了。RW Base是数据段的开始位置,如果不指定数据段就紧接着代码段放
置。如果自己设置的话程序里还需要自己处理加载数据段到实际数据段RW Base的搬移操作,否则
具有初始值的变量的初始值不起作用。在Options->Image entry point指定代码的入口__ENTRY。
程序的第一步要设置中断向量表。S3C2410有7种中断,中断入口地址在0x00开始处,每个中
断占用4可字节,正好可以放一个跳转指令。程序如下:
b ResetHandler ;复位中断,也是整个程序的入口,b指令是根据当前PC进行跳转,因此可
以实现位置无关代码
[5]
。在ResetHandler中需要做的工作有:关闭看门狗、关闭所有中断、设置主
频、初始化SDRAM、设置中断堆栈,最后搬移代码到SDRAM中。最后一步跳转到C程序的入口函数
11
main中。
第二阶段
这阶段代码用C语言编写,从main函数开始。这个阶段的主要任务有串口初始化、MMU的初
始化、USB初始化、以太网初始化等。Bootloader工作时显示屏可能还没有工作,或者目标板根本
就没有显示屏或键盘等设备,因此人机交互一般通过串口来实现。因此必须初始化串口,通过串口
打印运行信息或者接收用户输入。用串口连接到PC上,用专用或通用的串口软件来接收信息或输入
信息。USB口、以太网可以实现快速的文件传输,其他程序或操作系统内核可以通过USB或以太网
口快速的下载到目标板上。
[6]
程序的下载和调试
编译工程后会得到一个bin文件,这就是在目标板上运行最后文件。Bootloader一般用JTAG
口来烧写,因为Bootloader之前板子上其他任何接口(串口、USB、以太网)都是不可用的,Bootloader
是板子上运行的第一个程序。PC机上通过JTAG口烧写文件可以用这个程序,运行方
式如下sjf2410 /f:。如果JTAG口连接正常的话,会发现CPU,然后根据提示选择相应
的位置烧写就可以了。烧写完复位板子后可以在PC上通过串口看到Bootloader的运行情况。
12