AT91RM9200研发笔记(2):理解基本概念
文章说明:calmarrow(lqm)原创
文章引自:
http://piaoxiang.cublog.cn

首先分清几个概念。

1、嵌入式系统,其实是“嵌入式电脑系统”。既然是电脑系统,就符合电脑的一般特性。比如,电脑有三大件:
CPU,存储系统,I/O,另外呢,就是三大件之间的互连设备。对电脑系统这种复杂系统,一个好的研究方法就是分层思想,在系统把握的前提下,只关注当
前的层面,复杂度降低。

2、ARM是32位MCU。这个32位是指什么?

以前有术语为字长,现在一般说是位宽。先结合下图看看:




位宽就是CPU一次处理数据的带宽,也就是最主要的为ALU和通用寄存器的位宽。对32位CPU来说,ALU和通用寄存器都是32位,而对于64位来说,
他们应该是64位。需要注意的是,这个处理数据,包括地址数据。假如一次能够处理32bits的地址数据,那么其寻址空间为2^32=4G。关于更进一步
的细节,则能够参考电脑体系结构和组成原理。

3、32位MCU的地址线少于32条,为什么?

以AT91RM9200为例,采用分层思想描述。

(1)AT91RM9200能够看为一个SoC,其CPU为ARM9TDMI。而ARM9TDMI提供给外围的地址为32条,也就是4G的地址空间。这是没有问题的,32位的含义在上文也明确了,所以看32位是看CPU的位宽。


(2)为了对4G的地址空间进行管理,引入MMU单元,即ARM9TDMI+MMU/Cache=ARM920T。对ARM9TDMI而言,他看到的只有
32bits的物理地址数据。假如开启了MMU,则能够转换为虚拟地址数据。其实能够拿数学中的函数来理解。外部地址A能够经过函数f1的变换,变为地址
B送到CPU中,即f1(A)---->B。那么另外的函数f2(C)---->B,那么对于ARM9TDMI而言,都是B地址数据,但是实
际访问的确实地址A和C。其中A和C是程式员看到的,B是CPU看到的。那么同理,能够利用逆函数来解析。CPU通过地址B能够访问到不同的内存空间,关
键的关键就在这个函数映射关系。当然,这个函数映射关系能够通过硬件实现,也能够通过软件 硬件配合实现。


第二个层次的MMU变换完成了PA到VA的转换,这里VA还应该是32bits,也就是说ARM920T引出的地址线应该为32条。需要注意的是,ARM
采用了AMBA总线互连,ARM920T引出的地址总线就是ASB了。那么ASB此时的宽度仍然为32bits。

(3)第三个层次,通过memory
controller来再次管理地址数据,也就是map的含义。map得名原理和函数映射类似了。对AT91RM9200来说,这个内存控制器把4G的内
存空间分为16个256M的地址空间,在此基础上,还进行了二级地址管理,也就是二级映射。更为重要的是,通过内存控制器,把glue
logic都给解决了。对外部硬件工程师应用而言,这个MCU就是没有glue logic的了,使用起来就方便的多了。


内存管理器对地址分为两类,一类是只能内部寻址,外部是不可见的;一类是研发给外部用户使用。自然,MCU外部引出的地址线也就少于32条了。视不同的应
用设计,开放的地址线是不同的,比如AT91RM9200开放了26条地址线。当然,为了4字节地址对齐,A0和A1能够另作他用。


通过这三个层次,对为什么32位MCU的地址线少于32条比较清楚了。只是个概念的重叠罢了,32位是对CPU而言的,而不是对MCU而言的。明确了
CPU和MCU的区别,自然也就清楚了。另外,以函数映射的思想来分析map和remap机制,也就变得很容易了。至于为什么出现map和remap,则
有历史发展的原因,处于提高性能和外部内存系统不一致性的考虑了。




本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u2/63379/showart_503683.html