• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*---------------------------------------------------------------------*/
2 /* Raw Read/Write Throughput Checker                                   */
3 /*---------------------------------------------------------------------*/
4 
5 #include <stdio.h>
6 #include <systimer.h>
7 #include "diskio.h"
8 #include "ff.h"
9 
10 
test_raw_speed(BYTE pdrv,DWORD lba,DWORD len,void * buff,UINT sz_buff)11 int test_raw_speed (
12     BYTE pdrv,      /* Physical drive number */
13     DWORD lba,      /* Start LBA for read/write test */
14     DWORD len,      /* Number of bytes to read/write (must be multiple of sz_buff) */
15     void* buff,     /* Read/write buffer */
16     UINT sz_buff    /* Size of read/write buffer (must be multiple of FF_MAX_SS) */
17 )
18 {
19     WORD ss;
20     DWORD ofs, tmr;
21 
22 
23 #if FF_MIN_SS != FF_MAX_SS
24     if (disk_ioctl(pdrv, GET_SECTOR_SIZE, &ss) != RES_OK) {
25         printf("\ndisk_ioctl() failed.\n");
26         return 0;
27     }
28 #else
29     ss = FF_MAX_SS;
30 #endif
31 
32     printf("Starting raw write test at sector %lu in %u bytes of data chunks...", lba, sz_buff);
33     tmr = systimer();
34     for (ofs = 0; ofs < len / ss; ofs += sz_buff / ss) {
35         if (disk_write(pdrv, buff, lba + ofs, sz_buff / ss) != RES_OK) {
36             printf("\ndisk_write() failed.\n");
37             return 0;
38         }
39     }
40     if (disk_ioctl(pdrv, CTRL_SYNC, 0) != RES_OK) {
41         printf("\ndisk_ioctl() failed.\n");
42         return 0;
43     }
44     tmr = systimer() - tmr;
45     printf("\n%lu bytes written and it took %lu timer ticks.\n", len, tmr);
46 
47     printf("Starting raw read test at sector %lu in %u bytes of data chunks...", lba, sz_buff);
48     tmr = systimer();
49     for (ofs = 0; ofs < len / ss; ofs += sz_buff / ss) {
50         if (disk_read(pdrv, buff, lba + ofs, sz_buff / ss) != RES_OK) {
51             printf("\ndisk_read() failed.\n");
52             return 0;
53         }
54     }
55     tmr = systimer() - tmr;
56     printf("\n%lu bytes read and it took %lu timer ticks.\n", len, tmr);
57 
58     printf("Test completed.\n");
59     return 1;
60 }
61 
62