1. 程式人生 > >SD卡SPI模式下FatFs與znFat檔案系統速度比較

SD卡SPI模式下FatFs與znFat檔案系統速度比較

前段時間在SD卡上移植了FatFs檔案系統,昨晚在QQ群中看到znFat,於是有了想測試一下兩個檔案系統的速度差異的想法。
znFat移植很簡單,就是在deviceio.c中寫入相應的函式即可,然後配置config.h中的巨集。今天在振南的協助下把速度配置到全速模式下。
 
硬體平臺:LPC1768使用SSP0,SSP0時鐘50MHz
測試檔案wmv視訊檔案,大小:7375.689 KB(7552706 Bytes)            
 
每次讀寫以4KByte操作,操作流程如下  :                  
1、開啟原始檔和目標檔案                                     
2、讀原始檔內容,讀取4K位元組                                   
3、寫檔案,將4K位元組寫入目標檔案(在測試讀取速度時遮蔽寫操作)          
4、重複步驟2-3,直到原始檔讀取完成                        
其中寫入速度是根據拷貝時間和讀取時間來計算出寫入時間而得到的。    
測試結果如下:


FatFs拷貝程式碼如下:

for (;;)
	{
		//res = f_read(&fSrc,buff,sizeof buff,&br);
		res = f_read(&fSrc,buff,COPY_LEN,&br);
		if (res || br == 0)
		{
			if(fileSrcPos < fileLen)
			Debug_Printf("拷貝檔案時讀取時出錯:res=0x%02X,bw = %d,fileSrcPos = %d \r\n",res,bw,fileSrcPos);
			break;
		}
		res = f_write(&fDst,buff,br,&bw);
		if (res || bw < br)
		{
			Debug_Printf("拷貝檔案時寫入時出錯:res=0x%02X,bw = %d,fileSrcPos = %d \r\n",res,bw,fileSrcPos);
			bw = 0;
			Debug_Printf("讀取到%d位元組的內容如下:\r\n",br);
			while (br--)
			{
				Debug_Printf("%02X ",buff[bw]);
				bw++;
			}
			Debug_Printf("\r\n");
			break;
		}
		fileSrcPos += br;
	} 

znFat拷貝程式碼如下:

 while(len=znFAT_ReadData(&fileinfo1,fileinfo1.File_CurOffset,COPY_LEN,buff)) //從當前偏移位置讀取資料
		 {
			znFAT_WriteData(&fileinfo2,len,buff); //將讀到的資料寫入到znmcu2.txt檔案中
			//printf("%c",'.');
		}