分析ARM外设flash及SDRAM的地址连接

先提一下位宽的概念,对于具体器件而言,它的位宽是一定的,所谓位宽,指的是“读/写操作时,最小的数据单元”──别说最小单元是“位”,一般设备上没有单独的“位操作”,修改位时通过把整个字节、字或双字读出来、修改,再回写。am29l800bb这种nor flash位宽是16位。k4s561632c这种sdram位宽是32位。
对于cpu来说,一个地址对应的是一个字节(8位),也就是说cpu的地址线(a0~a20)对应的最小数据单元是字节。
这里需要注意的是,不要把“外设的位宽”和“cpu的位数”这两个概念混淆了。外设的位宽是读写外设的最小数据单元,cpu位数是cpu可以一次处理的字节数,32位cpu可以一次处理4字节数据。
好了,相信你也已经发现问题了吧。既然cpu最小数据单元是8位,flash位宽是16位,那在我们写程序时会特意进行16位操作吗?显然不会,我们写代码时,可不管外设到底是多少位。这是如何实现的呢?原因在于存储控制器(memory controller)这个中间层。
存储控制器根据nor flash的位宽,每次总是读/写16位数据。
以读操作为例:
cpu进行8位操作时,它选择其中的8位返回给cpu;
cpu进行16位操作时,它直接把这16位数据返回给cpu;
cpu进行32位操作时,它发起2次读/写,把结果组合成32位返回给cpu。
现在的连线是:cpu的(addr1-addr20)接到 16位的nor flash (a0-a19),即cpu的addr0不接──这说明:不管addr0是0还是1,nor flash接收到的地址是一样的。
cpu发出地址0bxxxxxxxxx0、0bxxxxxxxxx1时,nor flash看到的都是0bxxxxxxxxx,返回给存储控制器的都是同一个16位数据。再由memory controller选择其中的低8位或高8位给cpu。
存储控制器会做以下事情:
软件要读取地址0上的8位数据时,硬件是这样进行的:
① memory controller发出0b000000000000000000000的地址信号,nor flash的a0-a19线上的信号是:0b00000000000000000000
② nor flash在数据总线d0~d15上提供一个16位的“最小数据单元”的数据;
③ 存储控制器读入16位数据;
④ 存储控制器把16位数据的低8位返回给cpu,就得到了一个8位数据。
软件要读取地址1上的8位数据时,硬件是这样进行的:
① 存储控制器发出0b000000000000000000001的地址信号,nor flash的a0-a19线上的信号是:
0b00000000000000000000
② nor flash在数据总线d0~d15上提供一个16位的数据,这是nor flash中的第1个“最小数据单元”
③ 存储控制器读入这个16位数据
④ 存储控制器把这个16位数据的高8位(注意,前面的低8位)返回给cpu,这就是一个8位数据。
所以:
外设位宽是8时,cpu的a0~axx与外设的a0~axx直接相连
外设位宽是16时,cpu的a1~axx与外设的a0~ayy直接相连,表示不管cpu的a0是0还是1,外设看到的都是同一个地址,
对应16位的数据,存储控制器对数据进行选择或组合,再提供给cpu。
外设位宽是32时,cpu的a2~axx与外设的a0~azz直接相连,表示不管cpu的a0a1是00,01,10还是11,外设看到的都是
同一个地址,对应32位的数据,“memory controller”对数据进行选择或组合,再提供给cpu。
经过以上分析,我们应该知道了,为什么地址线要偏移几位了。同样的sdram因为是32位宽的,所以偏移2位。那为什么sdram要连addr2~addr14和addr24、addr25呢?同样,我们先看下sdram的基本知识。
sdram的连接方式与上面flash的类似,但是要比其复杂些。因为sdram内部是一个存储阵列,如同表格一样将数据填进去,因此得先指定一个行,再指定一个列,才可以找到所需的单元格。这个表格被称为逻辑bank(l-bank),一般有4个bank。可以想象,对sdram的访问分为以下4个步骤:
① cpu发出片选信号nscs0有效,选中sdram芯片;
② 选择l-bank,最开始说的addr24和addr25即此作用;
③ 进行统一行/列寻址;
根据sdram芯片的列地址线数目设置cpu相关存储器后,cpu就会从32位的地址中自动分出l-bank选择信号、行地址信号、列地址信号,然后先发出行地址信号、列地址信号。l-bank选择信号在发出行地址信号的同时发出,并维持到列地址信号结束。在本例中,行地址、列地址公用addr2~addr14。k4s561632行地址13,列地址9,所以nsras信号有效时,addr2~addr14发出行地址,对应32位地址空间的bit[23:11];nscas有效时,addr2~addr10发出列地址,对应32位地址空间的bit[10:2]。而bank选择位对应bit[25:24]。这样就构成了64m地址空间,及30000000到33ffffff。

怎样将iPhone的屏幕投至MacBook上
美国公布对大疆的337调查结果_337调查是什么意思
疯了?内存价格降至冰点,美光却加紧扩大产能!
拼多多回应APP远程删除照片:将对产品做改进
三十二路广播电视播出监控系统
分析ARM外设flash及SDRAM的地址连接
探索一下电磁波背后的故事
发力5G和毫米波雷达 英飞凌最新电源管理及射频技术揭秘
三相异步电动机电容容量的计算方法
供应链管理是什么意思?区块链技术在供应链行业中有哪些应用?
关于办理银行业务的介绍和便利分析
PMP7390的实例原理
【智能医疗】发挥人类想象力和创造力,如何实现智能医疗?
Sony半导体AI应用事业再扩大 6个半导体生产据点全面引入AI
步进电机控制器电路 Stepper Motor Contro
电脑无法识别的usb设备怎么解决
北京同志科技携敏捷制造设备亮相中国(成都)电子展
PCB化学镀镍液为什么不稳定
物联网是怎样促进我国传感器的发展的
场效应晶体管工作原理