注:以下内容学习于韦东山老师arm裸机第一期视频教程
一.内存接口介绍
1.1 内存控制器的引入
2440是一个SOC,其中外设分为多种类型
1. 门电路类:GPIO
2. 协议类接口: UART I2C SPI
但是对于CPU来说只需要将值写给寄存器,CPU通过地址来区分不同的寄存器,因此就会引入另一个控制单元->内存控制器
1.2 内存控制器的作用
1.2.1 根据CPU发出的地址来选择不同的模块,把数据发送给模块,或者取出数据并且返回给CPU
1.3 内存接口
1.3.1 CPU发出的信号并不会直接输出到外部电路去,但是凡事都有例外,例如内存接口
1.3.2 对于内存接口,CPU发出的地址可以直接传给内存类设备(NOR,网卡,内存)
1.3.3 在内存芯片上有地址总线,数据总线,可以直接接收CPU发出的地址,数据
1.3.4 对于内存类设备会共用地址总线,因此引入片选引脚cs
只有当某个片选引脚输出低电平是对应的设备才被选中,可以向CPU提供数据
1.3.5 谁来控制片选引脚?(CPU只发出地址信号)
内存控制器根据CPU发出的地址来决定发出不同的片选信号.
地址与片选信号关系如下图:
1.3.6 如何确定数据传输方向
对于SDRAM、DM9000、NOR芯片上都有读写信号来表示数据传输方向
1.3.7 关于32位CPU的疑惑
其中每块地址范围为128M=2^27,因此至少需要A0,A1-A26,共27条地址线
但是cpu是32位的,却只用了27条地址线?
如下:
ldr r0, =addr
ldr r1, =val
str r1, [r0]
会让CPU发出32位的addr给内存控制器,内存控制器再来发出片选信号和addr0-addr26的地址信号
CPU确实发出了32位的地址,但是内存控制器只用到了0-26
1.3.8 特殊的NAND