Eli Hughes
/
COMPACT_FLASH
Compact Flash I/O test
main.cpp
- Committer:
- emh203
- Date:
- 2011-12-27
- Revision:
- 0:6b1e6c9e48ba
- Child:
- 1:dc171f34db9b
File content as of revision 0:6b1e6c9e48ba:
#include "mbed.h" #include "ff.h" #include "diskio.h" Serial pc(USBTX, USBRX); // tx, rx CHAR ModelName[81] = {0}; CHAR SerialNumber[9] = {0}; CHAR FirmwareVerion[41] = {0}; BYTE DataBuf[512]; BYTE DataBufCheck[512]; Timer DataSpeedTimer; #define SECTORS_TO_READ_WRITE 4096 int main() { DWORD i,j,k; DWORD NumSectors; DWORD Sector; InitCompactFlashInterface(); float DataWriteSpeed = 0; float DataReadSpeed = 0; float DataReadWriteSpeed = 0; for(i=0;i<512;i++) DataBuf[i] = rand(); while(1) { wait(2.0); if(disk_status(0)&STA_NODISK) { pc.printf("\r\n\r\nNo Disk\r\n"); } else { pc.printf("\r\n\r\nDisk Detected\r\n\r\n\n"); if(disk_initialize(0)&STA_NOINIT) { pc.printf("Disk Failed Initialization\r\n"); } else { pc.printf("Disk Initialization Success!\r\n"); pc.printf("Probing attached Disk\r\n"); pc.printf("-----------------------\r\n"); disk_ioctl (0, /* Physical drive nmuber (0) */ GET_SECTOR_COUNT, /* Control code */ &NumSectors /* Buffer to send/receive data block */ ); disk_ioctl (0, /* Physical drive nmuber (0) */ ATA_GET_MODEL, /* Control code */ ModelName /* Buffer to send/receive data block */ ); disk_ioctl (0, /* Physical drive nmuber (0) */ ATA_GET_REV, /* Control code */ FirmwareVerion /* Buffer to send/receive data block */ ); disk_ioctl (0, /* Physical drive nmuber (0) */ ATA_GET_SN, /* Control code */ SerialNumber /* Buffer to send/receive data block */ ); pc.printf("Model Name: %d\r\n", ModelName); pc.printf("Firmware Version: %s\r\n",FirmwareVerion); pc.printf("Serial Number: %s\r\n",SerialNumber); pc.printf("Number of Sectors: %d\r\n",NumSectors); DataSpeedTimer.reset(); DataSpeedTimer.start(); pc.printf("Data write test started...\r\n\r\n",DataReadSpeed); for(i=0;i<SECTORS_TO_READ_WRITE;i++) { if(disk_write (0,&DataBuf[0],i,1) == RES_ERROR) { pc.printf("Error writing test block %d, stopping.\r\n", i); break; } } DataSpeedTimer.stop(); DataWriteSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read()); pc.printf("Data write speed %.1f kb/s\r\n",DataWriteSpeed); pc.printf("Data read test started...\r\n\r\n",DataReadSpeed); DataSpeedTimer.reset(); DataSpeedTimer.start(); for(i=0;i<SECTORS_TO_READ_WRITE;i++) { if(disk_read (0,&DataBuf[0],i,1) == RES_ERROR) { pc.printf("Error reading test block %d, stopping.\r\n", i); break; } } DataSpeedTimer.stop(); DataReadSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read()); pc.printf("Data read speed %.1f kb/s\r\n",DataReadSpeed); pc.printf("Data read/write test started...\r\n\r\n",DataReadSpeed); DataSpeedTimer.reset(); DataSpeedTimer.start(); for(j=0;j<SECTORS_TO_READ_WRITE;j++) { for(i=0;i<512;i++) { DataBuf[i] = rand(); DataBufCheck[i] = 0; } if(disk_write (0,&DataBuf[0],j,1) == RES_ERROR) { pc.printf("Error writing test block %d, stopping.\r\n", i); break; } if(disk_read (0,&DataBufCheck[0],j,1) == RES_ERROR) { pc.printf("Error reading test block %d, stopping.\r\n", i); break; } for(i=0;i<512;i++) { if(DataBuf[i]!=DataBufCheck[i]) { pc.printf("Readback failure on test block %d byte %d\r\n",j,i); for(k=0;k<512;k++) { pc.printf("k:%d Wrote: %d Read: %d\r\n",k,DataBuf[k],DataBufCheck[k]); } break; } } } DataSpeedTimer.stop(); DataReadWriteSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read()); pc.printf("Data read/write speed %.1f kb/s\r\n",DataReadWriteSpeed); } } } }