OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16752|回复: 24

fsmc地址线问题

[复制链接]

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2011-5-31
在线时间
2 小时
发表于 2014-5-29 23:04:25 | 显示全部楼层 |阅读模式
5金钱
FSMC控制外部SRAM时,地址线A0-A15与SRAM的A0-A15分别对应连接,那么我实际输出的地址其实是左移了一位的地址,如果我的FSMC的A0与某外设的A1相连,而外设的A0与FSMC的NBL0相连,这样地址需要偏移吗?另外如果设置数据宽度为16bit,那么NBL0和NBL1不应该都是输出高吗?有点乱。因为是确实看见有人讲外设的A0与FSMC的NBL0相连

最佳答案

查看完整内容[请看2#楼]

首先 纠正一个问题 实际的输出地址是右移一位地址(16bit模式下) 1、如果我的FSMC的A0与某外设的A1相连,而外设的A0与FSMC的NBL0相连,这样地址需要偏移吗? 如果是16位模式 要的 地址偏移是FSMC内部的固化操作 如果你选择16位模式就会有地址偏移(稍后说明原因) 这样做是为了用户使用方便 2、另外如果设置数据宽度为16bit,那么NBL0和NBL1不应该都是输出高吗?  不一定 偶字节读写时仅NBL0有效,奇字节读写时仅NB ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

243

帖子

1

精华

高级会员

Rank: 4

积分
616
金钱
616
注册时间
2014-2-26
在线时间
1 小时
发表于 2014-5-29 23:04:26 | 显示全部楼层
首先 纠正一个问题 实际的输出地址是右移一位地址(16bit模式下)
1、如果我的FSMC的A0与某外设的A1相连,而外设的A0与FSMC的NBL0相连,这样地址需要偏移吗?
如果是16位模式 要的 地址偏移是FSMC内部的固化操作 如果你选择16位模式就会有地址偏移(稍后说明原因) 这样做是为了用户使用方便
2、另外如果设置数据宽度为16bit,那么NBL0和NBL1不应该都是输出高吗? 
不一定 偶字节读写时仅NBL0有效,奇字节读写时仅NBL1有效 字读写都有效(低电平有效)
3、有点乱。因为是确实看见有人讲外设的A0与FSMC的NBL0相连 
不知道 没见过

这里说一下我对FSMC地址操作的一点认识

首先说一个前提:STM32 单片机的一个地址(如:0x20000000)是一个字节 
也就是说如果定义一个16位数组 u16 temp[5]  如果temp对应的地址是0x00000000 那么temp+1对应的地址是0x00000002 (地址是加2)

假设此时我们有一个 64K*8bit 的sram
那很简单 stm32的A0~A15 与存储器A0~A15连接 大家很容易理解

若此时是 64K*16bit 的sram
也就是此时sram的一个地址对应两个字节 但是stm32是一个地址一个字节 这就出现了对准的问题
如果我们的地址线依然是stm32A0~A15 和 存储器的A0~A15 连接
如果stm32要从sram中读取前面提到数组中的temp[1]
stm32会给出0x0002(二进制地址0000000000000010b) 可是对于我们这个sram来说 读到却是temp[2],因为sram一个地址就是一个16位数据 
为了解决这个问题 我们只需要在给sram送地址时 右移一位 再送地址 即可(sram的一个地址对应stm32两个地址的数据)
比如读取0x0002 右移一位(即除2)为0x0001(0000000000000010b) 此时对应的就是temp[1]
而为了给用户提供方便 如果你选择的是16位宽度的sram FSMC会在你送地址的时候自动为你做右移一位的操作 
此时会有另外一个问题 每次都右移一位 A0没用吗 也即只能读写偶地址的数据吗?
这也就是NBL0和NBL1的作用了 如果你要进行字节操作
如stm32发送地址0x0001读取一个字节 右移一位对应的是sram地址0x0000处的16位数据 FSMC会根据AO 来控制NBLO和NBL110 读取高字节数据
所以呢  偶字节读写时仅NBL0有效,奇字节读写时仅NBL1有效 字读写都有效(低电平有效)



 
我是一只摔不死的蚂蚁!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-29 23:27:07 | 显示全部楼层
上图....
回复

使用道具 举报

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2011-5-31
在线时间
2 小时
 楼主| 发表于 2014-5-29 23:33:22 | 显示全部楼层
我这真没图。
地址线的连线如下
MCU(管脚)                   外设
FSMC_NBL0        A0
FSMC_A0            A1
FSMC_A1            A2
FSMC_A2            A3
FSMC_A3            A4
FSMC_A4            A5
FSMC_A5            A6
FSMC_A6            A7
FSMC_A7            A8
FSMC_A8            A9
FSMC_A9            A10
FSMC_A10          A11
FSMC_A11          A12
FSMC_A12          A13
FSMC_A13          A14
FSMC_A14          A15
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-29 23:58:58 | 显示全部楼层
这个连接有点怪异,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2011-5-31
在线时间
2 小时
 楼主| 发表于 2014-5-30 00:16:42 | 显示全部楼层
那么当fsmc设为16位数据宽度,NBL0和NBL1输出应该是高吗?
回复

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-5-30 11:58:23 | 显示全部楼层
回复【6楼】_tank_:
---------------------------------
非常强大!!非常NICE!!外部16位SRAM就是如此了,配合D0-D15。
不用谢了……
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-6-30
在线时间
0 小时
发表于 2014-9-15 14:03:02 | 显示全部楼层
五楼回答的很nice。。
回复

使用道具 举报

35

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2014-7-30
在线时间
49 小时
发表于 2014-10-28 12:39:08 | 显示全部楼层
..                                                 mark
我就是我,是颜色不一样的烟火。
回复

使用道具 举报

12

主题

39

帖子

4

精华

高级会员

Rank: 4

积分
724
金钱
724
注册时间
2013-5-10
在线时间
2 小时
发表于 2014-11-1 00:54:27 | 显示全部楼层
回复【6楼】_tank_:
---------------------------------
讲解的非常详细,也解开了我的一个疑惑“为什么战舰开发板的SRAM地址线的接法是A0对A0呢?”,因为以前一直看的是S3C2440接SRAM/SROM(16bit宽)都是MCU端地址线A1接SRAM的A0的,所以感到很奇怪为什么STM32的要那样接,原来是两种MCU的存储控制器不一样啊!STM32的FSMC内部自带移位功能,而S3C2440的MC不带此功能,只能从硬件接线上进行移位。
回复

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-12
在线时间
3 小时
发表于 2014-11-15 16:22:40 | 显示全部楼层
感谢楼主的问题与5楼的回答,自己查了下认真地理解了下....
回复

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2014-11-30 00:09:08 | 显示全部楼层
回复【6楼】_tank_:
---------------------------------
我问个问题,关于地址线和数据线打乱的问题
是否两者都可以任意打乱呢,我觉得数据线不能任意啊,至少在高低字节间是不行的,字节内是可以的吧。。。我看sram数据文件中,只选中低字节的话,高字节输出是高阻啊。。。还有就是兼容不同容量的问题,也就是说高位地址线是不能够打乱的,否则选地址时就会出错
回复

使用道具 举报

15

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2014-10-13
在线时间
0 小时
发表于 2015-1-23 17:15:45 | 显示全部楼层
回复【6楼】_tank_:
---------------------------------
前辈好,我的外部设备是一款运控芯片,配置为PCCard一直无法通讯。  因此现在打算配置成SRAM,有个问题是,我的芯片上面没有NBL[1:0]的链接端口,我是使用16位数据总线进行字传输,那么我配置成SRAM链接的时候,是否可以直接把NBL[1:0]丢弃不用??
另外,根据手册,“不论外部存储器的宽度是多少(16位或8位),FSMC_A[0]始终应该连到外部存储器的地址线A[0]。”,但是我的运控芯片的DataSheet上链接8086CPU的时候直接把该芯片的A0接地,那么我是否可以直接丢弃FSMC_A[0]而不用??
期待您的回答,非常感谢。
回复

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-11 09:53:05 | 显示全部楼层
回复【6楼】_tank_:
---------------------------------
深入到位,十分感谢,看完豁然开朗。。。
Good good study , day day up...
回复

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-11 12:28:58 | 显示全部楼层
不论外部接 8位/16/16 位宽设备, 位宽设备, FSMC_A[0]FSMC_A[0] FSMC_A[0]FSMC_A[0]FSMC_A[0]FSMC_A[0]FSMC_A[0] 永远接在外部设备
这句话是什么意思?
Good good study , day day up...
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-11 22:53:55 | 显示全部楼层
回复【15楼】Just Beat It:
---------------------------------
就是A0恒接外设的A0
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-12 08:13:07 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
为什么呢?为什么接别的不可以?其他的没有要求吗?比如说:那A【1】可以不接外设的啊【1】吗?
Good good study , day day up...
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-12 23:15:13 | 显示全部楼层
回复【17楼】Just Beat It:
---------------------------------
你可以自己试试.
让实战来告诉你什么可以什么不可以,好过不停的问我.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-12 23:15:34 | 显示全部楼层
回复【17楼】Just Beat It:
---------------------------------
空口打哇哇,没啥意思的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2015-3-13 12:14:55 | 显示全部楼层
回复【17楼】Just Beat It:
---------------------------------
其实是可以的 这里讨论的是接16位sram时是否需要地址移位,在stm32中是不需要,在s3c2440中是需要的(楼上有回答)

至于sram和fsmc的地址线a0~a15之间,不一定需要一一对应,完全可以按照布线方便而随意连接

当然必须注意的是,这种打乱线序的方法只能用在异步sram中,同步sram或者sdram这种,内存是分页的,能否打乱线序就要参考手册了
回复

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-16 19:43:21 | 显示全部楼层
回复【20楼】myxiaoniao:
---------------------------------
谢谢您,那我明白了
Good good study , day day up...
回复

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-5-5 17:19:41 | 显示全部楼层
在网上找了这么多关于FSMC的资料,只有这个清晰明了,感谢了
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12566
金钱
12566
注册时间
2015-11-5
在线时间
2150 小时
发表于 2016-5-22 15:33:37 | 显示全部楼层
myxiaoniao 发表于 2015-3-13 12:14
回复【17楼】Just Beat It:
---------------------------------
其实是可以的 这里讨论 ...

大神出现!哈哈,学习了!
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
12566
金钱
12566
注册时间
2015-11-5
在线时间
2150 小时
发表于 2016-5-22 15:39:26 | 显示全部楼层
百度找到一篇关于SRAM的地址线和数据线顺序能否打乱的资料
http://bbs.ednchina.com/BLOG_ARTICLE_3032879.HTM
拿来长岛冰茶换我半晚安睡
回复

使用道具 举报

暂时没想好 该用户已被删除
发表于 2017-2-15 20:24:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 16:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表