ARM内存映射与存储器接口
关于ARM地址映射的理解
对于刚刚学习ARM嵌入式的人来说,遇到的第一个难点我觉得就是地址映射的原理,往往会被一些概念弄得稀里糊涂(比如像我这种智商不高的)。
所以就静下心自己好好研读了以下杜春雷《ARM体系结构与编程》有关MMU和地址映射的讲解,个人感觉写得比较清晰,以下是自己在读的时候理解的内容,如有不正,请指出!对于32为ARM处理器,最大寻址空间为4GB(2^32),但是物理空间并没有配置到这么大,所以对于VA来说,其地址为0x00000000~0xFFFFFFFF,对于PA来说,其地址应小于或等于0xFFFFFFFF。
地址映射原理:把虚拟地址划分为一定大小空间的存储块,同样,物理空间也划分为同样大小的块。
然后,依照存储块的大小,可分为:1、段(1MB)2、大页(64KB)3、小页(4KB)4、极小页(1KB)第一种称为段模式,后面三种称为页模式这些映射,都是通过页表实现的,页表又可可以分为:一级页表(用于段模式)二级页表(用于页模式)什么是页表呢?页表就是存储在内存中(会被拷贝到SDRAM中存放,以供MMU查询),用于表示VA与PA的映射关系的一个表格。
表格中每项称为条目,条目里的内容称为描述符(段描述符和页描述符)。
段模式:以段模式映射时,因为VA大小位4GB,段模式每个条目表为1MB大小的空间,所以全映射时,条目总数(全映射时页表所占内存空间)=4GB / 1MB =4096条(每条32位,即4字节,共4 KB)。
其中,所谓的每个条目大小为1MB,意思是,CPU发出的一段地址范围为1MB的VA (假如0x00000000~0x000FFFFF),这一段VA经过MMU变换,都会索引(查找)到同一个条目。
该条目再次结合VA(PA的[19:0]位,称为段内地址偏移量),形成真正的PA地址。
具体请看下图对于段模式,其只需要使用一级页表。
页表中,条目中存储的描述符格式如下:1、段基址:在设计地址映射时,要映射的物理地址要1MB对齐,段基址就是这段1MB物理地址起始地址的高[31:20]位,每个条目中的描述符的段基址都不一样(以段来说,相差1MB)。
arm构架的存储器参数
arm构架的存储器参数
1. 地址空间:ARM体系使用单一的地址空间,大小通常为2^32个8位字节,即4GB。
这些字节单元的地址都是无符号的32位数值,取值范围是0到2^32-1。
此外,ARM的地址空间也可以看作是2^30个32位的字单元或2^31个16位的半字单元。
2. 数据类型与存储格式:ARM处理器支持多种数据类型,包括字节(Byte,8位)、半字(Half-Word,16位)和字(Word,32位)。
存储器的格式可以是大端模式或小端模式,大端模式是指字的高字节存储在低地址字节单元中,而字的低字节存储在高地址字节单元中。
3. 寄存器:ARM处理器通常包含一定数量的通用寄存器,用于暂存数据和地址。
例如,ARM处理器可能具有37个寄存器,这些寄存器的读写周期通常小于2ns。
4. Cache和紧耦合存储器(TCM):为了提高内存访问效率,ARM 处理器通常包含片内Cache和TCM。
片内Cache可以优化内存访问,降低系统的总成本,而TCM是为了弥补Cache访问的不确定性增加的片上存储器。
5. 内存类型:ARM构架的嵌入式系统通常使用不同类型的内存,包括片内SRAM(静态随机存取存储器)提供高速内存访问,以及片外DRAM(动态随机存取存储器)或SDRAM(同步动态随机存取存储器)作为主存储器。
这些存储器的容量通常在8MB到512MB之间。
ARM处理器系统初始化过程
ARM处理器系统初始化过程在嵌入式系统中,ARM处理器是最常用的处理器之一。
ARM处理器的系统初始化过程可以分为硬件初始化和软件初始化两个阶段。
本文将介绍ARM处理器系统初始化的具体流程。
硬件初始化在系统上电后,ARM处理器进入硬件初始化阶段。
主要任务是对处理器的外设进行初始化。
1.初始化时钟系统:ARM处理器的时钟系统是处理器运行的根底,因此在初始化过程中需要设置适当的时钟频率和时钟源。
这可以通过配置PLL〔Phase Locked Loop〕或者外部晶振来实现。
2.使能缓存:缓存是提高处理器性能的关键。
在初始化过程中,需要配置L1缓存和L2缓存的大小、映射方式等参数,并使能它们。
3.配置中断控制器:中断是处理器与外设交互的一种方式。
在初始化过程中,需要配置中断控制器,使其能够正确地响应外设发出的中断请求。
4.初始化外设:根据系统的需求,初始化各个外设,包括串口、SPI、I2C等外设。
这些外设的初始化过程涉及到设备的存放器配置、中断使能等操作。
5.设置存储器映射:ARM处理器通过存储器映射来访问外部存储器。
在初始化过程中,需要设置存储器映射表,使处理器能够正确地访问外部存储器。
软件初始化在硬件初始化完成后,ARM处理器进入软件初始化阶段。
主要任务是加载和运行操作系统及应用程序。
1.复位处理器:在软件初始化过程中,可以选择复位处理器,将处理器重新置于初始状态。
这通常通过将Reset引脚拉低来实现。
2.加载引导程序:引导程序是系统启动的第一段代码,其功能是加载操作系统的核心代码。
在软件初始化过程中,需要将引导程序加载到适当的内存位置,并设置处理器的执行起点。
3.初始化操作系统:一旦引导程序加载完成,操作系统开始初始化。
这包括初始化内核数据结构、初始化设备驱动程序、启动任务调度器等。
4.加载应用程序:在操作系统初始化完成后,可以选择加载应用程序。
应用程序的加载可以通过文件系统来实现,将应用程序从存储设备读取并加载到内存中。
ARM外围接口电路工作原理
ARM外围接口电路工作原理ARM11是一种基于ARM架构设计的32位处理器。
它具有较高的计算能力和低功耗特性,被广泛应用于嵌入式系统和移动设备中。
ARM11外围接口电路是ARM11芯片上的硬件模块,用于扩展处理器的功能和连接外部设备。
1.串行接口ARM11芯片上的串行接口可以实现与外部设备的通信。
它一般包括UART(通用异步接收器/发送器)和SPI(串行外设接口)等模块。
UART模块实现了与外部设备的异步串口通信,而SPI模块则是一种同步串行接口,用于高速数据传输。
2.并行接口ARM11芯片上的并行接口通常用于与外部存储器、显示器、键盘等设备的连接。
ARM11芯片一般配备了SRAM接口、SDRAM接口和LCD接口等模块。
SRAM接口和SDRAM接口用于连接外部存储器,实现数据的读写操作。
LCD接口用于连接液晶显示器,实现图像和文字的显示。
3.时钟时钟模块是ARM11芯片中非常重要的一个模块,它用于提供系统的时钟信号。
ARM11芯片一般具有内部和外部时钟源,通过时钟分频器将外部时钟源分频后,提供给不同的模块使用。
时钟模块还负责产生处理器的时钟信号,控制处理器的工作频率。
4.中断控制中断控制模块用于处理外部的中断请求信号,并向处理器发送中断请求。
当外部设备需要与ARM11芯片通信或请求处理器的服务时,会产生中断请求信号。
中断控制模块会接收到这个信号,然后通过处理器的中断控制单元将中断请求传递给处理器,使得处理器能够及时响应和处理。
当需要与外部设备通信时,首先需要配置相关的接口模块。
比如,在使用串行接口进行通信时,需要设置相关的波特率和数据格式;在使用并行接口连接显示器时,需要配置显示器的分辨率和显示模式。
然后,通过编程方式向相应的接口模块写入数据或读取数据,实现与外部设备的数据交互。
在整个工作过程中,时钟模块起着关键的作用。
时钟模块提供稳定的时钟信号,保证各个接口模块按照预定的时序要求工作,从而实现数据的准确传输。
ARM存储系统MMU
编码 0b00 0b01
访问类型 没有访问权限 客户类型
0b10 保留 0b11 管理者权限
含义 这时访问域将产生访问失效
根据页表中地址变换条目的访问权限控制位决定是否 允许特定的存储访问。 将产生不可预知的结果 不会产生访问失效
23
关于快表的操作
1. 使无效快表的内容(由CP15中的C8控制)
指令 MCR p15,0,Rd,c8,c7,0 MCR p15,0,Rd,c8,c7,1 MCR p15,0,Rd,c8,c5,0 MCR p15,0,Rd,c8,c5,1 MCR p15,0,Rd,c8,c6,0 MCR p15,0,Rd,c8,c6,1
不能访问
0b00 0 1 只读
只读
0b00 1 1 不可预测 不可预测
0b01 X X 读/写 不能访问
0b10 X X 读/写 只读
0b11 X X 读/写 读/写
22
MMU中的域
域是段、大页和小页的集合。ARM 结构支持16 个域。
对域的访问由域访问控制寄存器( CP15的寄存器C3 )的两 个位字段控制。即,C3中的每2位控制一个域的访问控制特 性。其编码及含义如下表:
Rd 0 虚拟地址 0 虚拟地址 0 虚拟地址
含义 使无效指令和数据Cache 使无效整个Cache中的单个地址变换条目 使无效指令Cache 使无效指令Cache中的单个地址变换条目 使无效数据Cache 使无效数据Cache中的单个地址变换条目
2. 锁定快表的内容(由CP15中的C10控制)
24
CP15中的寄存器C1
F(bit[10]): 由生产商定义。 Z(bit[11]): 使能跳转预测, 0 = 禁止, 1 = 使能。 I(bit[12]): 当数据和指令cache分开时,使能指令cache。 0 = 禁
arm与内存数据访问有关的指令
arm与内存数据访问有关的指令在计算机科学中,ARM(Advanced RISC Machines)是一种广泛使用的指令集架构(ISA),它适用于各种应用,从移动设备到嵌入式系统和超级计算机。
ARM架构的突出特点之一是其能够高效地访问内存数据的能力。
在本文中,我们将探讨与ARM架构中内存数据访问相关的指令。
ARM架构中的指令具有灵活性和可扩展性,可以执行各种读取和写入内存数据的操作。
下面是一些与内存数据访问相关的指令:1. LDR(Load Register):这个指令用于将内存中的数据加载到寄存器中。
例如,LDR R0, [R1]指令将从存储在地址R1处的内存中获取数据,并将其加载到寄存器R0中。
2. STR(Store Register):这个指令用于将寄存器中的数据存储到内存中的指定位置。
例如,STR R0, [R1]指令将将寄存器R0中的数据存储在地址R1处的内存中。
3. LDM(Load Multiple):这个指令用于从内存中连续加载多个数据到多个寄存器中。
例如,LDM R0!, {R1-R3}指令将从地址R0开始的连续内存区域加载数据到R1、R2和R3寄存器中,同时更新R0的值。
4. STM(Store Multiple):这个指令用于将多个寄存器中的数据一次存储到内存中。
例如,STM R0!, {R1-R3}指令将寄存器R1、R2和R3中的数据一次性存储到地址R0开始的连续内存区域中,并更新R0的值。
5. SWP(Swap Data):这个指令用于原子地交换内存中的数据与寄存器中的数据。
例如,SWP R0, R1, [R2]指令将内存地址R2处的数据与寄存器R0的值进行交换,并将交换前的内存数据加载到R1中。
6. LDRB(Load Register Byte):这个指令用于从内存中加载一个字节大小的数据到寄存器中。
例如,LDRB R0, [R1]指令将从地址R1处的内存加载一个字节的数据,并将其加载到R0寄存器中。
arm9 芯片
arm9 芯片ARM9芯片是一款由ARM公司开发的低功耗、高性能的嵌入式微处理器芯片。
它以其出色的性能和低功耗而在嵌入式系统领域得到了广泛应用。
下面将从架构、特征、应用领域等方面对ARM9芯片进行详细介绍。
首先,ARM9芯片基于ARMv5TE架构,采用了精简指令集(RISC)的设计理念,使得该架构具有高效的指令执行速度和低功耗的优点。
ARM9架构还支持32位数据宽度,具有多种不同的运行模式,如用户模式、系统模式和特权模式,从而适应不同的应用场景。
此外,ARM9还支持多种外部设备的接口,如UART、SPI、I2C等,便于与其他外设进行通信。
其次,ARM9芯片具有出色的性能。
它采用了高度流水线的执行单元,能够以较高的频率运行,同时还具备快速的内存访问能力。
此外,ARM9芯片还配备了独立的存储管理单元(MMU),可以提供虚拟内存映射和内存保护功能,从而提高系统的安全性和稳定性。
ARM9芯片还具有低功耗的优势。
它采用了先进的CMOS工艺,有效降低了功耗。
此外,ARM9芯片通过硬件加速器和高效的数据缓存等技术,能够实现高性能的同时减小功耗。
这使得ARM9芯片非常适合电池供电的移动设备和低功耗要求的嵌入式系统。
ARM9芯片在各个领域都有广泛的应用。
首先,它可以应用于智能手机和平板电脑等移动设备中,提供强大的计算能力和出色的功耗控制。
其次,ARM9芯片也广泛应用于智能家居、智能交通等物联网领域,通过其高度集成和低功耗特性,实现设备的互联互通。
此外,ARM9芯片还可以应用于嵌入式控制系统、工业自动化等需求高性能和低功耗的领域。
综上所述,ARM9芯片作为一款具有出色性能和低功耗的嵌入式微处理器芯片,在各个领域都有广泛的应用前景。
随着技术的不断发展和完善,相信ARM9芯片将会在未来发展更加繁荣。
关于arm的统一编制与内存映射机制
关于arm的统一编制与内存映射机制Arm是统一编址的,也就是外设和内存进行统一的编址,共同形成了4G物理地址空间(32位为例子)。
大家知道操作外设时,实际上操作的是读写设备相关的寄存器,这些与外设相关的寄存器与不同操作模式下R0——R15那些寄存器是不同的,这些寄存器并不是所谓的物理上的寄存器,实际上是所谓的IO端口,通常会有控制、状态、数据的分类。
他们被连续地编址,对于其编址的方式有两种一种是IO映射、一种是内存映射。
IO映射是对x86为例的复杂指令集来说的,需要专门的IO控制指令,不详谈。
内存映射是对于统一编制的精简指令集计算机arm等来说的。
具体的方法就是将IO端口映射成和内存一样的物理地址,然后与内存一起进行统一编址,或者说成为了内存的一部分,当然还可以理解内存映射的意思是可以用访问内存的方式进行IO地址的访问,内存和IO地址一起编码为cpu识别的地址哦。
然后内存+IO端口地址=4GB 的寻址空间。
那么接下来还有个问题就是这种编址的硬件实现?这就要详见arm的AMBA(AdvancedMicrocontroller Bus Architecture)了,这是目前芯片总线的主流标准。
共定义了3组总线:高性能总线(AdvancedHigh Performance Bus,AHB)、系统总线(AdvancedSystem Bus,ASB)和外设总线(Advanced PeripheralBus,APB)。
不同的总线上挂接着不同的外设和存储器,大部分由三态门控制。
比如,当AHB总线上的主设备读写从设备时,发出的地址经过AHB总线的译码器产生该地址所对应从设备的选择信号,选中从设备;这样就可以对从设备进行读写啦。
或者可以这样想AHB总线上的译码器根据地址产生相应的片选信号,选中对应的设备。
对于硬件的实现我们这是简单地理解以便更好地体会上述编址。
涉及到具体的硬件读写操作,地址的硬件实现会提到很多的译码器、三态门、总线、还有时序等等具体情况具体分析,在此不做详述。
arm内存管理机制
arm内存管理机制ARM是一种广泛应用于嵌入式系统中的芯片,其内存管理机制是保证系统运行稳定的重要组成部分。
本文将介绍ARM内存管理机制的基础知识,包括地址空间、虚拟地址、物理地址和内存映射等内容,并给出一些指导意义的建议。
地址空间是指进程可以访问的地址集合。
ARM使用了一个32位地址空间,共2^32字节(4GB)。
这个地址空间被分成两个部分:用户空间(User Space)和内核空间(Kernel Space)。
用户空间是由应用程序使用的,内核空间是由操作系统使用的。
在ARM系统中,虚拟地址和物理地址是两个不同的地址空间。
虚拟地址是由应用程序使用的地址。
它是一个32位地址,它与物理地址是不同的,应用程序只能访问虚拟地址,并且不能直接访问物理地址。
应用程序访问虚拟地址时,操作系统将虚拟地址转换为物理地址,然后进行访问。
这个转换由ARM芯片的内存管理单元(MMU)完成。
物理地址是处理器处理的实际地址。
它表示访问硬件的实际位置。
每个ARM芯片都有一个物理地址空间,但它的大小和内容依赖于所用的芯片,那么关于内存地址的运用应该注意哪些方面呢?在ARM中,内存是通过内存映射的方式访问的。
内存映射是由操作系统控制的,它将虚拟地址映射到物理地址。
内存映射的目的是将不同的外设设备和物理内存映射到同一地址空间。
这样,应用程序可以使用相同的地址来访问不同的设备和内存。
在编写嵌入式系统时,必须小心使用内存映射。
错误的内存映射可能会导致系统崩溃或数据损坏。
因此,在设计和实现系统时,必须确保正确的内存映射,并尽可能减少内存分配和释放的次数。
总之,ARM内存管理机制中,地址空间、虚拟地址、物理地址和内存映射是重要的概念。
理解这些概念可以帮助开发人员设计和实现更稳定、高效的嵌入式系统。
因此,我们建议开发人员在开发嵌入式系统时,要注意这些概念,并确保正确的内存管理。
ARM(包括ARMv7工作模式介绍)寄存器、工作模式和指令集
ARM(包括ARMv7⼯作模式介绍)寄存器、⼯作模式和指令集(来源:IT165收集)转载于: /uid-30234312-id-5077078.html本章介绍ARM处理器的基础特性,包括寄存器、⼯作模式和指令集的细节。
我们也会涉及⼀些处理器实现细节,包括指令流⽔线和分⽀预测。
ARMv7架构是⼀个32位处理器架构。
它是⼀种load/store架构,意味着数据处理指令操作通⽤寄存器中的值。
只有加载(load)和存储(store)指令访问存储器。
通⽤存储器也是32位的。
本书中,字(word)代表32位,双字(doubleword)代表64位,半字(halfword)代表16位宽。
尽管ARMv7架构是⼀种32位架构,单独的处理器对所有模块和内部连接的实现不⼀定必须都是32位宽。
例如,对于指令获取和数据访问,具有64位或更宽的路径是可能的。
实现ARMv7-A架构的处理器不具有由架构固定的存储器映射。
处理器能访问4GB的虚拟地址空间,存储器和外设都可以在那个空间范围之内⾃由地映射。
我们将会在第9章和第10章中讲述存储器管理,那⾥我们会看到缓存和内存管理单元(MMU)。
4.1 指令集 ⼤多数ARM处理器⽀持超过⼀种指令集: >ARM--- ⼀种32位指令集 >Thumb--- ⼀种16位指令集,具有更好的代码密度(但是相⽐ARM代码,性能有所降低)在程序的控制之下,处理器可以在这两种指令集之间来回切换。
所有的Cortex-A系列处理器实现了Thumb-2技术,它扩展了Thumb指令集。
混合使⽤32位和16位指令,以Thumb指令集的代码密度和接近ARM指令集的性能。
⾃从所有的Cortex-A系列处理器⽀持这⼀扩展,针对它们的软件常被编译成Thumb指令集。
(本⽂作者注:按照⽂章《如何使⽤Thumb-2改善代码密度和性能》所述,Thumb-2代码⼤⼩约为ARM代码的74%,性能则为其98%)4.2 模式 ARM架构有9种处理器模式,在表4-1中所总结。
arm cortex m0手册
ARM Cortex M0手册是一份广泛应用于嵌入式系统和物联网设备开发中的重要技术文档。
在本文中,我将对ARM Cortex M0手册进行全面评估,旨在帮助您更深入地理解这一主题。
1. ARM Cortex M0手册概述ARM Cortex M0手册是一份由ARM公司编写的技术文档,主要介绍了Cortex M0内核的架构、指令集、寄存器和编程模型等相关信息。
作为ARM架构中的一部分,Cortex M0处理器以其低功耗、高性能和灵活的特性,被广泛应用于嵌入式系统和物联网设备中。
2. 深度评估2.1 Cortex M0架构Cortex M0采用了精简的指令集架构,具有较低的成本和功耗。
它的3级流水线结构和内置中断控制器使其在实时性要求较高的应用中表现卓越。
2.2 Cortex M0寄存器Cortex M0内置了一组通用寄存器、特殊功能寄存器和控制寄存器,用于存储数据、控制系统状态和执行特定的功能操作。
2.3 Cortex M0编程模型Cortex M0使用了Harvard结构,同时具有较为灵活的内存映射模式和存储器保护机制,为开发者提供了更便捷的编程接口和优化性能。
3. 广度评估3.1 Cortex M0在嵌入式系统中的应用在嵌入式系统领域,Cortex M0常被用于智能传感器、消费电子产品和医疗设备等领域,其高性能和低功耗的特性为设备的精简设计和长时间运行提供了强大的支持。
3.2 Cortex M0在物联网设备中的应用在物联网设备领域,Cortex M0被广泛应用于物联网终端设备和边缘计算设备中,为其实时通信、数据处理和低功耗运行提供了重要的支持。
4. 总结与回顾通过本文对ARM Cortex M0手册的全面评估,相信您已经对这一主题有了更深入的了解。
Cortex M0作为一款应用广泛的嵌入式处理器,其架构、寄存器和编程模型等方面的特性,为嵌入式系统和物联网设备的开发带来了极大的便利和灵活性。
5. 个人观点与理解作为一名嵌入式系统工程师,我个人认为Cortex M0的出现极大地推动了嵌入式系统和物联网设备的发展。
内存管理单元(MMU)和协处理器CP15介绍(转)
内存管理单元(MMU)和协处理器CP15介绍(转)内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌⼊式系统中,存储系统差别很⼤,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使⽤虚拟地址对其进⾏读写;系统中,需引⼊存储保护机制,增强系统的安全性。
为适应如此复杂的存储体系要求,ARM处理器中引⼊了存储管理单元来管理存储系统。
⼀内存管理单元(MMU)概述在ARM存储系统中,使⽤MMU实现虚拟地址到实际物理地址的映射。
为何要实现这种映射?⾸先就要从⼀个嵌⼊式系统的基本构成和运⾏⽅式着⼿。
系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处⾼端启动)处启动,顺序执⾏程序,在程序指针(PC)启动地址,属于⾮易失性存储器空间范围,如ROM、FLASH等。
然⽽与上百兆的嵌⼊式处理器相⽐,FLASH、ROM等存储器响应速度慢,已成为提⾼系统性能的⼀个瓶颈。
⽽SDRAM具有很⾼的响应速度,为何不使⽤SDRAM来执⾏程序呢?为了提⾼系统整体速度,可以这样设想,利⽤FLASH、ROM对系统进⾏配置,把真正的应⽤程序下载到SDRAM中运⾏,这样就可以提⾼系统的性能。
然⽽这种想法⼜遇到了另外⼀个问题,当ARM处理器响应异常事件时,程序指针将要跳转到⼀个确定的位置,假设发⽣了IRQ中断,PC将指向0x18(如果为⾼端启动,则相应指向0vxffff_0018处),⽽此时0x18处仍为⾮易失性存储器所占据的位置,则程序的执⾏还是有⼀部分要在FLASH或者ROM中来执⾏的。
那么我们可不可以使程序完全都SDRAM中运⾏那?答案是肯定的,这就引⼊了MMU,利⽤MMU,可把SDRAM的地址完全映射到0x0起始的⼀⽚连续地址空间,⽽把原来占据这⽚空间的FLASH或者ROM映射到其它不相冲突的存储空间位置。
ARM嵌入式体系结构与接口技术
23
精品课件
ARM芯片厂商
2、PCB设计仿真阶段
需要在EDA仿真设计平台下,设计系统原理图及
PCB,并对PCB板上的信号完整性、EMI等进行
仿真,根据仿真结果来对PCB进行合理的布局布
线调整,完成PCB的设计
PCB图
ML67Q4051, ML67Q4060, ML67Q4061, ML696201, ML69Q6203
Samsung (ARM7/ARM9/Cortex-M3 Family)
S3C2410A, S3C2440A, S3C44B0X, S3C4510B,S5PC210
Sharp (ARM7/ARM9/Cortex-M3 Family)
LPC2294, LPC2364, LPC2366,, LPC2880, LPC2888, LPC3180
OKI (ARM7/ARM9/Cortex-M3 Family)
ML674000, ML674001, ML674002, ML674003, ML675001, ML675002, ML675003, ML67Q4050,
到终端用户手中
云计算的核心思想,是将大
量用网络连接的计算资源统
一管理和调度,构成一个计
算资源池向用户按需服务。
精品课件
12
1.2 嵌入式系统的组成
应用 软 件
嵌 入 式操 作 系 统
硬件 设 备
嵌入式处理器
外围 设 备
图1-1 嵌入式系统结构简图
精品课件
13
1.2 嵌入式系统的组成
NXP LPC ARM 必须知道的知识
NXP LPC ARM 必须知道的知识寄存器和工作模式:7种工作模式:fiq/irq/abt/und/sys/usr/svc。
通过"MSR cpsr_c,#0xdx"切换。
上电时进入svc模式。
svc和usr的区别是:svc可以通过"MSR cpsr_c,#0xdx"自由切换到其它任何模式,但是usr 不可以。
各模式下有自己的堆栈。
要在程序启动后依次进入各个模式分别设置自己的堆栈,最后进入usr模式。
好多个寄存器:r0 - r7 (a1 - a4 / v1 - v4),r15(pc) 在所有模式下都可见。
r8(v5),r9(sb,v6),r10(sl,v7),r11(fp,v8),r12(ip) fiq模式下有一组独立的映射。
r13(sp)/R14(lr) 在usr和sys模式下用同一组映射,其它模式下各有自己的映射。
cpsr在所有模式下可见。
spsr在usr和sys模式下没有映射。
cpsr是一个最特殊的寄存器,结构如下:31 30 29 28 27~8 7 6 5 4 3 2 1 0N Z C V 保留 I F T M4 M3 M2 M1 M0其中,N/Z/C/V分别为负/零/进位/溢出的标志位。
在所有模式下都可以进行读操作。
I/F为中断/快中断禁止位,M4~M0是工作模式控制位,它们在USR模式下都不可操作。
T为Thum/ARM模式位,在所有模式下不可直接操作,否则会天下大乱,预取址错误中断可以捕获这种乱局。
只能用BX指令进行Thum/ARM的状态切换。
总之,USR模式很不方便。
在该模式下只可以通过软中断控制I/F位。
cpsr只能够用MSR/MRS 指令来操作。
各工作模式下的spsr: 在由突发事件引起的模式切换发生时,新模式的spsr自动保存cpsr 的值,以备该模式退出时还原cpsr。
在程序的控制下进入某模式时,cpsr不会自动保存到相应的spsr。
ARM芯片的地址重映射
1.内存管理和MMU当ARM 要访问存储器时,MMU 先查找TLB(Translation Lookaside Buffer,旁路转换缓冲)中的虚拟地址表。
如果TLB 中没有虚拟地址的入口,则转换表遍历硬件会从存放在内存的转换表中获得转换和访问器权限。
一旦取到,这些信息将被放到TLB 中,这时访问存储器的TLB 入口就拿到了。
在TLB 中其实包含了以下信息:1)控制决定是否使用高速缓冲2)访问权限信息3)在有cache 的系统中,如果cache 没有命中,那么物理地址作为线性获取(line fetch)硬件的输入地址。
如果命中了cache 那么数据直接从cache 中得到,物理地址被忽略。
ARM 的工作流程可用下图表示:这种机制是纯粹的高速硬件操作,并不需要操作系统来完成。
操作系统只要提供内存转换表就可以了,但是需要符合一定的格式。
ARM9 的MMU 映射表分为两种,一级页表的变换和二级页表变换。
两者的不同之处就是实现的变换地址空间大小不同。
一级页表变换支持1 M 大小的存储空间的映射,而二级可以支持64 kB,4 kB 和1 kB 大小地址空间的映射。
在LINUX 中最终使用了1 M 一级页表和4 kB 的二级页表(即 1M段区和4KB页面)内核中地址转换表建立过程地址转换表建立是和内核的启动一起完成的,页表的建立也可以分为三个阶段:第一阶段是发生在内核解压缩、自引导时,也就内核镜像zimage 的文件头部分。
相关代码从某种意义上来讲不属于内核,它是BSP 代码中的一部分,是需要根据不同的架构来分别实现的。
通过平面映射的方式建立了256M 空间节描述表。
但是,这个映射表是临时的,是为了提高内核解压缩时的速度而实现的。
在解压缩结束之后,进入内核代码之前,MMU 功能就被关闭了,随之的映射表也被废弃不用。
当decompress_kernel 函数实现内核的解压缩之后,那么内核启动的第一阶段工作就完成了。
arm地址空间分配与启动时地址的映射
s3c2440地址空间的分配s3c2440启动过程详解一:地址空间的分配1:s3c2440是32位的,所以可以寻址4GB空间,内存(SDRAM)和端口(特殊寄存器),还有ROM都映射到同一个4G空间里.2:开发板上一般都用SDRAM做内存flash(nor、nand)来当做ROM。
其中nand flash 没有地址线,一次至少要读一页(512B).其他两个有地址线3:norflash不用来运行代码,只用来存储代码,NORflash,SDRAM可以直接运行代码)4:s3c2440总共有8个内存banks6个内存bank可以当作ROM或者SRAM来使用留下的2个bank除了当作ROM 或者SRAM,还可以用SDRAM(各种内存的读写方式不一样)7个bank的起始地址是固定的还有一个灵活的bank的内存地址,并且bank大小也可以改变5:s3c2440支持两种启动模式:NAND和非NAND(这里是nor flash)。
具体采用的方式取决于OM0、OM1两个引脚OM[1:0所决定的启动方式OM[1:0]=00时,处理器从NAND Flash启动OM[1:0]=01时,处理器从16位宽度的ROM启动OM[1:0]=10时,处理器从32位宽度的ROM启动。
OM[1:0]=11时,处理器从Test Mode启动。
当从NAND启动时cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。
cpu 是从0x00000000开始执行,也就是NAND flash里的前4KB内容。
因为NAND FLASH 连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。
通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行当从非NAND flash启动时nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000). 然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。
ARM体系结构及常用接口简介解析
•
进入ARM状态:
执行BX指令,并设置操作数寄存器的状态(位[0]) 为0。 – 进入异常时,将PC放入异常模式链接寄存器中,从异 常向量地址开始执行也可进入ARM状态
–
ARM微处理器:处理器工作状态
• Thumb-2 :增加了混合模式能力 – 定义了一个新的32-bit指令集能在传统的 16-bit指令运行的Thumb状态下同时运行。 – 这样能在一个系统中更好地平衡ARM和 Thumb代码的能力,使系统能更好地利 用ARM级别的性能和Thumb代码的密度 的优势
ARM异常处理
异常向量表(Exception Vectors)
地 址 0x0000,0000 0x0000,0004 0x0000,0008 0x0000,000C 0x0000,0010 0x0000,0014 0x0000,0018 0x0000,001C 复位 未定义指令 软件中断 中止(预取指令) 中止(数据) 保留 IRQ FIQ 异 常 进入模式 管理模式 未定义模式 管理模式 中止模式 中止模式 保留 IRQ FIQ
13
ARM920T系统结构分析
ARM7TDMI
Instruction Fetch ThumbARM decompress ARM decode Reg Select
Reg Read
Shift
ALU
Reg
Write
FETCH
DECODE
EXECUTE
ARM9TDMI
Instruction Fetch ARM or Thumb Inst Decode Reg Reg Decode Read Shift + ALU Memory Access Reg Write
3
第1章 基础知识-2-基于ARM的微机原理与接口技术-陈桂友-清华大学出版社
16/42
1、系统总线 定义:连接多个功能部件的一组公共信号线。
各功能部件之间通过总线传输信息。 系统总线分为 地址总线AB(Address Bus) 数据总线DB(Data Bus) 控制总线CB(Control Bus) -----典型的三总线结构
17/42
地址总线AB 单向 输出CPU的地址信号
现在市面上有各种C编译器,能把C语言转换成某 个具体的微处理器的机器语言。这种编译器比较 适宜于对汇编语言不熟悉的用户使用,其缺点是 不可避免地会出现编译后的机器程序冗长、不够 简练,导致程序运行时间长、速度低等问题。
13/42
另外,用汇编语言编程能更有利于硬件电路与程 序的结合设计与调试。 当然,如果用户并不在乎程序的长短和运行速度 的快慢时,并且拥有对应的编译软件的条件下, 采用由C语言编写,经编译程序来进行用户系统的 设计和开发,也不失为一种好方法。
处理器进行译码、执行。 一条机器指令应包含要求微处理器所要完成的
操作,以及参与该操作的数据或该数据所在的地址, 有时还要有操作结果的存放地址信息,这些都是以 二进制数字的形式表示的,当然,也有某些特殊指 令不需要数据或地址。
8/42
11、汇编指令 微处理器能够而且只能够识别二进制数,指令也用二 进制数表示。例如,一条4字节的指令如下:
12/42
14、高级语言
汇编指令虽然较二进制机器指令容易阅读和编写, 但还是不如高级语言更接近英语自然语言。解决 方法是用高级语言编程,再用某种特殊程序翻译 成机器语言。
具体地说,针对某个用户系统用高级语言编写的 用户程序翻译成某个具体的微处理器的机器语言 程序(这种过程叫做编译)的软件,叫做编译器。
00001111 00100100 00010010 01000101
嵌入式芯片的存储器映射
嵌入式芯片的存储器映射和存储器重映射1. 引言很多嵌入式芯片都集成了多种存储器(RAM、ROM、Flash、……),这些存储器的介质、工艺、容量、价格、读写速度和读写方式都各不相同,嵌入式系统设计需根据应用需求巧妙地规划和利用这些存储器,使得存储系统既满足应用对容量和速度的需求,又有较强的价格竞争优势。
本文所讲的存储器映射就是对各种存储器的大小和地址分布的规划。
存储器重映射就是为了快速响应中断或者快速完成某个任务,将同一地址段映射到不同速度的两个存储块,然后将低速存储块中的代码段复制到高速存储块中,对低速存储块的访问将被重映射为对高速存储块的访问。
2. 存储器映射(Memory Mapping)对于具体的某款嵌入式芯片,它包含的各种存储器的大小、地址分布都是确定的。
存储器映射(Memory Mapping)就是指(物理)地址到存储单元的一一对应(注意,本文中所讲的存储器映射不是指虚拟地址到物理地址的映射。
更确切地讲,本文所讲的存储器映射是存储布局(Memory Layout))。
同一类型的存储器称为一个存储块(Memory Block),也有的地方称为一个存储区域(Memory Area,Memory Region),嵌入式系统设计者通常会为一个存储块分配一段连续的物理地址。
多种存储器按某种方式排列,形成整个存储空间。
存储器映射可以理解为这样一个函数:输入是地址总线上的地址编码,输出是被寻址单元中(或数据总线上)的数据。
该函数是一个逻辑概念,计算机系统上电复位后才建立起这种映射,当计算机系统掉电后,这个函数就不复存在,只剩下计算机系统中实现这个函数的物理基础——电路连接。
也可以这样认为:存储器映射是计算机系统上电复位时的预备动作,是一个将CPU所拥有的地址编码资源向系统内各个物理存储器块分配的自动过程。
3. 存储器重映射(Memory Remapping)3.1 为什么需要存储器重映射目前很多嵌入式系统中的Flash分为Code Flash和Data Flash。
ARM 关于地址重映射
关于地址重映射1、通俗解释ARM芯片的地址重映射映射就是一一对应的意思。
重映射就是重新分配这种一一对应的关系。
我们可以把存储器看成一个具有输出和输入口的黑盒子。
如下图所示,输入量是地址,输出的是对应地址上存储的数据。
当然这个黑盒子是由很复杂的半导体电路具现的,具体的实现的方式我们现在不管。
存储单位一般是字节。
这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应的存储单元上存储的数据就会出现在数据总线上面。
图1普通的单片机把可执行代码和数据存放到存储器中。
单片机中的CPU从储器中取指令代码和数据。
其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的。
如下图,CPU读取0x00000000地址上存储单元的过程。
图 2ARM比较复杂。
ARM芯片与普通单片机在存储器地址方面的不同在于:ARM 芯片中有些物理存储单元的地址可以根据设置变换。
就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了。
图3是随意举了个例子(不要与ARM芯片对应),旨在说明地址重映射的过程。
图3表示把 0x00000000地址上的存储单元映射到新的地址0x00000007上。
CPU 存取0x00000007就是存取0x00000000上的物理存储单元。
图 3下面图4,图5是对ARM芯片的两种地址重映射方式的图示。
假设我们的应用程序存放在外扩 FLASH当中,那么应用程序的异常向量表就存放在0x80000000起始的64个(其中有32个存放异常向量)物理存储单元中。
但是ARM核发生异常(中断)后是从 0x00000000~0x0000003F地址范围取异常向量的。
所以要把0x80000000~0x8000003F范围内的存储单元重新映射到0x00000000~0x0000003F地址范围上。
以后CPU存取0x00000000~0x0000003F地址就是存取 0x80000000~0x8000003F范围内的存储单元。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NAND Flash控制器结构如图3-2所示。NAND Flash控制器bootloader过程如图3-3 所示。图中符号,CLE:Command Latch Enable,ALE:Address Latch Enable, nFRE:Flash Read Enable,nFCE:Flash Chip Enable,nFWE:Flash Write Enable, FRnB:Flash Ready/Busy output(表Flash Nand芯片状态,高电平表准备好,低电平 表Nand Flash忙)。
⑶ NAND Flash存储器时序
NAND Flash存储器时序如图3-4、3-5所示。
图3-4 CLE和ALE时序(TACLS=1,TWRPH0=0,TWRPH1=0)
图3-5 nWE和nRE时序(TWRPH0=0, TWRPH1=0)
⑷ 引脚配置
● OM[1:0] = 00:使能NAND Flash 存储器引导启动。 ● NCON:NAND Flash存储器选择(普通/先进)。
S3C2440A包含以下特性:
● 大/小端(通过软件选择)。
● 地址空间:每个Bank有128M字节(总共1G/8个Bank)。
● 除了BANK0(16/32位)之外,其它全部BANK都可编程访问宽度(8/16/32位)。
● 总共8个存储器Bank,6个存储器Bank为ROM,SRAM等,其余2个存储器Bank
第三章 ARM内存映射与存储器接 口
本章主要内容
3.1 ARM9存储器接口 3.2 Cortex M4存储器接口 3.3 半导体存储器种类、Nor Flash与Nand Flash存
储器简介 思考与习题
3.1 ARM9存储器接口
3.1.1 S3C2440A存储器控制器
S3C2440A 存 储 器 控 制 器 为 访 问 外 部 存 储 的 需 要 器 提 供 了 存 储 器 控 制 信 号 。
0:普通NAND Flash(256字或512字节页大小,3或4个地址周 期)。
1:先进NAND Flash(1K字或2K字节页大小,4或5个地址周期)。 ● GPG13:NAND Flash存储器页容量选择。
0:页=256字(NCON=0)或页=1K字(NCON=1)。 1:页=512字节(NCON=0)或页=2K字节(NCON=1)。 ● GPG14:NAND Flash存储器地址周期选择。 0:3个地址周期(NCON=0)或4个地址周期(NCON=1)。 1:4个地址周期(NCON=0)或5个地址周期(NCON=1)。 ● GPG15:NAND Flash存储器总线宽度选择。 0:8位宽度。 1:16位宽度。 注意:配置引脚NCON,GPG[15:13]将在复位期间被取出(fetched)。
为ROM,SRAM,SDRAM等。
● 7 个固定的存储器Bank起始地址。
● 1 个可变的存储器Ban周期可编程。
● 外部等待扩展总线周期。
● 支持SDRAM自刷新和掉电模式。
DDR是DR SDRAM的简称,Double Data Rate Synchronous Dynamic Random Access
址是最高位的地址,进行bank选择。
回本章目录
3.1.2 NAND Flash控制器
NOR Flash存储器价格较高,而SDRAM和NAND Flash 存储器更经济,这样促使了一些用户在NAND Flash中执 行引导代码,在SDRAM 中执行主代码。S3C2440A引导 代码可以在外部NAND Flash存储器上执行。为了支持 NAND Flash的BootLoader,S3C2440A配备了一个内置 的 SRAM 缓 冲 器 , 叫 做 “Steppingstone” 。 引 导 启 动 时 , NAND Flash 存 储 器 的 开 始 4K 字 节 将 被 加 载 到 Steppingstone中并且执行加载到Steppingstone的引导代码。 通常引导代码会复制NAND Flash的内容到SDRAM中。 通过使用硬件ECC,有效地检查NAND Flash数据。在复 制完成的基础上,将在SDRAM中执行主程序。
图3-2 NAND Flash控制器结构图[A1]
图3-3 NAND Flash控制器bootloader示意图
⑵ 软件模式
S3C2440A只支持软件模式的访问。使用该模式,你 可以完整的访问NAND Flash 存储器。NAND Flash控 制器支持NAND Flash存储器的直接访问接口。
① 写命令寄存器=NAND Flash存储器命令周期。 ② 写地址寄存器=NAND Flash存储器地址周期。 ③ 写数据寄存器=写入数据到NAND Flash存储器 (写周期)。 ④ 读数据寄存器=从NAND Flash 存储器读取数据 (读周期)。 ⑤ 读主ECC寄存器和备份ECC 寄存器=从NAND Flash存储器读取数据。 注释:软件模式下,你必须用定时查询或中断来检 测RnB状态输入引脚。
Memory。SDRAM的数据线与地址线是分开的。数据线一般是16根(D15~D0)。地
址线的行地址与列地址是复用的。SDRAM有突发长度(Burst Length,BL)和Bank
的概念。突发长度是指同一行中相邻存储单元的长度,即列地址的宽度,是能进行
连续连续数据传输的存储单元的数量。DDR有列地址,行地址和Bank地址。Bank地
⑴ NAND Flash控制器功能特性
NAND Flash控制器功能特性如下: ● 引导启动:引导代码在复位期间被传送到4K 字节的Steppingstone。 传送后,引导代码将在Steppingstone中执行。 ● NAND Flash 存储器接口:支持256 字,512 字节,1K 字和2K 字 节页。 ● 软件模式:用户可以直接访问NAND Flash 存储器,例如此特性 可用于NAND Flash 存储器的读/擦除/编程。 ● 接口:8/16 位NAND Flash 存储器接口总线。 ● 硬件ECC 生成,检测和指示(软件纠错)。 ● SFR I/F:支持小端模式是按字节/半字/字访问数据和ECC 数据寄 存器,和按字访问其它寄存器。 ● SteppingStone 接口:支持大/小端模式的按字节/半字/字访问。 ● SteppingStone 4KB 内部SRAM 缓冲器可以在NAND Flash引导启 动后用于其他用途。