韦一之内存控制器,2440地址空间,NOR flash和SDRAM(012课)

本文详细解析了S3C2440微处理器的内存控制器,包括内存接口、地址空间分配、片选信号、不同位宽设备的连接、Nor Flash和SDRAM的时序图以及寄存器设置。通过实例解释了如何配置内存控制器以满足Nor Flash和SDRAM的时序要求,同时介绍了如何通过CPU指令访问不同位宽的设备。
摘要由CSDN通过智能技术生成

大部分内容来自韦东山老师视频及博客:https://blog.csdn.net/thisway_diy/article/details/79389530
一个可参考的很好很详细的博客文档:https://www.cnblogs.com/biaohc/p/6346878.html

内存接口和内存控制器

内存控制器的时钟信号由HCLK时钟信号提供,假设设置的HCLK的值为100M,1clock = 10ns,后续有些时序计算要用到。
S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚)。
在这里插入图片描述

配置GPIO控制器相应的寄存器,即可让引脚输出高低电平;配置UART控制器相应的寄存器,即可让引脚输出波形。前者相对简单,类似门电路,后者相对复杂,属于协议类接口。类似的协议类接口还有iic、iis、spi等。
对于CPU是不管什么接口的,它只写相应的寄存器,由控制器根据寄存器的配置去控制具体的引脚。

那么CPU是如何访问各个不同的寄存器的呢?
GPIO(门电路),uart(协议类接口)都是通过寄存器控制,寄存器都是内存有地址,继而必须引入一个内存控制器。
作用:cpu发出地址给内存控制器,内存控制器根据地址选择不同模块,(进行操作)把数据发给模块或者从模块中取出数据,最终可以返回数据给CPU。

上面这两个是一类,GPIO/门电路接口、协议类接口,都不会把地址输出到外部。
但是还有一类:内存类接口,会把地址输出到外部,比如Nor Flash、网卡、SDRAM。
cpu给内存控制器,cpu-内存控制线传出的地址直接给内存类设备(芯片)(如nor flash,网卡,内存)
也就是芯片有地址线控制的,接到arm的addr[]线那种
而上面两种cpu给出的地址仅仅就是为了寻找控制寄存器的。

注意:nandflash不同哦!不属于内存接口
gpio,iic,uart以及片外的nor等都是cpu统一编址,但是nand不是,并不会用到上述那种芯片的addr[]地址线!
在原理图上它的地址线并没有连接到CPU,因此它不参与CPU的统一编址。但它的数据线也接到了数据总线上,为了防止干扰,它肯定也有一个片选信号(CE)。这个片选信号不是内存控制器直接给,而是nand控制器发出,只有当CPU访问Nand Flash时,(cpu发出的地址控制到了nand控制器其中的某个寄存器),nand控制器才会发出片选信号使能nand芯片的片选,让其接收数据总线上的数据。

SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去,然后内存控制器根据片选信号选择相应的设备接收地址和数据信号,互不干扰。

地址线可能会接很多设备,是通过片选选定的,片选是如何产生呢?!!!!
cpu把地址(片选也是地址决定的,包含的)发给内存控制器,内存控制器根据不同的地址决定发出哪个片选信号。(也就是让芯片的那个引脚作用)
这个地址信号和外接的芯片(其实是和arm芯片的片选引脚)怎么对应呢,哪个地址内容对应哪个片选引脚作用?
在这里插入图片描述
S3C2440将1GB的外部存储地址空间分成了8个BANKS
每个BANK的地址空间为128M,总共1GB(8 BANKs)
外部存取器地址总共就1GB地址空间,再之上的40000000-FFFFFFFF的3g空间是外设寄存器如GPH0CON等的地址空间,其实也并没有都用完。总共4G,这是由32位机器32个地址线决定的,)
可编程控制的总线位宽(8/16/32bit),不过BANK0只能选择两种位宽(16/32bit)。
总共8个BANK,BANK0-BANK5可以外接ROM,SRAM等,BANK6-BANK7除可以支持ROM, SRAM外还支持SDRAM等。
S3C2440芯片性质决定了,SDRAM类型的内存条只能焊在 Bank6~Bank7上,最大支持内存 256M,即0x30000000–0x3FFFFFFF !!!!!!!!

当选择Nor Flash启动时,发出的地址信号范围是0-0x08000000范围呢,就会让nGCS0引脚处于低电平,硬件中就是Nor Flash被选中。
这是由内存控制器根据cpu提供的地址发出片选信号的。

内存控制器根据不同的地址地址范围,发出不同的片选引脚,只有被片选引脚选中的芯片才能正常工作,不被选中的芯片就像不存在一样,不工作。

cpu给出32位的地址后,内存控制器根据地址发出片选信号和addr0-addr26(共27地址线)。(虽然是32位,但只有27个地址线,够用。
为什么呢?
比如,0x00000000 -0x08000000,为128M,即每一个片选信号可以选择的空间是128M=2^27,也就需要A0、A1……A26,共27根地址线。外加一个片选线就行了。
在这里插入图片描述

补充:
1) 关于nor 和nand,两种不同的启动过程,!!参考第008课的博客内容!!!!
2) 视频中没讲到的重点内容:
我们常说的寄存器的地址位于哪里呢?
在这里插入图片描述
2440总共能够寻址的4GB空间,除了0-40000000这个1GB的范围是本节所讲的外设内存地址空间,再就是CPU内部使用的这些特殊功能寄存器地址空间(地址范围为0x4800 0000–0x5FFF FFFF),其余的地址空间没有使用!!

S3C2440A的ARM核内还有31个通用寄存器和6个程序状态寄存器(r0那些),该部分没有被编入我们通常所说的地址空间、即32位地址之中;通过逻辑电路直接给出操作地址(不是很明白???)。 这些寄存器只有通过汇编语言才可以访问;访问时,直接使用他们的名字即可。

