W25Q64跨页操作

原:读W25Q64数据就可以跨页读 

void W25Q64_ReadData(uint32_t Address, uint8_t *DataArray, uint32_t Count)
{
    MySPI_Start();
    MySPI_SwapByte(0x03);
    MySPI_SwapByte(Address>>16);
    MySPI_SwapByte(Address>>8);
    MySPI_SwapByte(Address);
    for(uint64_t i =0;i<Count;i++)
    {
        DataArray[i] = MySPI_SwapByte(0x00);
    }
    MySPI_Stop(); 
}

原:W25Q64页编程只能写一页,超过该页尾的内容会在该页头上继续写,一次不能超过256个字节

void W25Q64_PageProgram(uint32_t Address, uint8_t *DataArray, uint32_t Count)
{
    W25Q64_WriteEnable();	
    MySPI_Start();								
	MySPI_SwapByte(0x02);
    MySPI_SwapByte(Address>>16);
    MySPI_SwapByte(Address>>8);
    MySPI_SwapByte(Address);
    for(uint16_t i=0;i<Count;i++)
    {
        MySPI_SwapByte(DataArray[i]);
    }
    MySPI_Stop(); 
   
    W25Q64_WaitBusy();
}

改:在原页编程的基础上判断是否需要跨页写,需要跨页写就通过不断写完一页就加地址(地址偏移)和数据偏移续上页编程(不断地从新的地址进行原页编程)实现多字节跨页写的功能

void W25Q64_xPageProgram(uint32_t address,uint8_t* DataArray,uint16_t Count)
{
    uint16_t remain;
    uint8_t span = (address%256)+Count -256;//是否跨页
    
    if(span>1)//跨页
    {   
        while(Count>0)//通过剩下要写的字节数判断是否继续循环
        {
            remain = 256 - (address%256);//当前地址在当页可以写入的字节数
            if(Count>=remain)//写一页或刚好写完一页结束页编程
            {
                
                W25Q64_PageProgram(address,DataArray,remain);             
                address = address + remain; //新页头的地址
                DataArray = DataArray + remain;       //数组索引偏移
                Count = Count - remain;     //剩下要写的字节数
            }
            else //最后的
            {
                W25Q64_PageProgram(address,DataArray,Count);
                Count = Count-Count;//结束页编程
            }
            
        }
    
    }
    else //不需要跨页
    {
        W25Q64_PageProgram(address,DataArray,Count);//原页编程
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值