fatfs-SDIO的寫檔案時間耗費在哪裡了?
分析的是這個驅動,也是網上流傳比較多的,如下:
* @file fatfs_drv.c * @author MCD Application Team * @version V1.1.0 * @date 31-July-2013 * @brief diskio interface
-------------
網上安富萊的例子用的是V1.1.2的驅動,也不知道比V1.1.0的驅動先進在哪裡。
今天就分析V1.1.0的。
寫函式當然就是
這個函式disk_write,
就分析這個disk_write的裡面的扇區對齊且寫檔案是扇區的整數倍的時候的情形。
假設扇區512,通過f_write函式寫入1024*5個位元組。
#define _MAX_SS 512 /* 512, 1024, 2048 or 4096 */ /* Maximum sector size to be handled. / Always set 512 for memory card and hard disk but a larger value may be / required for on-board flash memory, floppy disk and optical disk. / When _MAX_SS is larger than 512, it configures FatFs to variable sector size / and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
disk_write裡面
有如下的內容:
(1)SD_WriteMultiBlocks((BYTE *)buff, (uint32_t )(sector * BLOCK_SIZE), BLOCK_SIZE, count);//耗費時間tx_1
(2)sdstatus = SD_WaitWriteOperation(); //耗費時間ty_1
(3)while(SD_GetStatus() != SD_TRANSFER_OK) //耗費時間tz_1
看下時間,抓個圖:如下:
可見tx_1時間很固定,大概1個ms,tz_1時間多的有15ms,大部分10ms左右。ty_1的時間偶爾比較長,值是490ms。
10ms左右的延時在我的系統裡面還是可以勉強忍受的,但是490ms是無法容忍的。那麼就看看這490ms都耗費在哪裡?
函式SD_WaitWriteOperation();裡面主要有兩個延時:如下: