373a8c32b2
git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@55 9fe90eed-be63-e94b-8204-d34ff4c2ff93
245 lines
8.8 KiB
C
245 lines
8.8 KiB
C
/* ---------------------------------------------------------------------------
|
|
* dosfs_test.c (c) 2008 Micro-key bv
|
|
* ---------------------------------------------------------------------------
|
|
* Micro-key bv
|
|
* Industrieweg 28, 9804 TG Noordhorn
|
|
* Postbus 92, 9800 AB Zuidhorn
|
|
* The Netherlands
|
|
* Tel: +31 594 503020
|
|
* Fax: +31 594 505825
|
|
* Email: support@microkey.nl
|
|
* Web: www.microkey.nl
|
|
* ---------------------------------------------------------------------------
|
|
* Description:
|
|
* ---------------------------------------------------------------------------
|
|
* Version(s): 0.1, Jul 29, 2008, MMi
|
|
* Creation.
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* System include files
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
/* Compiler includes */
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "LPC23xx.h"
|
|
#include "types.h"
|
|
|
|
/* FreeRTOS includes */
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
/* ---------------------------------------------------------------------------
|
|
* Application include files
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
#include "fat_test.h"
|
|
#include "fat_intern.h"
|
|
#include "fat_public.h"
|
|
#include "fat_diskio.h"
|
|
#include "mmc.h"
|
|
#include "SerOut.h"
|
|
#include "serial.h"
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Local constant and macro definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Global variable definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* Local variable definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
UINT8 ff_Write[0x200]; /* used with MMC Write Function */
|
|
UINT8 ff_Read[0x200];
|
|
UINT8 test_Write[0x200];
|
|
UINT8 test_Read1[0x200];
|
|
UINT8 test_Read2[0x200];
|
|
/* ---------------------------------------------------------------------------
|
|
* Local function definitions
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
void ffTestStart (void)
|
|
{
|
|
UINT32 loopcnt;
|
|
MmcState_t CardStatus;
|
|
|
|
/* Clear Terminal Screen with VT100 Command */
|
|
serWrite(SerOutPort, sizeof("\x1B[2J"), "\x1B[2J"); /*WARNING don't care*/
|
|
|
|
MmcInitMedia(); /* Init Card and give Status */
|
|
|
|
|
|
/* Test that write and Read work */
|
|
CardStatus = disk_write (0, (pUINT8)ff_Write, 3, 1);
|
|
|
|
CardStatus = disk_read (0, (pUINT8)ff_Read, 3, 1);
|
|
|
|
for (loopcnt = 0; loopcnt < 0x200; loopcnt++)
|
|
{
|
|
if (ff_Write[loopcnt] != ff_Read[loopcnt])
|
|
{
|
|
debugPrint ("\n\rCompare ERROR");
|
|
break;
|
|
}
|
|
ff_Write[loopcnt] = 0;
|
|
ff_Read[loopcnt] = 0;
|
|
}
|
|
vTaskDelay(1000);
|
|
|
|
|
|
/* ---------------------------------------------------------------------------
|
|
* BEGINN FAT TEST SEQUENCE
|
|
* ---------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
/* Mount SD-Card as virtual drive 0 */
|
|
FATFS volume_object;
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rMount Volume as Drive 0");
|
|
FAT_StatusOut (f_mount (0, &volume_object));
|
|
|
|
|
|
vTaskDelay (100);
|
|
/* FILE ACCESS TESTS
|
|
* Open a File. If file does not exist, create it
|
|
* Close File
|
|
* Delete File
|
|
*/
|
|
FIL file_1; /* create a blank File structure */
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rOpen, Close and Delete a File");
|
|
FAT_StatusOut (f_open (&file_1, "test.fil", (FA_CREATE_ALWAYS)));
|
|
FAT_StatusOut (f_close (&file_1));
|
|
FAT_StatusOut (f_unlink ("test.fil"));
|
|
|
|
vTaskDelay (100);
|
|
/* DIRECTORY ACCESS TESTS
|
|
* Create a subdirectory
|
|
* Open a File in the subdirectory. If file does not exist, create it
|
|
* Sync File
|
|
* Leave file opened
|
|
*/
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rCreate subdirs, create file in subdir, sync file, delete subdir");
|
|
FAT_StatusOut (f_mkdir ("subdir"));
|
|
FAT_StatusOut (f_mkdir ("deleteme"));
|
|
FAT_StatusOut (f_open (&file_1, "subdir/test.dat", (FA_READ | FA_WRITE | FA_CREATE_ALWAYS)));
|
|
FAT_StatusOut (f_sync (&file_1));
|
|
FAT_StatusOut (f_unlink ("deleteme"));
|
|
|
|
|
|
vTaskDelay (100);
|
|
/* FILE READ/WRITE TESTS
|
|
* Read MBR from Disc into an Array
|
|
* Open a file. If file does not exist, create it with read and write access
|
|
* Write MBR from Array in opened/created file
|
|
* Write MBR in already opened file from above (test.dat)
|
|
* Sync both files
|
|
* Set File Pointer for both files to offset 0x00
|
|
* Read both files and compare content with original MBR
|
|
* Close both files
|
|
*
|
|
* Shown with this is that the file system is capable of multifile access
|
|
* by usage of the fil information structure.
|
|
*/
|
|
UINT32 bytes_written;
|
|
UINT32 bytes_read;
|
|
FIL file_2; /* create a blank File structure */
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rOpen, write and read to files");
|
|
disk_read (0, (pUINT8)test_Write, 0, 1);
|
|
FAT_StatusOut (f_open (&file_2, "write.txt", (FA_WRITE | FA_READ | FA_CREATE_ALWAYS)));
|
|
FAT_StatusOut (f_write (&file_2, &test_Write, 0x200, &bytes_written));
|
|
FAT_StatusOut (f_write (&file_1, &test_Write, 0x200, &bytes_written));
|
|
FAT_StatusOut (f_sync (&file_2));
|
|
FAT_StatusOut (f_sync (&file_1));
|
|
FAT_StatusOut (f_lseek (&file_2, 0x00));
|
|
FAT_StatusOut (f_lseek (&file_1, 0x00));
|
|
FAT_StatusOut (f_read (&file_2, &test_Read1, 0x200, &bytes_read));
|
|
FAT_StatusOut (f_read (&file_1, &test_Read2, 0x200, &bytes_read));
|
|
for (loopcnt = 0; loopcnt < 0x200; loopcnt++)
|
|
{
|
|
if ((test_Write[loopcnt] != test_Read1[loopcnt])
|
|
|| (test_Write[loopcnt] != test_Read2[loopcnt]))
|
|
{
|
|
/* Strings are not equal */
|
|
debugPrint ("\n\rCompare Error");
|
|
break;
|
|
}
|
|
}
|
|
FAT_StatusOut (f_close (&file_2));
|
|
FAT_StatusOut (f_close (&file_1));
|
|
|
|
vTaskDelay (100);
|
|
/* RENAMING FILE AND DIRECTORY
|
|
* Create two files and two Directories
|
|
* Rename a File
|
|
* Rename a Directory
|
|
* Move a File
|
|
* Move a Directory
|
|
* Combine moving with renaming
|
|
* Close both files
|
|
*/
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rCreate, Rename and Move each a file and a directory");
|
|
FAT_StatusOut (f_open (&file_1, "rename1.old", (FA_CREATE_ALWAYS)));
|
|
FAT_StatusOut (f_open (&file_2, "rename2.old", (FA_CREATE_ALWAYS)));
|
|
FAT_StatusOut (f_mkdir ("renameme"));
|
|
FAT_StatusOut (f_mkdir ("movehere"));
|
|
FAT_StatusOut (f_rename ("rename1.old", "renamed1.new"));
|
|
FAT_StatusOut (f_rename ("renameme", "renamed"));
|
|
FAT_StatusOut (f_rename ("renamed1.new", "movehere/renamed1.new"));
|
|
FAT_StatusOut (f_rename ("renamed", "movehere/renamed"));
|
|
FAT_StatusOut (f_rename ("rename2.old", "movehere/renamed2.new"));
|
|
FAT_StatusOut (f_close (&file_1));
|
|
FAT_StatusOut (f_close (&file_2));
|
|
|
|
|
|
vTaskDelay (100);
|
|
/* CHANGING FILES
|
|
* Open a file. If not available, create it
|
|
* change Attributes (SET HIDDEN, set READ ONLY, clear ARCHIVE)
|
|
*/
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rChange Attributes");
|
|
FAT_StatusOut (f_open (&file_1, "attr.dat", (FA_READ | FA_WRITE | FA_CREATE_ALWAYS)));
|
|
FAT_StatusOut (f_chmod ("attr.dat", (AR_HID | AR_RDO), (AR_HID | AR_RDO | AR_ARC)));
|
|
FAT_StatusOut (f_close (&file_1));
|
|
|
|
|
|
vTaskDelay (100);
|
|
/* DO A SPEED TEST
|
|
* Fill write array with signs
|
|
* Open "speed.txt. If file does not exist, create it with write access
|
|
* Write Buffer x-Times to the speed.txt
|
|
*/
|
|
UINT8 character = 48;
|
|
debugPrint ("\n\r-----");
|
|
debugPrint ("\n\rSpeed Test");
|
|
for (loopcnt = 0; loopcnt < 0x200; loopcnt++)
|
|
{
|
|
ff_Write[loopcnt] = character;
|
|
}
|
|
FAT_StatusOut (f_open (&file_1, "speed.txt", (FA_WRITE | FA_OPEN_ALWAYS)));
|
|
|
|
for (loopcnt = 0; loopcnt < 20000; loopcnt++)
|
|
{
|
|
f_write (&file_1, &ff_Write, 0x200, &bytes_written);
|
|
}
|
|
FAT_StatusOut (f_close (&file_1));
|
|
|
|
|
|
debugPrint ("\n\rREADY!!!");
|
|
}
|
|
|