当访问16位接口SRAM

onlinesh   2008-11-12 11:28 楼主
时,为了能访问8位、16位、32位的变量,STM32的地址线和SRAM的地址线应该怎么连接?附图中的三种地址线连接方式是什么意思?




请注意:因为我的理解不准确,我在20楼之前的解释有所误导,请看22楼的说明。

请楼主原谅,因为此事非常重要,我不得不在此修改你的帖子,提请大家注意,抱歉。——香水城
  

回复评论 (35)

访问变量的数据宽度与外部存储器的数据宽度不是一个概念

上表是表示连接外部存储器时的情形。

如果要与16位接口SRAM连接,表中第2行,请使用HADDR[25:1],HADDR[0]不接。
点赞  2008-11-12 11:55

只有这样接

                                 才能访问全部外部8位、16位、32位的变量?这是什么原理呢?
点赞  2008-11-12 13:23

不是我要这样接,是你的外部存储器有16条数据线

                                 不这样接,如何访问所有存储单元?
点赞  2008-11-12 13:30

问的就是其中的原因

                                  
点赞  2008-11-12 13:38

正确的接法只有一种,不正确的方法可以有很多

                                 你能不能举个与正确接法不同的例子,我告诉你为什么不行。
点赞  2008-11-12 13:44

16位的SRAM从STM32的A0开始接

                                 会出现什么后果?
点赞  2008-11-12 13:47

HADDR[0]是控制地址最低位的

对于有16位数据线的存储器,地址相差一个单元,对应2个字节的数据,而STM32的地址线的最低位是对应字节的数据,地址线的次低位才对应2个字节的数据,所以访问16位数据线的存储器时不能使用HADDR[0]。

如果要区分2个字节,即以字节形式操作时,则有NBL1和NBL0指定。
点赞  2008-11-12 14:07

我明白了香主

8位接口的512K字节SRAM地址线是A0~A18
16位接口的512K字节SRAM地址线是A0~A17
为了让单片机能访问相同的容量,必须接成同样的高地址空间,所以16位的SRAM要少接一根线才能让单片机访问19根地址线

但是据说有的单片机能设置16、32位的SRAM从哪根线开始接,这个是谎言不?
点赞  2008-11-12 14:18

不明白你最后那个问题在问什么

                                 请详细说明。
点赞  2008-11-12 14:20

香版给

绕晕了.
16bit的SRAM时,addr0是无效的,所以不接.原因是16位的访问地址是0x0,0x2,0x04.............
32bit的SRAM时,addr0和addr1都是无效的.因为32位的访问地址是0x0,0x4,0x8..........
所以配置成16/32位时,addr0/1输不出有用的信号,所以不接.
点赞  2008-11-12 14:37

楼上是王励勤????

                                  
点赞  2008-11-12 14:42

不是

                                 嘿嘿,偶也是老ID了.
点赞  2008-11-12 14:44

但是据说有的单片机能设置16、32位的SRAM从哪根线开始接

                                 就是设置完某寄存器后8位、16位、32位的SRAM都能从A0开始接,而且都能访问全部的存储空间,STM32能不?这个是我一个用4510的朋友告诉我的
点赞  2008-11-12 14:50

14楼说的可以是一种设计,但意义不大

同样是访问64M字节的数据,8位数据线的存储器需要26条地址线,16位数据线的存储器需要25条地址线,32位数据线的存储器需要24条地址线。当需要较少地址线时,STM32始终是用最高的那些地址线,使每条地址线始终保持相同的意义。

而你说的那种方式,只不过是把最高地址线空出来,但改变了每条地址线自身的意义。当访问8位数据线的存储器时,地址线A0表示选择字节,地址线A1表示选择双字节;但当访问16位数据线的存储器时,地址线A0表示选择双字节,而地址线A1表示选择四字节;到了访问32位数据线的存储器时,地址线A0又变成了表示选择四字节。这样做除了造成信号线意义上的不断变化外,我没有看出其它好处。
点赞  2008-11-12 15:17

但是现在看来其它ARM有这么设计的

咱们的STM32目前提不提供这样的功能?(或者说有这样的寄存器)
另这个功能的好处是如果按8位方式最大能访问256M字节的话,那么按32位最大可访问1G字节的空间
点赞  2008-11-12 15:36

为什么ST官方的DEMO板连接16位的SRAM用了A0呢

                                 如题,STM3210E-EVAL好像ZET6的A0接到了SRAM的A0。这是为何?
点赞  2008-11-12 15:52

ST官方的DEMO板连接16位的SRAM用了A0

                                   ST官方的DEMO板连接16位的SRAM用了A0,是因为STM32可以用8位的方式来访问板上16位的SRAM的低字节或者高字节
点赞  2008-11-12 15:58

STM32不提供这样的功能

你提出了一个很有意思的问题,“这个功能的好处是如果按8位方式最大能访问256M字节的话,那么按32位最大可访问1G字节的空间”

首先,请注意一个事实,Cortex-M3核心的寻址能力只有32位,即4G字节。其次这4G字节的空间是有所划分的,各家的划分方式不大一样,但又大同小异。

请看下图是STM32的存储空间分配图,从左上角放大的部分看,Cortex-M3的32位地址线中,高6位被用于选择存储器块,而剩下的26位地址线已经全部输出到片外,每个存储器块只可能有64M字节的空间,是不可能达到更大的空间的。

你说其它ARM芯片有这么设计,那么请问这些ARM芯片的4G字节存储器空间是如何分配的?请给一张类似于STM32的这个存储空间分配图,让大家比较一下。
点赞  2008-11-12 16:08

o了

死心了
那17楼的问题怎么解释呢?
点赞  2008-11-12 16:12
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复