历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2020年04月07日 | (嵌入式)关于arm中的存储控制器(一)

2020-04-07 来源:eefocus

实验目的:

由于开发板(JZ2440 V3)上电后从Nand flash启动CPU时,CPU会通过内部的硬件将Nand flash的前4K数据复制到称为“Steppingstone”的4K内部SRAM中(起始地址为0),然后跳到地址0开始执行。


这个实验我们先用汇编语言设置好S3C2440芯片内部的存储控制器,使外接的SDRAM可以操作使用:然后把程序本身从“Steppingstone”(即芯片内部的4K SRAM)复制到SDRAM处,最后跳到SDRAM中执行。


知识预备:

存储控制器(memory controller):它为CPU提供了访问外部设备所需的信号,这是一种通过总线方式来访问拓展的外设,在嵌入式中,这些拓展的外设可能不仅仅是内存,也包括网卡、Nor flash、Nand flash等等。(这里我们可以把它想像成是CPU与拓展外设沟通的桥梁!)


S3C2440芯片对外引出了27根地址线ADDR0~ADDR26,那么它的访问范围即2^7*2^20=128MB。但是这个芯片可以达到1GB的访问空间,怎么达到的?因为CPU还对外引出了8根片选信号:nGCS0~nGCS7,对应于BANK0~BANK7。当访问BANKx的地址空间时,nGCSx引脚输出低电平用来选中外界的设备,故:这个芯片最多8个拓展外设,因为只有8个bank,想用相应的外设直接让相应的nGCSx输出低电平即可   ^~^   看来也不是很难,就是这么个理。


那么问题来了,如果我们想通过CPU访问一个芯片需要哪些条件呢?

1.地址线(我们需要知道芯片的访问地址)

2.数据线(我们需要知道一次传输多少数据,8bit/16bit/32bit 即我们常说的数据宽度)

3.时钟/频率(我们需要CPU与外设约定好传输的速率,不能太快,不能太慢,必须能满足双方的要求)

4.芯片相关的一些要求(比如说我们这里是访问SDRAM,那么就得知道它的行地址,列地址,哪个l_bank,这样我们就可以具体确定访问芯片的哪个存储单元了)


现在我们实验的是通过CPU访问SDRAM,那么我们就大概的想象一下,我们可以大致的分为4个步骤:

①CPU发出的片选信号nGCS6有效,它选中SDRAM芯片。(从V3原理图可得)

②SDRAM中有4个L-Bank,需要两根地址信号线选中哪一个L-Bank。(从V3原理图我们可以知道 CPU的ADDR24、ADDR25作为L-Bank的选择信号)

③对SDRAM进行统一的 行/列 寻址。(这样我们就可以确定具体访问芯片内部哪一个存储单元了)

④找到存储单元后,就要对SDRAM进行数据传输了。(这里我们就需要知道数据宽度等等)


如果你开始没有了解过SDRAM,也许上面这四个步骤你有些不大明白,没关系啊,现在我就来穿插一下,大概的说一下这个SDRAM内部的存储结构到底是个什么鬼:

(这里你可以先天马行空一下,你眼前现在应该浮现出一个长方体的蛋糕,然后你拿刀切切切,切成四块,一块你给它想成是一个面,然后一个面你就给它看成是Excel表格)

SDRAM的内部是一个个存储阵列,阵列就如同表格一样,将数据“填”进去。和表格的检索原理一样,先指定一个行(Row)和一个列(Column),就可以准确的找到所需要的单元格,这就是SDRAM寻址的基本原理,这个单元格被称为存储单元,这个表格(存储阵列)就是逻辑Bank(Logical Bank,简称L-Bank)。SDRAM一般分为4个L-Bank。PS:这回上面的那4个步骤你就应该明白了,接下来我们就看看具体怎么操作。


对于①,我就不废话了。

对于②,[ADDR25:ADDR24]=0b00/0b01/0b10/0b11,就正好对应四个L-Bank了。

