OpenEdv-开源电子网

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

W25X16原子哥 求帮忙啊

[复制链接]

33

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2012-9-10
在线时间
31 小时
发表于 2012-10-6 17:16:25 | 显示全部楼层 |阅读模式
在SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区(擦除后的) 

从secpos=WriteAddr/4096;应该可以知道 secpos =0,所以secpos*4096=0;

然后调用void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
{
u16 pageremain;     //WriteAddr=0
pageremain=(256-WriteAddr%256); //单页剩余的字节数 每页有256个字节    
if(NumByteToWrite<=pageremain) //计算后的值pageremain=0
pageremain=NumByteToWrite;//不大于256个字节
while(1)
{         
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); //往一页中写入数据 最大为256字节
//单页剩余的字节数 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个字节了
}
}   //; 
}  

由secpos=WriteAddr/4096;应该可以知道 secpos =0,所以secpos*4096=0; pageremain=(256-WriteAddr%256)应该等于0吧 ;

SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); 然后再调用这个

void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{     /*SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain)*/
  //pageremain=0
  //WriteAddr=0
  //pBuffer=SPI_FLASH_BUF[4096] 保存将要发送的数据
  u16 i;   //W25X16有8192可编程页,每页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();   //等待写入结束
}  
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); 由这可以得知  pageremain =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:40:43 | 显示全部楼层
说明你的假设不成立。
不解的话,仿真一下就知道了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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