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
2019-08-17 00:34
手册里应该都可以找到答案的!可能你看的不够仔细吧。
第三个问题,如果delay的时候进入了中断函数,说明数据正在接收,if条件当然就不成立。if判断条件就是保证485接收数据完整。
如果不完整,要等中断接收完整之后再进if执行操作。相信RS485_Receive_Data()这个函数也是放在一个while()循环内的。

一周热门 更多>