对于③,(这个我们就得SDRAM的芯片手册和原理图结合看一下了)根据SDRAM的列地址线数目设置CPU相关的寄存器后,CPU就会从32位的地址中自动分出L-Bank选择信号、行地址信号、列地址信号,然后先后发出行地址信号,列地址信号。L-Bank选择信号在发出行地址信号的同时发出,并维持到列地址信号结束。


在我们这个实验中,行地址、列地址共用ADDR2~ADDR14,然后使用nSRAS、nSCAS来区分它们(Bank6的位宽是32,也就是CPU访问SDRAM,一次访问4个字节。而CPU的单位是Byte,eg:CPU内存地址0x00000000、0x00000001、0x00000002、0x00000003其实访问的都是SDRAM的0x00000000,即CPU真正有效的地址位是从ADDR2开始的,所以ADDR0和ADDR1没用)。


通过原理图我们可以看出,这个开发板的两根地址线ADDR24、ADDR25作为L-Bank的选择信号,行地址数为13,列地址数为9。当nSRAS信号有效时,ADDR2~ADDR14发出的是行地址信号,它对应32bit地址空间的bit[23:11]。当nSCAS信号有效时,ADDR2~ADDR14发出的是列地址信号,它对应32bit地址空间的bit[10:2]。ADDR0、ADDR1恒为0,不参与译码。


这个图是SDRAM芯片手册上的

所以此时访问SDRAM的内存地址范围为 0x30000000~0x30000000+0x03FFFFFF 即 0x30000000~0x33FFFFFF。


共64MB。为什么是64MB? (2^13*2^9*4)*32bit/8 = 2^26 Byte=64MB


对于④,看开发板原理图可以得到,我们使用了俩片16位的SDRAM芯片并联组成32位的位宽,与CPU的32根数据线(DATA0~DATA31)相连。

完成这个实验的预备知识就还剩最后一个问题了,大家想一下,我们通过CPU访问SDRAM,上面我们已经把关于SDRAM部分的操作说完了,接下来自然而然就剩下那个“桥梁”————配置CPU内部的存储控制器。


怎么配置?很简单,就是往一堆寄存器里写我们需要的配置就好。而通过S3C2440芯片手册我们可以了解到,CPU内部存储控制器相关寄存器地址为0x48000000~0x48000030(一共13个)。


接下来就是讲我们这个实验里需要用到的寄存器以及相关配置了:

嗯哦哼  哼哦啊  啊哈吼……………………想了想,相应寄存器我也要详细了解了解,仔细的学习学习。所以我就单另放在我的下一篇博客了。


仁者见仁,智者见智。同一个问题不同的人就会有不同的看法,适合自己的就是最好的 !

推荐阅读

史海拾趣

Fujitsu America公司的发展小趣事

随着云计算技术的兴起,Fujitsu America紧跟时代潮流,积极推动云计算服务的全球化布局。公司凭借其强大的技术实力和丰富的行业经验,为北美乃至全球的企业客户提供了一站式的云计算解决方案和服务。Fujitsu America的云计算服务不仅涵盖了基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)等多个层面,还注重与客户的深度合作,根据客户的实际需求提供定制化的解决方案,帮助客户实现数字化转型和业务升级。

Acme Electric Corporation公司的发展小趣事

为了更好地服务北美市场的客户,Fujitsu America实施了一系列本地化服务策略。公司不仅在当地建立了完善的销售和服务网络,还积极培养本地化的技术和服务团队,以更好地满足客户的实际需求。同时,Fujitsu America还注重与当地政府和行业协会的沟通与合作,积极参与行业标准的制定和推广工作,为公司在北美市场的长期发展奠定了坚实的基础。通过这些本地化服务策略的实施,Fujitsu America在北美市场树立了良好的品牌形象和市场地位。

诚芯微(CXW)公司的发展小趣事

在2021年,诚芯微获得了数千万元的Pre-B轮融资,由中信建投和投控东海入股、时代伯乐加投。这笔融资为公司的发展注入了新的动力。同时,公司还完成了股改,正式更名为深圳市诚芯微科技股份有限公司。股改完成后,诚芯微的治理结构更加完善,为公司未来的发展奠定了坚实的基础。

