OpenEdv-开源电子网

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

stm32f103vCt6 w25q64 FLASH SPI连续读写最多 只能读 1024个字节

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-18
在线时间
2 小时
发表于 2015-7-23 19:04:45 | 显示全部楼层 |阅读模式
5金钱
先将格式化 两个扇区 然后用 spi1 连续读 取扇区数据,当 个数 小于 1024时 全是 0xff  
  

当 读1025个字节时 读出来全是0;
读两次第一次读 1024个 第二次读 10个 中间间隔1ms 第一次的 全是0xff  第二次读的全是0;有高手知道 是什么原因吗?

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

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-23 19:52:58 | 显示全部楼层
你的flsah里边有没数据?没放数据就是FF,否则不是,还是好好看下flsah特性吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2015-7-23
在线时间
0 小时
发表于 2015-7-23 20:19:22 | 显示全部楼层
顶,帮忙看看 
<script>void(0)<script>
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-23 22:13:05 | 显示全部楼层
格式化以后,说明你要以文件系统的形式访问了,直接读取数据,意义不大,除非了解FAT底层规定。否则看不出太多东西。
建议你要测试,可以直接写一个具体的数据到指定地址,然后读出来,验证下就好了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-18
在线时间
2 小时
 楼主| 发表于 2015-7-24 09:33:06 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
理论上 格式化 后 正常读出来是 应该是 0xff 但是当使用  SPI_Flash_Read(buf,addr,len);读取长度 len=1025或更大时 buf 里的数据 全是 0;
len 赋值1024 时读出来全是 )0xff (这个应该是正确的)  ,战舰开发板我试过了 不存在这个问题 不知 到是不是 内存太小的原因 
我编译出来的 信息是 rogram Size: Code=31688 RO-data=2604 RW-data=124 ZI-data=10820  
堆栈设置 使用的是自带的默认大小 
Stack_Size      EQU     0x00000400
Heap_Size       EQU     0x00000200

测试代码 语句 如下
SPI_Flash_Erase_Sector(addr/4096);
SPI_Flash_Erase_Sector(addr/4096+1);

  SPI_Flash_Read(buf,addr,len);//buf 定义长度为 4096
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-18
在线时间
2 小时
 楼主| 发表于 2015-7-24 11:25:43 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
问题 发现了,以前发现flash读写个数 为 0xffff 时 片子会死机 所以将读写大小 最大设为 1024个 但是 对 堆栈的使用的还是不太明白 看了原哥的http://www.openedv.com/posts/list/24152.htm 讲述 有几个问题 
1.既然  Stack_Size      EQU     0x00000400   Heap_Size       EQU     0x00000200 分配了 栈大小,怎么 上篇帖子中 还说 堆栈没有一个固定的界限
2. 全局变量 个数的多少 和  堆栈 分配 有关系吗?
3.原子哥曰 ” 堆区,则从内存区域的起始地址,开始分配给各个全局变量和静态变量“  既然 堆区 设定大小 是 0x00000200  那是不是 意为着 全局变量的 字节数 是不是不能超过 0x00000200 个?
3.  对于栈区,一般栈顶,也就是MSP,在程序刚运行的时候, MSP指向程序所占用内存的最高地址:0X2000 0940.  

原子哥 说的  ”堆区,则从内存区域的起始地址,开始分配给各个全局变量和静态变量. 与栈区不同,堆区,则从内存区域的起始地址,开始分配给各个全局变量和静态变量.
堆的生长方向,都是向上的.在程序里面,所有的内存分为:堆+栈. 只是他们各自的起始地址和增长方向不同,他们没有一个固定的界限,所以一旦堆栈冲突,系统就到了崩溃的时候了“ 那 stm32 内存的 起始 地址 为0x2000 0000 堆 由此地址 向上增长,栈 由 MSP即0X2000 0940 向下增长 ,中间 就 只有 0x940    不是 内存大小 都有 好几十K的吗 , 栈顶 设的 大一些 向下生长的话 不就 不会 与 堆 起冲突了吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-25 11:35:56 | 显示全部楼层
回复【5楼】kpzh2006:
---------------------------------
非也,格式化并不会对SPI FLASH执行全片擦除操作。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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