OpenEdv-开源电子网

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

spi nor flash问题

[复制链接]

31

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
699
金钱
699
注册时间
2014-9-19
在线时间
193 小时
发表于 2019-3-7 17:04:38 | 显示全部楼层 |阅读模式
1金钱
w25q128 一共是16M字,分成256个block,每个块是64k,每个块又分为
16 个扇区(Sector),每个扇区 4K 个字节 。 这个没问题。

官方的测试程序为,写字符串到flash里面, 在读出来。测试ok。
有一个问题不太懂。
W25QXX_Write((u8*)TEXT_Buffer,FLASH_SIZE-100,SIZE);

W25QXX_Read(datatemp,FLASH_SIZE-100,SIZE);       


这上面的FLASH_SIZE=128*1024*1024;    这个地方不太懂了,为什么不是16*1024*1024那。
假设        FLASH_SIZE=128*1024*1024 这个是对的。 那么如果 我在  1 到FLASH_SIZE 地址上全部写固定的u8,那么这个不就是128M字节的了吗?


最佳答案

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

例程是写错了,应该是16*1024*1024, 越界能使用,是因为你写入的地址,高位被抛弃,低位还是可以写入的,所以无论给一个什么地址,都可以读写,而且都正确,只是写入的地址,并非你认为的地址
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-3-7 17:04:39 | 显示全部楼层
例程是写错了,应该是16*1024*1024, 越界能使用,是因为你写入的地址,高位被抛弃,低位还是可以写入的,所以无论给一个什么地址,都可以读写,而且都正确,只是写入的地址,并非你认为的地址
回复

使用道具 举报

31

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
699
金钱
699
注册时间
2014-9-19
在线时间
193 小时
 楼主| 发表于 2019-3-7 17:05:09 | 显示全部楼层
上面打错了,16m字节。
回复

使用道具 举报

31

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
699
金钱
699
注册时间
2014-9-19
在线时间
193 小时
 楼主| 发表于 2019-3-7 17:21:19 | 显示全部楼层
我把flash的地址改成        FLASH_SIZE=128*1024*1024*1024;       
运行依然正确读到,crazy world!!!1
回复

使用道具 举报

31

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
699
金钱
699
注册时间
2014-9-19
在线时间
193 小时
 楼主| 发表于 2019-3-8 08:56:14 | 显示全部楼层
正点原子 发表于 2019-3-7 17:04
例程是写错了,应该是16*1024*1024, 越界能使用,是因为你写入的地址,高位被抛弃,低位还是可以写入的, ...

是的, 昨天回去的时候想起来了。
回复

使用道具 举报

31

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
699
金钱
699
注册时间
2014-9-19
在线时间
193 小时
 楼主| 发表于 2019-3-8 09:03:46 | 显示全部楼层
看了一下, 变量是u32 的, W25QXX_Write和W25QXX_Read 里面的地址也是u32 的啊。
回复

使用道具 举报

31

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
699
金钱
699
注册时间
2014-9-19
在线时间
193 小时
 楼主| 发表于 2019-3-8 09:42:35 | 显示全部楼层
正点原子 发表于 2019-3-7 17:04
例程是写错了,应该是16*1024*1024, 越界能使用,是因为你写入的地址,高位被抛弃,低位还是可以写入的, ...

调试了一下。 首先变量是u32 位的没问题, 但是打印是0。 修改了变量的名字变成小写,那么可以了, 但是实际的地址已经超出spi的地址范围了。应该是 SPI2_ReadWriteByte(W25X_Rea
    SPI2_ReadWriteByte((u8)((ReadAddr)>>16));  
    SPI2_ReadWriteByte((u8)((ReadAddr)>>8));   
    SPI2_ReadWriteByte((u8)ReadAddr);   
这个地方的问题, 高位的超出的已经被忽视了。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-5-18
在线时间
0 小时
发表于 2020-5-18 10:22:36 | 显示全部楼层
你好 问一下,你的审批norflash是在哪个例程里的代码?最近正在做
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 09:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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