Main Site Documentation

USB Memory stick troubles


#1

Hello Everyone

I am experiencing some troubles while reading content of a USB memory stick. It has been formatted as FAT32 using guiformat with 4k allocation unit. It used to work pretty well untill we add some big files on the stick.

I fact my code load a 100kB xml file that has not moved on the stick. EMX can list all files and return its size but as soon as I start to do FileCopy or try to see the content of that file, I am receiving CLR_E_FILE_IO exception.

Any idea?


#2

@ leforban - How big are the large files that cause issues?


#3

I am trying to read a 200kB file. Th problem is if there’s only this file it’s ok. But then as soon as I fill up the stick with big files (1x700MB and 3x 1.5GB) the 200kB file can’t be read anymore… it generates the exception. If I remove the big files it still does not work. I need to reformat and replace the 200kB file on the stick…


#4

@ leforban - Are the large files being generated by the NETMF board or are they being loaded externally?


#5

@ leforban - Using both the NETMF and Gadgeteer versions of interfacing USB Mass Storage, I was unable to reproduce this issue. The thumbdrive used was a 4GB drive filled 90% with multi gigabyte files, and the one small file test

NETMF USB Device Connected Event Code:

void USBHostController_DeviceConnectedEvent(GHI.Premium.System.USBH_Device device)
        {
            if (device.TYPE == GHI.Premium.System.USBH_DeviceType.MassStorage)
            {
                Debug.Print("Found mass storage on USB Host...");
                Debug.Print("Connecting to device...");
                Thread.Sleep(1000);
                try
                {
                    _usb_ms = new PersistentStorage(device);
                    Debug.Print("Device ctor...");
                    _usb_ms.MountFileSystem();
                    Debug.Print("Device mounted...");

                    FileStream file = new FileStream("USB\\small file.txt", FileMode.Open);

                    byte[] small_file_buffer = new byte[file.Length];
                    file.Read(small_file_buffer, 0, small_file_buffer.Length);

                    file.Close();

                    Debug.Print("Read Okay");
                }
                catch (Exception error)
                {
                    Debug.Print("Error mounting device");
                }
            }
        }

Gadgeteer USBHostModule USBDriveConnected Event:

        void usbHost_USBDriveConnected(UsbHost sender, GT.StorageDevice storageDevice)
        {

            Debug.Print("Found mass storage on USB Host...");
            Debug.Print("Connecting to device...");
            Thread.Sleep(1000);
            try
            {
                FileStream file = new FileStream(storageDevice.Volume.RootDirectory + "\\small file.txt", FileMode.Open);

                byte[] small_file_buffer = new byte[file.Length];
                file.Read(small_file_buffer, 0, small_file_buffer.Length);

                file.Close();

                Debug.Print("Read Okay");
            }
            catch (Exception error)
            {
                Debug.Print("Error reading file");
            }
        }

Both output:

[quote]Found mass storage on USB Host…
Connecting to device…
Device ctor…
Device mounted…
Read Okay[/quote]

and

[quote]Found mass storage on USB Host…
Connecting to device…
Read Okay[/quote]

Respectively. I tested this on EMX with Spider and G120 with Cobra II


#6

Hi James

I also have no pb with small memory size (256MB to 1GB) but only when I use a 8GB or 64 GB. As I said if there’s only few files on memory stick it is perfect but problems occurs when large file are added. I will try to see if it happens again with other stick and file size to try to isolate the problem.