第3讲_ARM 存储器结构
成都信息工程学院3+1 创新实验班 - 2012/6/25
1 存储器映射
存储器映射(存储器地址分布)是指把芯片中或芯 片外的FLASH,RAM,外设,BOOT BLOCK等进 行统一编址。 地址空间
外设 片外存储器
外部存储器
0xFFFFFFFF
0x80000000
Boot Block
0x7FFFE000
如果试图访问 一个保留地址 或未分配区域 的地址,ARM 处理器将产生 预取指中止或 数据中止异常。
0x82000000 Bank1:0x8100 0000~0x81FF FFFF Bank0:0x8000 0000~0x80FF FFFF
0x80000000 0x7FFFFFFF 0x7FFFE03F 0x7FFFE000 0x7FFFDFFF
留给用户 进行电路3 . 0 G B 扩展的地 址空间
保留给片外存储器
芯片 复位 后用 户看 见的 地址 空间
2.0GB
网络 0x83400000~0x8340001F Bank3 LCD 0x83000000~0x83400002 外设PACK Bank2 片外存储器 Bank1 Bank0
0xC0000000
0 0
FIQ_Addr
DCD
FIQ_Handler
成都信息工程学院3+1 创新实验班 - 2012/6/25
位于启动代码中的异常向量表
异常向量表
CODE32 AREA vectors,CODE,READONLY ResetAddr PC, ResetAddr PC, UndefinedAddr
注意:异常向量表中程序跳 转使用LDR指令,而没有使 用B指令。 原因: 1.LDR指令可以全地址范围跳 转,而B指令只能在前后 32MB范围内跳转; 2.芯片具有Remap功能。当向 量表位于内部RAM或外部存 储器中,用B指令不能跳转到 正确的位置。
创新实验班 - 2012/6/25
异常向量表
各异常向量的固定位臵
地址 异常 0x0000 0000 复位 0x0000 0004 未定义指令 该位臵被Boot装载程序用作有效用户程序的检测标志。通 0x0000 0008 软件中断 过定义此保留值,使向量表所有数据32位累加和为0,芯片 复位后才能脱机运行用户程序。 0x0000 000C 预取指中止(从存储器取指出错) 0x0000 0010 数据中止(访问存储器数据出错) 0x0000 0014 保留 * 0x0000 0018 IRQ 0x0000 001C FIQ
. . .
复位入口 指令未定义中止入口 软件中断入口 预取指中止入口 取数据中止入口 ...
成都信息工程学院3+1 创新实验班 - 2012/6/25
存储器映射控制的必要性
复位后用户看 见的地址空间 0xFFFFFFFF AHB外设 VPB外设 0xE0000000 片外存储器 0x80000000 BootBlock SRAM Flash
异常向量表
AREA vectors,CODE,READONLY ENTRY Reset LDR LDR LDR LDR LDR PC, ResetAddr PC, UndefinedAddr PC,
可能存在的 SWI_Addr 程序存储器
PC, PrefetchAddr PC, DataAbortAddr
Boot Block
保留给片内存储器(未用)
1.0GB
16KB片 内 SARM
保留给片内存储器(未用)
0x40004000 0x40003FFF 0x4000003F 0x40000000
通过CS0(P1.0)、 CS1(P3.26)选择片 外扩展的16M NOR Flash和4M SRAM到 底映射在Bank0还 是Bank1
L E C T U R E
3
存储器与启动代码
陈子为
成都信息工程学院3+1 创新实验班 - 2012/6/25
对本部分的要求
掌握存储器配置(映射与重映射)的方法 掌握外部存储器的控制方法 了解ARM的分散加载技术,能够看懂和修改 分散加载描述文件 对存储器加速部分,不要求搞清楚原理,但 要知道在什么情况下使用存储器加速模块, 怎样使用存储器加速模块
Boot Block SRAM SRAM
0x80000000
Flash Flash
地址空间
成都信息工程学院3+1 创新实验班 - 2012/6/25
讨
论
什么是存储器重映射,为什么要重映射?
成都信息工程学院3+1 创新实验班 - 2012/6/25
2 存储器重映射(映射控制器)
存储器重映射Remap
VPB 外设#1
VPB 外设#0 地址空间
成都信息工程学院3+1 创新实验班 - 2012/6/25
启动块(Boot Block)
•启动块(Boot程序)是芯片生产厂家固化在芯片中的 一段代码,包括ISP、IAP和Real Monitor程序。
•它完成芯片复位后的初始化操作,并提供实现Flash编 程的方法。Boot装载程序可启动对空片的编程、已编程 器件的擦除和再编程,以及在运行的系统中由应用程 序对Flash存储器进行编程。
成都信息工程学院3+1 创新实验班 - 2012/6/25
位于启动代码中的异常向量表
异常向量表
CODE32 AREA ENTRY Reset LDR LDR PC, ResetAddr PC, UndefinedAddr vectors,CODE,READONLY
前32字节为异常入口
. . . DCD LDR LDR 0xb9205f80 PC, [PC, #-0xff0] PC, FIQ_Addr
芯片内部框图
ARM7 局部总线 SRAM Flash AHB To VPB 桥 ARM7TDMI-S CPU 系统功能
LPC2000系列微控制器包含四 大部分: ARM7TDMI-S CPU ARM7局部总线及相关部件 AHB高性能总线及相关部件 VLSI外设总线及相关部件
AHB总线
VIC EMC
保留
均为128×16KB (2MB)范围
0xE01FFFFF
3.5GB+2MB
VPB 外设 3.5GB 地址空间
0xE0000000
AHB(先进的高性能总线)和VPB(VLSI外设总线)外 设区域都为2M字节,可各分配128个外设。每个外设空间的 规格都为16K字节,这样就简化了每个外设的地址译码。 注意:AHB和VPB外设区域中不管是字还是半字,都是一次 性访问。例如不可能对一个字寄存器的最高字节执行单独的读 成都信息工程学院3+1 创新实验班 - 2012/6/25 或写操作
Boot Block的映射地址安排
为了兼容将来的器件,整个Boot Block被映 射到片内存储器空间的顶端。所以将来的芯片内 臵不同的RAM和FALSH都不会影响Boot Block的 位臵。
AHB & VPB
映射位臵固定在 内部存储器顶端 RAM和Flash 的变化不会影响 BootBlock的位臵
0 0
FIQ_Addr
DCD
FIQ_Handler
成都信息工程学院3+1 创新实验班 - 2012/6/25
存储器映射控制的必要性
当发生异常时,程序总是跳转到地址为0x0000~ 0x003F的对应入口处,在该地址范围内存储有异常向 量表。 异常向量表
AREA vectors,CODE,READONLY ENTRY Reset LDR LDR LDR LDR LDR PC, ResetAddr PC, UndefinedAddr PC, SWI_Addr PC, PrefetchAddr PC, DataAbortAddr
地址空间
成都信息工程学院3+1 创新实验班 - 2012/6/25
VPB外设映射
系统控制模块 VPB外设#127 0xE01FC000 … UART 0 定时器1 VPB 外设#3 VPB 外设#2
0xE000C000 0xE0008000 0xE0004000 0xE0000000
定时器0 看门狗定时器
片内存储器
内部SRAM
0x40000000
内部Flash
0x00000000
成都信息工程学院3+1 创新实验班 - 2012/6/25
4.0GB 3.75GB 3.5GB
AHB外 设 保留 保留 VPB外 设
0xFFFFFFFF 0xFFE0FFFF 0xF0000000 0xE01FFFFF 0xE0000000
外部中断
TIMER0/1 ADC 通用I/O PWM0
I2C串行接口
SPI串行接口 UART0 & 1 CAN 看门狗定时器
实时时钟
系统控制
成都信息工程学院3+1 创新实验班 - 2012/HB 外设#127 向量中断控制器 AHB 外设#126 AHB 外设#125 … AHB 外设#1 AHB 外设#0 0xFFE04000 0xFFE00000 0xFFFFF000 0xFFFFC000 0xFFFF8000 0xFFFF4000
“存储器映射控制”用于控制地址范围为 0x0000~0x003F存储区域的重新映射。该区域存 放着异常向量表。 存储器重新映射是将复位后用户所见的存储器 中部分区域,再次映射到其它的地址上。 对于Philips的LPC系列ARM微控制器,存储器 重新映射区域一共为64字节,分别为异常向量区 (32字节)和紧随其后的32字节。存储器重新映射 的方法允许在不同模式下处理中断,重新映射的存 储器区域在地址0x00000000~0x0000003F处。存储 器重新映射的控制见“存储器映射控制”小节。 成都信息工程学院3+1