野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27245|回复: 6

SPI Flash 分页问题

[复制链接]
发表于 2014-4-9 17:56:03 | 显示全部楼层 |阅读模式
这段话的具体到哪一步功能不是很清楚。只知道是分页功能。
void SPI_FLASH_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)
{
  u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;

  Addr = WriteAddr % SPI_FLASH_PageSize;
  count = SPI_FLASH_PageSize - Addr;
  NumOfPage =  NumByteToWrite / SPI_FLASH_PageSize;
  NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;

  if (Addr == 0) /* WriteAddr is SPI_FLASH_PageSize aligned  */
  {
    if (NumOfPage == 0) /* NumByteToWrite < SPI_FLASH_PageSize */
    {
      SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
    }
    else /* NumByteToWrite > SPI_FLASH_PageSize */
    {
      while (NumOfPage--)
      {
        SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
        WriteAddr +=  SPI_FLASH_PageSize;
        pBuffer += SPI_FLASH_PageSize;
      }

      SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
    }
  }
  else /* WriteAddr is not SPI_FLASH_PageSize aligned  */
  {
    if (NumOfPage == 0) /* NumByteToWrite < SPI_FLASH_PageSize */
    {
      if (NumOfSingle > count) /* (NumByteToWrite + WriteAddr) > SPI_FLASH_PageSize */
      {
        temp = NumOfSingle - count;

        SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
        WriteAddr +=  count;
        pBuffer += count;

        SPI_FLASH_PageWrite(pBuffer, WriteAddr, temp);
      }
      else
      {
        SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);
      }
    }
    else /* NumByteToWrite > SPI_FLASH_PageSize */
    {
      NumByteToWrite -= count;
      NumOfPage =  NumByteToWrite / SPI_FLASH_PageSize;
      NumOfSingle = NumByteToWrite % SPI_FLASH_PageSize;

      SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);
      WriteAddr +=  count;
      pBuffer += count;

      while (NumOfPage--)
      {
        SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PageSize);
        WriteAddr +=  SPI_FLASH_PageSize;
        pBuffer += SPI_FLASH_PageSize;
      }

      if (NumOfSingle != 0)
      {
        SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);
      }
    }
  }
}

==========
by 山外メ雲ジ:标题请符合内容规范,这类无意义标题不利于他人寻找资料,谢谢合作


回复

使用道具 举报

发表于 2014-4-9 17:57:20 | 显示全部楼层
就是根据每页数据的多少,计算要写入的数据应该存储在哪一页的哪一个位置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-10 11:33:23 | 显示全部楼层
房宜楠 发表于 2014-4-9 17:57
就是根据每页数据的多少,计算要写入的数据应该存储在哪一页的哪一个位置


这里的一页指的是什么?
u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0这几个变量分别是做什么的?
回复 支持 反对

使用道具 举报

发表于 2014-4-10 11:35:19 | 显示全部楼层
shao1523 发表于 2014-4-10 11:33
这里的一页指的是什么?
u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0这几个变 ...

程序里的一页的大小用宏SPI_FLASH_PageSize定义好了。EEPROM的存储空间是按页来存储的,每种型号的EEPROM都有自己的页大小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-10 13:23:52 | 显示全部楼层
红舒扬 发表于 2014-4-10 11:35
程序里的一页的大小用宏SPI_FLASH_PageSize定义好了。EEPROM的存储空间是按页来存储的,每种型号的EEPROM ...

那这几个变量呢?
回复 支持 反对

使用道具 举报

发表于 2014-4-10 15:01:42 | 显示全部楼层
shao1523 发表于 2014-4-10 11:33
这里的一页指的是什么?
u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0这几个变 ...

1.NumOfPage 写入数据量占的整数页数量
2.NumOfSingle 写入数据写入整数页后剩余不满一页的数据量
3.Addr 检查写入地址是否页对齐
4.count 如果不是页对齐,则写入位置在开始页的偏移地址
5.temp 不满一页的数量减云本页的偏移地址.以先写满本页

语言表达有点麻烦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-11 16:46:27 | 显示全部楼层
刀_口 发表于 2014-4-10 15:01
1.NumOfPage 写入数据量占的整数页数量
2.NumOfSingle 写入数据写入整数页后剩余不满一页的数据量
3.Ad ...

强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-1 17:29 , Processed in 0.032936 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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