spi nor flash问题

2019-07-21 04:38发布

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字节的了吗?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-21 06:10
例程是写错了,应该是16*1024*1024, 越界能使用,是因为你写入的地址,高位被抛弃,低位还是可以写入的,所以无论给一个什么地址,都可以读写,而且都正确,只是写入的地址,并非你认为的地址
aaaaalaode
2楼-- · 2019-07-21 07:13
上面打错了,16m字节。
aaaaalaode
3楼-- · 2019-07-21 11:15
我把flash的地址改成        FLASH_SIZE=128*1024*1024*1024;       
运行依然正确读到,crazy world!!!1
aaaaalaode
4楼-- · 2019-07-21 12:14
 精彩回答 2  元偷偷看……
aaaaalaode
5楼-- · 2019-07-21 12:50
看了一下, 变量是u32 的, W25QXX_Write和W25QXX_Read 里面的地址也是u32 的啊。
aaaaalaode
6楼-- · 2019-07-21 14:08
正点原子 发表于 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);   
这个地方的问题, 高位的超出的已经被忽视了。

一周热门 更多>