OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7741|回复: 1

急求原子哥帮忙谢谢

[复制链接]

33

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2012-9-10
在线时间
31 小时
发表于 2012-10-6 17:43:16 | 显示全部楼层 |阅读模式

下面是我的理解与疑问

 

SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区

功能为将要写入的数据写入已经擦除好的扇区0

首先定义了

SPI_Flash_Write((u8*)TEXT_Buffer_SPI,1000,SIZE);

secpos=WriteAddr/4096;    

其中WriteAddr1000,那secpos=0对吧???

 

然后调用SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096)函数为

 

void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)  

{                                  这里的WriteAddr就应该等于0了吧???

     u16 pageremain;                                                     

     pageremain=(256-WriteAddr%256); //单页剩余的字节数 每页有256个字节      

                         由上面WriteAddr=0应该可以算pageremain=0吧???     

     if(NumByteToWrite<=pageremain)

                                        pageremain=NumByteToWrite;//不大于256个字节

     while(1)

     {                                                           

            SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain);    //往一页中写入数据 最大为256字节    接着调用这个函数SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain)

                                                      //单页剩余的字节数 pageremain=0

            if(NumByteToWrite==pageremain)break;//写完了1页数据(256字节)

 

           else //NumByteToWrite>pageremain     //写的数据长度大于1(256字节)

            {

                   pBuffer+=pageremain;                 //pageremain=24

                   WriteAddr+=pageremain;     

 

                   NumByteToWrite-=pageremain;                    //减去已经写入了的字节数

                   if(NumByteToWrite>256)pageremain=256; //一次可以写入256个字节

                   else pageremain=NumByteToWrite;       //不够256个字节了

            }

     }        

}

 

接着调用这个函数SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain)

                                                   此时WriteAddr=0pageremain=0吧?

void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)

{                                        此时WriteAddr=0NumByteToWrite =0吧?

                                                                            

      u16 i;           //W25X168192可编程页,每页256个字节

    SPI_FLASH_Write_Enable();                  //写使能

     SPI_FLASH_CS=0;                            //使能器件  

    SPIx_ReadWriteByte(W25X_PageProgram);      //发送写页命令  

    SPIx_ReadWriteByte((u8)((WriteAddr)>>16));    

    SPIx_ReadWriteByte((u8)((WriteAddr)>>8));  

    SPIx_ReadWriteByte((u8)WriteAddr);        //发送24bit地址

    for(i=0;i<NumByteToWrite;i++) //NumByteToWrite=0

                                 SPIx_ReadWriteByte(pBuffer);//循环写入自己写入的数据         刚好写入一页的数据       

     SPI_FLASH_CS=1;                            //取消片选

     SPI_Flash_Wait_Busy();                                      //等待写入结束

}

由上面分析NumByteToWrite =0吧?  那怎么执行

for(i=0;i<NumByteToWrite;i++) //NumByteToWrite=0

                                 SPIx_ReadWriteByte(pBuffer)

这条语句呢?????怎么将数据写入呢???

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-6 19:42:40 | 显示全部楼层
回复【楼主位】liujie14565:
---------------------------------
那如果写地址不是1000呢?
难道你又重新写一个函数?

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 06:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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