下图可能是摘抄自别的板子的外设的内存分配:
在这里插入图片描述
值得注意的是nor都是从0地址开始的。SDRAM的3FF FFFF 共 26根地址线,也就是 2^6=64 2^20=1M 那么就是 64M。
我们的板子,提到外部内存设备,貌似就是三个:sdram,DM9000网卡,nor flash。也就是说这三个公用地址总线和数据总线,通过片选分时复用。
在这里插入图片描述
CPU是怎样发出地址信号的呢?下面这两个读写指令!!!!!!!!!就会让cpu把32位的地址发给内存控制器。
在这里插入图片描述

CPU是大爷,只需要发出指令,把地址给了内存控制器,内存控制器就会跑断腿做一系列操作。

不同位宽设备的连接

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意,个人理解,nbit指的是芯片内部一个地址对应n位,也就是n/8字节。跟这个芯片的存储大小是无关的。换句话说,n位的含义:芯片一次可以对外提供n位数据。
对于不同位数设备,CPU发出的地址是相同的,不过是因为接线空出(0/1地址线)使得rom接收到的地址不同,但最终得到的第几个字节是一样的。

假设CUP执行:
MOV R0, #3 @去地址为3的内存上
LDRB R1, [R0] @ 从内存为3的地址上,读出一个字节
在这里插入图片描述

假如传递一个32位的数据时
MOV R0, #4
LDR R1, [R0] @LDR代表读4字节,去地址4读四个字节(4,5,6,7)

执行过程如下:
8bitROM: 当CPU发出地址(000100),内存控制器会把000100,000101,000110,000111处的地址转发给ROM,ROM会把得到的地址000100,000101,000110,000111,上的数据返回给内存控制器,内存控制器会把得到的4个8bit的数据组装成一个32位的数据返回给CPU。
16bitROM: 当CPU发出地址(000100),内存控制器会把00010,00011处的地址转发给ROM,ROM会把得到的地址00010,00011,上的数据返回给内存控制器,内存控制器会把得到的2个16bit的数据组装成一个32位的数据返回给CPU。
32bitROM: 当CPU发出地址(000100),内存控制器会把0001处的地址发送给ROM,ROM会把得到的地址0001上的数据返回给内存控制器,内存控制器会把得到的1个32bit数据返回给CPU。
在这里插入图片描述

(cpu只是发给内存控制器一个地址码???应该不是把????那内存控制器怎么知道cpu要的是多少字节的?????)
(内存控制器知道自己接的是多少位的设备??????它怎么知道发几次地址出去?????????)

怎样确定芯片的访问地址:

  1. 根据片选信号确定基地址,
  2. 根据芯片所接地址线确定范围
    (比stm32简单呀,stm32还得考虑哪个片选线,片选线参与地址的计算,这里直接查出基地址就行了)
    实例:
    Nor Flash 使用的是片选0(nGCS0),基地址为0,用到A20,A19……A1,A0共21条地址线,所以地址范围为0x00000000 ~ 0x1FFFFF也就是2M的空间大小。

网卡(Net)使用的是片选4(nGCS4),基地址为0x20000000,地址线用了一个laddr2,但是这里还要用到laddr0判断读取的是高8位还是低8位(??????参考网卡dm9000章节) 。所以说共用到A2,A0共2根地址线,所以地址范围为0x20000000 ~ 0x20000005(ob101),(基址由所接片选线确定)。看数据线有16个知道是16位设备!!!!
(片选线不属于地址线中的一根,单独的)(ob表示二进制,)

SDRAM使用的是片选6(nGCS6),基地址为0x30000000。
SDRAM用了17个地址线(加上a0a1),这样计算地址范围难道是128k?(因为本来能访问的地址范围其实就是芯片的内存大小)
而我们用的SDRAM芯片是64M,显然不对。因为这里特殊,SDRAM发出的地址信号会分为列地址行地址,访问一次要发两次地址信号,地址线用两次(参考对应章节)。

内存类设备(地址+数据总线)时序图

信号之间是怎样一起工作的,以Nor Flash 为例。
2440和Nor Flash 之间有地址线,数据线,还有各种数据线连接。
在这里插入图片描述

下图是2440内存控制器的读写时序(对应手册图5-12 ngcs timing diagram):
在这里插入图片描述
下图是Nor Flash芯片的读时序。
在这里插入图片描述
芯片建议的时间,每个参数的参考范围可以通过芯片的AC CHARACTERISTICS得到。
在这里插入图片描述
我们需要做的就是设置S3C2440的Nor Flash控制器(应该也就是内存控制器)时序去满足Nor Flash芯片的时序。

易错点:上图中Taa max 70是什么意思呢?这里标注的是芯片的特性!!!!
指的是这段时间最大可能需要70那么久,所以控制器控制的这段时间要大于70。
而不是说,控制器给的这段时间最大是70。

Taa表示的是addr信号发出多久后data数据才有效,芯片需要taa这段时间准备,而准备时间可能最大需要到70ns,所以控制器得比这个时间长!
Tdf 表示在Tdf内数据不稳定,也就是不允许访问其他芯片,30ns。一般不需要理会这个,因为再次访问的时候,还需要时序前面的Taa。等到稳定的时候,数据已经稳定了。

编程:
为了简单我们把地址数据(Addresses),片选信号(CE#),读信号(OE#),同时发出,然后让它们都等待70ns(等待信号有效)。对应S3C2440的Nor Flash控制器的读时序图,需要让地址信号A[24:0]、片选信号nGCS、读信号nOE同时发出,保持Tacc大于等于70ns。

Nor Flash是接在BANKCON0上的,因此只需要设置BANKCON0即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值