以上故事仅为概述性描述,实际发展过程中可能涉及更多细节和复杂因素。如需更详细的信息,建议查阅相关新闻报道或行业分析报告。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着技术的成熟,Galaxy Microelectronics开始寻求与大型电子产品制造商的合作。

发展:2005年,Galaxy Microelectronics与一家领先的智能手机制造商达成合作协议,为其旗舰产品提供定制化的NAND闪存解决方案。这一合作不仅让Galaxy Microelectronics的产品迅速进入市场,还显著提升了其品牌知名度。随后,公司陆续与多家知名电子产品厂商建立合作关系,进一步巩固了其在闪存市场的地位。

Herga公司的发展小趣事

近年来,Herga公司紧跟智能制造的发展趋势,大力推动生产线的自动化和智能化升级。公司引入了先进的机器人、自动化设备和智能管理系统,实现了从原材料采购、生产加工到成品检验的全流程自动化控制。这一举措不仅大大提高了生产效率和质量稳定性,还降低了人力成本和运营风险。Herga公司的智能制造实践为电子行业树立了典范,也为公司的持续发展注入了新的动力。

Franz Binder GmbH & Co公司的发展小趣事

在20世纪90年代初,Herga公司凭借其在精密电机技术上的突破,成功研发出一款高效能、低噪音的步进电机,迅速在自动化设备和电子设备市场中脱颖而出。这款电机不仅提高了生产效率,还显著降低了能耗和噪音水平,赢得了众多知名电子制造商的青睐。Herga公司借此机会,进一步拓展产品线,逐步确立了在电子行业精密传动组件领域的领先地位。

问答坊 | AI 解惑

SPMC65单片机在电动自行车控制器中的应用

1 引言 所谓中断是指当CPU正在处理某件事情的时候,外部发生的某一事件(如一个电平的变化,一个脉冲沿的发生或定时器计数溢出等)请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件以后,再 ...…

查看全部问答>

五花八门的电池技术-2010年影响世界的十大潜力新技术

已经非常成熟的电池技术无法像是依循着摩尔定律(Moore\'s law)的IC那样,继续在能量密度上有所进展;但无可讳言,虽然我们希望电池能储存更多的电能,那也有可能带来其他的安全性风险。各种可携式电子设备都需要电池来供电,诉求环保的电动车若是少 ...…

查看全部问答>

DSP看门狗

群里朋友的问题 有没有高人用过max706做过DSP看门狗复位电路?碰到一个很奇怪的问题,板子不加max706的时候工作,加上以后板子不工作了…

查看全部问答>

有没有在深圳熟WINCE开发,能做兼职的兄弟

有个两个月左右的时间的一个小项目,有意者留下联系方式,内容及报酬详谈.…

查看全部问答>

WinCE 串口

各位兄弟谁开发过或者正在开发WinCE串口程序,一起交流一下,QQ:987530739,交流进步,谢谢!…

查看全部问答>

100分求arm9下开发GPS导航仪需要什么关键技术与步骤?

任务是在ARM9下开发一个船舶GPS导航仪,WINCE和linux操作系统可任选择(最好是linux)说说具体的开发过程和关键的技术!(如果回复的很详细的话,可以另外在给分,我会另外开个贴) (如果可以提供相关技术(如原代码和原理图)的话,联系我有酬劳!)…

查看全部问答>

INTEL VT的应用

  想知道INTEL VT 技术对普通用户能带来什么具体的应用?…

查看全部问答>

RegisterHotKey热键问题 wince5.0

将按键B设为热键 用来调节音量 在OnInitDialog中 RegisterHotKey(this->GetSafeHwnd(),1001,NULL,\'B\'); RegisterHotKey(this->GetSafeHwnd(),1002,NULL,\'b\'); 响应函数为 LRESULT CTestVol::OnHotKey(WPARAM wParam, LPARAM lParam) { & ...…

查看全部问答>

启动代码那来的啊?

刚学ARM 看了网上好多讲启动代码的,几乎都差不多的模样。所以有点小疑问 启动代码是工程师自己参考资料写的呢?还是在那份资料里有呢?启动代码的相关资料我没找到呵呵。   另外想问问,启动代码有更简化的么?想参考看看…

查看全部问答>