1. 程式人生 > >fatfs-SDIO的寫檔案時間耗費在哪裡了?

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();裡面主要有兩個延時:如下: