2. ARM体系结构与汇编指令
2.1 CPU与外部存储器接口
内存: 内部存储器 用来运行程序的 RAM
外存: 外部存储器 用来存储东西的 ROM(硬盘、 FLASH等)
CPU连接内存和外存的方式不同!
内存需要直接地址访问,通过地址和数据总线来访问(好处: 直接读取,速度快,坏处:占用地址空间)
外存是通过CPU外存接口来连接的(好处:不占地址,坏处是速度慢,时序复杂)
SoC常用外存:
(1)电子式
无需启动:NorFlash 总线式访问,接到SROM bank,优点是可以直接总线访问,一般用来启动。
需启动:NandFlash: 分为SLC和MLC(内部容易坏块所以需要,需要配套的校验 )
eMMC/iNand/moviNand eMMC(embeded MMC)
iNand是SanDisk公司出产的eMMC moviNand是三星公司出产的eMMC(MLC)
oneNAND oneNand是三星公司出的一种Nand(MLC)
SD卡/TF卡/MMC卡(MLC)
eSSD (MLC)
(2)机械式
SATA硬盘(机械式访问、磁存储原理、SATA是接口)
X210开发板支持的外部存储器
X210有2个版本,Nand版和iNand版,分别使用Nandflash和iNand为外部存储器。我们使用的是iNand版本,板载4GB iNand
S5PV210共支持4个SD/MMC通道,其中通道0和2依次用作启动。X210开发板中SD/MMC0通道用于连接板载MMC,因此外部启动时只能使用SD/MMC2通道(注意通道3不能启动)。
总结:
1、现代SoC支持多种外部存储器
2、外部存储器主要用来存储程序(可执行代码),相当于电脑的硬盘。
3、各种不同外部存储器原理不同,大小、性价比不同,一般产品厂家根据需要选择适合自己产品的外存使用。
4、外部存储器和CPU连接一般不是通过地址&数据总线直接相连,因为地址空间不够用。一般都是通过专门的接口来连接的。
外部总线接口(EBI)被用作S5PV210外围。它依赖于内存控制器释放外部请求外部总线空闲内存控制器时,因为它没有当内存的知识访问将开始或完成。它使一个SROM控制器、一个OneNAND控制器和一个快闪记忆体控制器、分享外部内存总线、内存端口0。
2.2 S5PV210的启动过程详解
内存:
Sram:静态内存,容量小,价格高,不需要初始化上电就能用。
Dram:动态内存,容量大、价格低、不能直接使用,需上电后初始化。
单片机:内存需求量少,希望开发尽可能简单,适合全部用SRAM
PC机:内存需求量大,软件复杂,适合全部用DRAM
嵌入式系统:内存需求大,而且没有NorFlash等可启动介质。
外存:
NorFlash:容量小,CPU可以接读取(总线直访问)可用作启动介质。存放启动代码
NanFlash(跟硬盘一样):容量大,价格低,CPU不能直接读取,需CPU先运行一些软件,才能使用。
一般PC机外存配比:很少容量的BIOS(NorFlash)+很大容量的硬盘(类似于NanFlash)+大容 量的DRAM
一般单片机配比:很少的NorFlash+很小的SRAM 都很贵
嵌入式系统:因为NorFlash很贵,所以现在很多嵌入式系统倾向于不用NorFlash
直接用:外接大容量的Nand+外接大容量DRAM+SOC内部SRAM
启动过程整理:
以S5PV210为例: 启动方式为:外接大容量Nand+外接大容量DRAM+SOC内置sram
实际上S5PV210启动方式为:210内置了一块96KB的SRAM(iRAM),同时还有内置一块64KB的NorFlash(iROM)
启动过程:CPU上电后先在iROM中读取预先设置的代码(BL0),这段代码的作用就是做一些最基本的初始化,比如时钟、关闭关门狗之类的,除此之外,代码中预设我们的启动模式(我们可以通过改变板子上可以扳动的开关确定启动模式),然后就会根据启动模式选择的不同从相应的外部存储器(比如EMMC、NAND)里读取相应的启动代码(BL1、BL2),BL1代码(16KB)进入到内部iRAM中,然后进行执行,负责初始化NorFlash(iROM),然后BL2(80KB)再进入到iRAM中,最终在iRAM中运行BL2,BL2负责初始化DRAM(控制作用),然后将OS读取到DRAM中,启动OS,至此,启动过程结束。
使用iROM启动的优势:
(1)降低BOM成本,因为iROM可以使SOC从各种外设启动,因此可以省下一块boot rom
(2)支持各种校验类型的nand
(3)可以在不使用编程器的情况下使用一种外部存储器进行程序来给另一种外部存储器编程烧录。降低专用成本。
S5PV210的所有启动:总结总结
(1)先1st启动,通过OMpin选择启动介质
(2)再2nd启动,从SD2(2通道)
(3)再Uart启动
(4)再USB启动
2.15 ARM指令关系
ARM的37种寄存器与六种工作模式之间的关系:
总结:ARM共有37个寄存器,都是32位长度,37个寄存器中有30个位“通用”型,1个固定用作PC,一个固定用作CPSR、5个固定用作5种异常模式下的SPSR.
2.16 ARM指令集汇总
数据传输指令:
mov:两个寄存器之间传递数据、将立即数传递给寄存器。
mvn:与mov的区别就是,mvn是按位取反后进行传递。
算数运算指令:
add、sub、rsb、adc、sbc、rsc.
逻辑指令:
and 逻辑与、eor 逻辑异或、 orr逻辑或、bic位清除指令
比较指令:
cmp、等价于sub
cmn、等价于add
tst、测试某些位是否为1
teq 测试是否相等
比较指令:比较两个寄存器中的数,不用加S后缀就会影响cprs中的标志位。
乘法指令:
mvl mla umull umlal smull smlal
前导零计数:
cla
2.17 ARM指令集2
cpsr指令
cpsr和spsr的区别:cpsr是程序状态寄存器,整个soc只有一个;而spsr有5个,分别在5种异常模式下,作用是当从普通模式进入到异常模式时,用来保存之前普通模式下的cpsr的,以在返回普通模式时恢复原来的cpsr.
cpsr访问指令只能是 mrs、msr ;mrs用来读psr,msr用来写psr
跳转分支指令
b:直接跳转
bl:跳转前把返回地址放入lr中,以便返回,以便用于函数调用
bx:跳转的同时切换到ARM模式,一般用于异常处理的跳转。
访存指令
软中断指令:
swi 用于实现与操作系统之间的读取