存储器分页

本文深入解析了SPI FLASH 缓冲区写入函数的实现原理及使用方法,包括页面写入逻辑、地址计算和数据块处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void SPI_FLASH_BufferWrite(u8 *pBuffer, u32 WriteAddress, u16 NumberByteToWrite){
	u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;
	
	Addr = WriteAddress % SPI_Page_Size;	//
	count = SPI_Page_Size - WriteAddress;	//
	NumOfPage = NumberByteToWrite / SPI_Page_Size;	//
	NumOfSingle = NumberByteToWrite % SPI_Page_Size;	//	
	if( Addr == 0 ){ //ÕýºÃÊÇÒ³µÄ±¶Êý
		 if(NumOfPage == 0){ 	
			SPI_FLASH_PageWrite(pBuffer, WriteAddress, NumberByteToWrite);	
		}else{	
			while(NumOfPage --){
			SPI_FLASH_PageWrite(pBuffer, WriteAddress, NumberByteToWrite); 									WriteAddress += SPI_Page_Size;
			pBuffer += SPI_Page_Size;
			}
			SPI_FLASH_PageWrite(pBuffer, WriteAddress, NumOfSingle			}
	}else{
 		if(NumOfPage == 0 ){ 
			if(NumOfSingle > count){	
				temp = NumOfSingle - count;
				SPI_FLASH_PageWrite(pBuffer, WriteAddress, count); 
				WriteAddress += count;
				pBuffer += count;
				SPI_FLASH_PageWrite(pBuffer, WriteAddress, temp); 
			}else{
				SPI_FLASH_PageWrite(pBuffer, WriteAddress, NumberByteToWrite); 
			}
		}else{	
			NumberByteToWrite -= count; 
			NumOfPage = NumberByteToWrite / SPI_Page_Size;
			NumOfSingle = NumberByteToWrite % SPI_Page_Size;
			
			SPI_FLASH_PageWrite(pBuffer, WriteAddress, count);
			WriteAddress += count;
			pBuffer += count;
			
			while(NumOfPage -- ){
				SPI_FLASH_PageWrite(pBuffer, WriteAddress, SPI_Page_Size);
				WriteAddress += SPI_Page_Size;
				pBuffer += SPI_Page_Size;
			}
			if(NumOfSingle !=0){
				SPI_FLASH_PageWrite(pBuffer, WriteAddress, NumOfSingle); 
			}
		}	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值