W25Q128 中页的概念

2019-08-16 23:24发布

本帖最后由 zcc_super 于 2017-2-17 19:42 编辑

问题1:
在操作 W25Q128 中写页实验,这个页的概念到底是什么, 下面的注视中写到,SPI在一页(0~65535),这个0~65535是一页,那不是意味着一页就是一个block吗?
然后在一页中写入少于256个字节,我看了芯片的数据手册的数序图,是只能写入了256个字节?如果是sector的话不是也应该有4096个字节的吗,为什么只能写个256个字节?(我记得好像视频里说 页就是sector的样子)
总而言之,对于这个页的概念真的不是很清楚,请搞懂的大神们解释一下。(个人理解是只能从一次性一个地址到一个地址写入256个字节,之后就要从下个地址重新再来写256个字节,但是这样的话地址怎么划分呢?一个sector有16页吗?)

//SPI在一页(0~65535)内写入少于256个字节的数据
//在指定地址开始写入最大256字节的数据
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大256),该数不应该超过该页的剩余字节数!!!         
void W25QXX_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{

}

问题2:
sector的地址到底是怎么确定的,是每一个sector都有编号吗,总共4096个sector,然后1就是第一个sector,是这样吗?
然后 写入芯片的地址时序图里面显示的是24bit,扇区的标号*4096 就是相应的24bit地址了吗?不是很理解。
再然后,我觉得block这个概念没什么用处是吗?当某个block的sector写满后自动跳转到下一个block的sector里,不需要什么特殊的处理,就是和正常的跨sector是一样的吧。 还望指正。




问题3:  还有一个问题,也就不开帖了,先发上来,看有人回没
  //RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void RS485_Receive_Data(u8 *buf,u8 *len)
{
        u8 rxlen=RS485_RX_CNT;
        u8 i=0;
        *len=0;                                //默认为0
        delay_ms(10);                //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
        if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
        {
                for(i=0;i<rxlen;i++)
                {
                        buf=RS485_RX_BUF;        
                }               
                *len=RS485_RX_CNT;        //记录本次数据长度
                RS485_RX_CNT=0;                //清零
        }
}

  针对这个函数  这一句  delay_ms(10);                //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
  这个放到开头是不是会好一点,否则就算在这个时候进入了中断服务函数里,那接受完成后 后面的if条件不就不成立了吗,很奇怪,为什么这里会有一个延时,对于这个if判断条件也不是很懂。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
lvkanger
1楼-- · 2019-08-17 00:34
手册里应该都可以找到答案的!可能你看的不够仔细吧。
第三个问题,如果delay的时候进入了中断函数,说明数据正在接收,if条件当然就不成立。if判断条件就是保证485接收数据完整。
如果不完整,要等中断接收完整之后再进if执行操作。相信RS485_Receive_Data()这个函数也是放在一个while()循环内的。
mon51
2楼-- · 2019-08-17 03:11
一个扇区是4K,分成16个页。一次最大只能写入256个字节。等待写完,再写下一个页。。。。
zcc_super
3楼-- · 2019-08-17 05:56
 精彩回答 2  元偷偷看……
zcc_super
4楼-- · 2019-08-17 11:30
lvkanger 发表于 2017-2-18 09:20
手册里应该都可以找到答案的!可能你看的不够仔细吧。
第三个问题,如果delay的时候进入了中断函数,说明 ...

  这个函数是一直在while(1)的,不停的扫描,if是保证了数据的完整,可是不加这个delay这个数据就不完整了吗。
  中断函数里的处理是接受了一个数据,并且将RS485_RX_CNT标志位加一。
  所以还是觉得这个delay有点莫名其妙的感觉。
lvkanger
5楼-- · 2019-08-17 13:05
zcc_super 发表于 2017-2-18 19:12
这个函数是一直在while(1)的,不停的扫描,if是保证了数据的完整,可是不加这个delay这个数据就不完 ...

在这里加延时应该就是想让延时的这段时间把数据接收完,然后判断一次就OK了,否则如果接收不完全,程序就又会到while()跑一圈
zcc_super
6楼-- · 2019-08-17 14:36
mon51 发表于 2017-2-18 14:04
一个扇区是4K,分成16个页。一次最大只能写入256个字节。等待写完,再写下一个页。。。。

  那第二个问题呢,能回答一下吗?
  我的理解是写入地址,这个地址可以是  0~128/8*1024*1024中的任意一个数, 然后对该数/4096就确定了相应的扇区,总共是有4096个扇区,然后在W25QXX_Erase_Sector函数中,将传入的参数*4096就确定相应的扇区起始地址,这个4096个扇区是人为定义的,而在程序中只是识别相应的24位地址。所以block没啥意义,只是人为定义的,是这样吗?请指教。

一周热门 更多>