OpenEdv-开源电子网

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

关于外部SRAM实验

[复制链接]

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2015-6-4 11:17:45 | 显示全部楼层 |阅读模式
5金钱

sram例程里的FSMC_SRAM_WriteBuffer()程序里WriteAddr+=2改成WriteAddr++我知道了。这个我也仿真测试了,但是我现在遇到个问题,就是我不给外部SRAM赋值,然后读它的字节,为什么里面的数不是全0或者全1呢。每次断电再上电,显示的数据就不同了,这个是属于SRAM正常现象吗?
 //for(ts=0;ts<250000;ts++)testsram[ts]=0x11223344;//赋值语句去掉
  FSMC_SRAM_ReadBuffer(c,1000,6);
  LCD_ShowxNum(60,200,c[0],6,16,0);
  LCD_ShowxNum(60,220,c[1],6,16,0);
  LCD_ShowxNum(60,240,c[2],6,16,0);
  LCD_ShowxNum(60,260,c[3],6,16,0);
  LCD_ShowxNum(60,280,c[4],6,16,0);    
  LCD_ShowxNum(60,300,c[5],6,16,0);


还有一点不明白,在初始化中 :

FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16位  

按照你咋tft显示实验中的说法,当Bank1接的是16位宽宽度的存储器时:HAADR[25-1]对应FSMC[24-0],如果是一个字节一个字节的写外部SARM,比如说写SRAM的地址0和地址1的时候FSMC-A0电平应该是不会变化的,写到地址2的是FSMC-A0的电平才会变化,也就是说写地址0和1的时候FSMC-A地址线的电平时相同的,这时候外部SRAM只能通过UB和LB电平来区别是地址0还是1?原子哥,我这么理解对面,我去试验下。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-4 12:28:13 | 显示全部楼层
第二个问题我测试了,死循环对奇数地址赋值和偶数地址赋值,发现A0电平还是跳变,只不过奇时只有UB有电平变化、偶时只有LB有电平变化。和我的猜想有点不同。。。另外我循环赋值的时候D0 D1数据线上也没有电平跳变呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-4 22:19:11 | 显示全部楼层
正常的,随机数据。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-5 10:55:49 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子哥回答,那是不是sram只有在写入数据以后它的值才不会变化呢?因为写入以后不断电情况下,读出来数据是固定的。麻烦原子哥帮我看下上面第二个FSMC-A0电平变化的问题,我的想法是不是正确的,谢谢!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-5 23:53:14 | 显示全部楼层
回复【4楼】善良的二哥:
---------------------------------
你读了哪些地址?
你读0,1,2,3,4,5,这几个地址,循环读,看A0变化不?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-8 09:58:21 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子哥,我循环的读0,1,23,4,5,发现A0和A1变化周期是一样的,按理说A1的变化周期约为A0的两倍吧。为什么会一样呢。
由于是16位宽存储器,A0应该是没间隔一个地址变化一次吧,但是我分别循环读0,2,4,6,8和1,3,5,7,9时,A0都是有波形变化的,且周期相同,这是为何?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-8 23:13:45 | 显示全部楼层
0=000
1=001
2=010
3=011
4=100
5=101

 A2,A1,A0的变化规律,就是上面这样了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-9 09:29:01 | 显示全部楼层
回复【7楼】正点原子:
---------------------------
谢谢原子哥回答:
这边接的是16位,HADDR[25:1]对应FSMC[24-0],FSMC_A0对应着HADDR[1],那么HADDR的值变化2,FSMC_A0才变化一次吧,也就是:
1=000,此时LB控制
2=000,此时UB控制
3=001,此时LB控制
4=001,此时UB控制
5=010,此时LB控制
是这样吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-9 23:28:15 | 显示全部楼层
回复【8楼】善良的二哥:
---------------------------------
SRAM就是16位的,你以16位访问,每一个地址变化,都会引起地址线的变化。

UB,LB,是高字节有效和低字节有效控制信号。
如果读16位数据,且是偶数地址,那么UB,LB都会输出低电平。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-9 23:28:27 | 显示全部楼层
林外楼主用示波器看看波形,就明白了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-10 10:02:39 | 显示全部楼层

回复【9楼】 正点原子 :
---------------------------------
谢谢原子哥的耐心回答!下面这段是摘自你的库函数版本实验:

这边读写函数都是以一个字节(8位)来操作的:

void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n)
{
 for(;n!=0;n--) 
 {              
  *pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);   
  ReadAddr+=1;
 } 
}

这边的ReadAddr自加1不会引起地址线的变化吧?

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-11 00:42:13 | 显示全部楼层
回复【11楼】善良的二哥:
---------------------------------
加多1次就会了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-11 09:15:06 | 显示全部楼层
回复【12楼】正点原子:
----------------------------
好的,谢谢原子哥耐心解答!么么哒。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 14:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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