打印
[ZLG-ARM]

IAP:擦除一扇区后,分几次在不同页写数据可以实现吗??

[复制链接]
1979|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jstu023123|  楼主 | 2007-9-19 13:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在flash中写数据时,考虑到跨页问题,分数次写人数据到FLASH中,而缓冲区不可太大,取512字节长度,正好一页,我刚试过了,好象不行!!程序如下:
buffer:数据源地址指针
flashaddr:数据目标相对地址,位于第16扇区,范围0~8K-1
length:待写入字节长度
UINT8 WriteToMemory(UINT8 *buffer, UINT16 flashaddr, UINT16 length)
{
    UINT16 writesize;  
    BlankCheck( Sector_16, Sector_16 );        //  查空
    if( paramout[0] == SECTOR_NOT_BLANK)        //  非空擦除
    {
        SelSector( Sector_16,Sector_16 );
        EraseSector( Sector_16,Sector_16 );      //  擦除第16个扇区
     }
  
    while( (flashaddr+length)>(flashaddr|0x1ff) )  //跨页
    {               
        writesize = 512-flashaddr&0x1ff;
        
        WriteToPage(buffer, flashaddr, writesize);  //写一页
        
        flashaddr += writesize;
        buffer +=writesize;
        length -=writesize;
     }   
    WriteToPage(buffer, flashaddr, length);
    return paramout[0];
}

相关帖子

沙发
Ice_River| | 2007-9-19 14:31 | 只看该作者

什么CPU 分页?

使用特权

评论回复
板凳
jstu023123|  楼主 | 2007-9-19 15:09 | 只看该作者

回Ice_River

呵呵,片内256KFLASH,RamToFlash时写入字节为512*i!!习惯性错误!!我现在先写入一些数据,再在其他地址上写入数据,可以的吧?!

使用特权

评论回复
地板
realrots| | 2007-9-23 09:33 | 只看该作者

应该是可以的

writesize = 512-flashaddr&0x1ff;?我觉得应该是先写整页,不到一页的放到最后吧,不过最好补足一页

使用特权

评论回复
5
gql1123| | 2007-9-26 10:12 | 只看该作者

哈哈

每写一页加上 
 SelSector( Sector_16,Sector_16 );
就可以了。不加的话不行。我试过了,你试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

粉丝