一.内存接口的概念
S3C2440是SOC,所以会有很多外设,一般驱动外设的方法可以分为:
CPU直接访问外设地址,驱动外设
后一种访问方式是CPU直接对内存地址的访问,即通过内存接口访问外设,CPU通过片选线选定外设,通过地址线先选定地址,通过数据线进行控制。
我们称这种外设为内存类设备,通常有:NOR FLASH、网卡、SDRAM……
那CPU是如何通过这些总线来驱动内存类设备呢?这就涉及到存储控制器了,下面就来介绍一下存储控制器的原理。
二.存储控制器(内存控制器)
2.1 什么是存储控制器?
存储控制器是按照一定的时序规则对存储器的访问进行必要控制的设备,包括地址信号、数据信号以及各种命令信号的控制,使主设备(访问存储器的设备)能够根据自己的要求使用存储器上的存储资源
存储控制器可以看作CPU与内存之间沟通的桥梁,CPU通过存储控制器来访问内存,比如GPIO、UART、IIC、SDRAM……都属于CPU的统一编址,地址都是CPU统一编排的(NAND FLASH不属于),所以CPU就可以通过存储控制器来访问这些外设的地址。
2.2 S3C2440存储控制器介绍
下面是S3C2440的存储控制器介绍:
其中主要的信息为:
总共1GB的内存,分为8BANK,每个BANK的地址大小为128MB
BANK的位宽是可编程的
BANK0~BANK7的起始地址是固定的
此外,为了访问这1GB的空间,存储控制器引出了27根地址线ADDR0~ADDR27,这时候我们算一下:2^27=128M,这明明是一个BANK的空间呀,怎么可以访问8个BANK的空间呢?
其实还有8根片选线nGCS0~nGCS7,用来选择某一块BANK,就是8个BANK将1GB空间划分为8块128MB大小的空间,当访问某一块范围内的地址时,将此块的片选信号拉低就可以,这8个BANK的地址空间如下:
注意:S3C2440是32位CPU,理论上可使用的地址大小为4GB,除了上面这由于连接外设的1GB外,还有一部分空间是CPU内部寄存器使用了,剩下的地址空间没有使用。
2.3 存储控制器如何处理不同位宽的外设
有的外设位宽是8bit,有的是16bit,有的是32bit,当CPU访问这些外设的内存空间时,那要怎么办?要分情况来吗?
不需要,因为有存储控制器!CPU只需要向存储控制器提供地址,由存储控制器来解决不同位宽的问题。
以ROM为例:CPU想读取ROM中的某块地址中的数据,可ROM的位宽有8bit、16bit、32bit
下面对比一下三种位宽情况下ROM与存储控制器的接线情况:
8bit:
16bit:
32bit:
区别就是地址线的接法,8bit位宽是相对应的A0对A0;16bit位宽是从A1开始对齐的;32bit位宽是从A2开始对齐的,这是因为不同位宽的ROM内部构造不相同。
ROM的内部构造:
8bit带宽:每个地址的空间大小是8bit(1Byte);
16bit带宽:每个地址的空间大小是16bit(2Byte);
32bit带宽:每个地址的空间大小是32bit(4Byte);
表面上看到A0、A1没用到,实际上是起了别的作用:
8bit:内存控制器A0对应ROM的A0
16bit:内存控制器A1对应ROM的A0,内存控制器A0用来确定16bit(2Byte)中的哪一Byte
32bit:内存控制器A2对应ROM的A0,内存控制器A1A0用来确定32bit(4Byte)中的哪一Byte
实际上这些地址线都是有用的!!!
下面通过俩个例子来说明CPU在对不同位宽ROM读取数据时的差异。
例一:
#读取地址3的一个字节数据到R1寄存器
MOV Ro ,#3
LDRB R1, [R0]
读地址3的一个字节(LDRB 代表读取一个字节),CPU会将地址3发送给ROM(通过内存控制器),此时A2A1A0对应:011
8bitROM:A0对应A0,直接取出第三个数据,1Byte
16bitROM:A1对应A0,取出第一个数据,2Byte(一个地址16bit)
32bitROM:A2对应A0,取出第0个数据,4Byte(一个地址32bit)
取出的数据中 包含有我们想要的数据,由内存控制器筛选我们所需要的数据。
过程:CPU发出地址,ROM通过存储控制器收到地址,ROM返回数据给存储控制器,存储控制器筛选所需要的数据,存储控制器返回有用数据给CPU。
存储控制器操作16bit、32bit时会根据A0、A1的信息筛选出所需数据给CPU。
例二:
#从地址4开始读取32bit数据(4Byte)
mov R0, #4
LDR R1, [R0]
CPU去地址4开始读取4Byte数据(32位ARM),地址是以Byte为单位的,地址4就是第四个Byte,此时A2A1A0对应:100
8bit:发送四次地址给ROM,每次得到一个ROM返回的字节(8bit),内存控制器整合4Byte数据
16bit:发送俩次地址给ROM,每次得到俩个ROM返回的字节(16bit),内存控制器整合得到4Byte数据
32bit:发送一次地址给ROM,ROM返回四个字节(32bit),正好是地址4开始的4Byte数据
过程:CPU发出地址给内存控制器,内存控制器收到地址转发给ROM,ROM返回数据,内存控制器组装数据后返回CPU。
2.4 怎么确定芯片的访问地址?
第一步:根据片选信号确定基地址(每个片选线确定的地址块有128MB)
第二步:根据芯片所接地址线确定范围(27根地址线)
比如:Nor FLASH
片选线0,基地址0X0000_0000,因为这个NOR FLASH是16位的,所以内存控制器的LADDR1接A0,LADDR0用来选择低八位还是高八位。
用到A0~A20总共21条地址线,所以NOR FLASH地址范围是:基地址+地址线确定的范围
即:0X0000_0000~0X001f_ffff 2^21=2M空间。
比如:网卡NET
基地址是nGCS4:0X2000_0000 内存控制器的地址线只接了LADDR2,16位数据线,意味着LADDR0也用到了。
网卡的地址范围:基地址+0b000~基地址+0b101 (LADDR1的位置无所谓)即:0X2000_0000~0X2000_0005
访问这些地址就可以访问到DM9000网卡
比如:SDRAM
SDRAM输出是32位,所以LADDR0、LADDR1已经包含了,加上LADDR2~LADDR14、LADDR24、LADDR25总共17条地址线,2^17=128k ,然鹅SDRAM是64M的,实际上是行地址和列地址。(这个问题会在下篇博客中细细分析)
三.时序问题
以NOR FLASH读时序为例:
内存控制器与NOR FLASH有地址线LADDRx、数据线LDATAx、片选信号nGCS0、读信号LnOE、写信号LnWE
这些信号控制线协调工作。
下面是芯片手册中存储控制器对芯片读数据时的时序图:
各个信号的持续时间根据外设芯片的性能有差异,可以根据具体芯片的手册进行设置,比如NOR FLASH:
(读时序)
对照AC特性:
然后就是配置各个信号线的时序:
可以看出,Taa=70ns时,同时发出保证了片选线、读信号线、地址线的时序,可以得到有效的数据
设置寄存器:
板子默认是14clocks,上电时,HCLK默认晶振12MHz,此时的Tacc=1166ns,相当于牺牲了性能来满足各种NOR FLASH。
我们配置当HCLK=100MHz时,1clock=10ns 所以选择8clock:101。
按照寄存器直接配置就可以了,可以通过烧写NOR FLASH的速度来体现时序中Tacc的影响。
上一篇:S3C2440—8.读写SDRAM
下一篇:ARM之未定义指令异常和SVC异常
推荐阅读
史海拾趣
随着电子行业的快速发展,市场竞争也日益激烈。奇美公司深知创新是企业发展的核心动力,因此不断加大研发投入,推动技术创新和产品升级。公司研发团队积极探索新技术、新工艺和新材料的应用,推出了一系列具有创新性和竞争力的产品。这些产品不仅满足了客户的需求,还为公司开拓了新的市场领域。
在快速发展的同时,A-BRIGHT公司深知品质的重要性。公司加大了对品质管理的投入,引入了先进的生产线和检测设备,并建立了严格的质量管理体系。通过持续改进和优化生产流程,A-BRIGHT的产品质量得到了显著提升,赢得了客户的信任和好评。
昆泰芯微电子自成立以来,便以其深厚的技术实力和持续的创新能力,在电子行业中独树一帜。公司拥有一支由清华大学、荷兰代尔夫特理工大学等海内外知名大学毕业的专业技术团队,他们具备在恩智浦、美满电子及高通等半导体名企的工作经历,为公司带来了丰富的行业经验和前沿技术。在传感器芯片领域,昆泰芯微电子成功研发出具有国际一流性能的产品,成功打入一线知名品牌厂商,引领了行业风潮。
随着电子行业的快速发展,AMERICASEMI意识到只有不断创新才能在市场中立于不败之地。因此,公司加大了对研发的投入,积极引进先进的技术和设备,不断提升自身的研发能力。经过多年的努力,AMERICASEMI成功研发出多款具有创新性的半导体产品,如高性能的功率管理芯片和低功耗的传感器等,这些产品在市场上获得了广泛的认可。
面对日益变化的市场环境和客户需求,Elcoma公司始终保持创新的精神。他们不断投入研发资金,引进高端人才,加强技术创新和产品研发。同时,Elcoma还积极探索新的商业模式和市场机会,以适应市场变化并抓住发展机遇。这种创新驱动的发展策略使Elcoma在电子行业中保持领先地位,并为企业的未来发展奠定了坚实的基础。
最近在调试一个中频调制电路,其中使用一款VCO—MAX2609来产生本地正弦震荡,该VCO的频率变化范围为540MHz-650MHz,单独调试是能够产生预期的560MHz正弦波。但是由于在整体电路中,数字部分的器件中使用了一个44MHz的晶振,当整体调试时,就发现VCO ...… 查看全部问答∨ |
最近,论坛出于运营等多方面考虑,实现了芯币制,这样考虑有利于论坛的发展,我们也只好理解了。 但作为发帖的楼主们,能不能多为大家考虑呀,多一份奉献精神哪。我发现有些帖子的资料是“出 ...… 查看全部问答∨ |
1 引言 人口老龄化已成为当今世界的一个突出的社会问题。据联合国统计,2002年,全世界的老龄人口(60岁及60岁以上)总数已达6.29亿,占世界人口总数的10%,到2050年,将占总人口数的21%。中国是世界上老年人口最多的国家,2004年底,中国60岁及 ...… 查看全部问答∨ |
|
在CE中 当应用程序A调用了COM组件更新数据库内容时,则需要通知应用程序B同步数据库中的内容( 通知内容是带具体数据,且都是无窗体程序); 应该如何实现?? 怎样才能效率比较高?? … 查看全部问答∨ |
|
WINCE系统下,大的位图按钮焦点切换时,位图会闪烁怎么回事?我用的是那种--选中/不选中/得到焦点各自对应一张位图的普通位图按钮类 WINCE系统下,大的位图按钮焦点切换时,位图会闪烁怎么回事?我用的是那种,选中/不选中/得到焦点各自对应一张位图的普通位图按钮类 在DRAWITEM函数里面再对各自不同的状态,BITBLT位图到当前的CDC。我的程序在PC上没这个问题,也许是PC的速度快好 ...… 查看全部问答∨ |
安装好ccs3.3后,设置中选择了 F28335 XDS510 Emulator (我用的是仿真器usb2.0),设置好后连接成功,仿真操作一切正常。但是在SdConfig v3.3 软件中进行设置时,端口选择0x240时却没有XDS510选项,仅有spi510,RESET时失败。请问这种 ...… 查看全部问答∨ |