论坛元老
 
- 积分
- 4769
- 金钱
- 4769
- 注册时间
- 2020-3-19
- 在线时间
- 352 小时
|
发表于 2020-9-9 21:21:14
|
显示全部楼层
"W25Q128芯片一次能读取多少数据"?
答: 一次只能读取一个字节. 即: SPI1_ReadWriteByte(0xFF) 返回一个字节.
如果说: 调用一次 W25QXX_Read() 函数, 能读取多少数据?
答: NumByteToRead多个字节数据. 其实质是循环了NumByteToRead次读取W25Q128芯片的数据.
由于这个函数(原子哥所写的函数)入口参数 NumByteToRead 定义是u16, 无符号整型数据, 其取值范围是0-65535,那么一次调用这个函数最多只能读取65535字节, 注意: 是"字节"(Byte) 不是"位"(Bit).
那么是否可以说, 调用一次读取函数最多只能读取65535个字节呢? 不是这样等同的, 这要看这个函数怎么写了. 如果入口参数NumByteToRead 是u32型的, 那么就可突破这个限值了.
那么是否读取芯片数据是没有限制的呢? 也不是的.
根据正点原子相关开发指南的描述: "支持以任意地址(但是不能超过W25Q128的地址范围)开始读取数据."
我的理解是: 调用一次函数读取的字节数与芯片的地址(其实质是与芯片存储容量)有关, 而与扇区或块的大小无关.
由此可见, 编写函数时, 再怎么优化改变, 调用一次函数最多只能读取(存储芯片的最高地址-入口起始地址)个字节数据.
再回到楼主的文字描述看:
"从结果来看有两种可能" --- 什么样的实验"结果"?
"1.u16最高是65535位" --- 不是"位"而是"字节" , 这个不实验也能看出来.
"2.一次只能读一块区域" --- 好像没有这个说法吧?
如果将上述源程序中函数的入口参数 u16 NumByteToRead 改写成 u32 NumByteToRead
将函数实现中的局部变量 u16 i; 改成 u32 i;
再试试看调用一次读取函数是否能突破64K(65535字节)的限制, 难道W25Q128芯片会拒绝执行吗?
(由于此类Flash存储器只能将存储位值"1"擦除成"0",而不能将"0"改写成"1",而且擦除要以扇区进行, 因此"写入"操作既与地址有关, 也与扇区大小有关,可见"写入"要比"读取"复杂些, 因不在本话题之列, 恕不展开了. )
以上属于个人理解, 一孔之见, 不知对否, 仅供参考.
|
|