ChaN FS

This is my try to map the actual ChaN Fat Filesystem library v0.8 to the mbed file system.

ChaNFS

Import libraryChaNFS

First working version of a FATFileSystem compatible Chan FAT v0.8 implementation. This is intended to use with long file names and RTOS support. For now long file names work but RTOS support is still untested.

Features:

  • Long file name support
  • Compatible to FATFileSystem
  • Useable with RTOS (CoOS for example) -> still untested

ChaNFSUSB

Import libraryChaNFSUSB

This is a lib to use ChaNFS lib with USB mass storages like USB Sticks .. Long file names work

based on NXP USB mass storage code adapted from Igor Skochinsky

[Not found]

ChaNFSSD

Import libraryChaNFSSD

This is a lib to use ChaNFS lib with SD cards. Long filenames should work

based on Simon Fords

[Not found]

still not tested due to missing SD card connector (hope it arraives this week)


8 comments on ChaN FS :

20 Oct 2011

Hi Stefan,

ich hab da mal ne kleine frage ;-)

Kann ich mit deiner library auch binär daten lesen? ich möchte ein Bild einlesen können von der sd-karte, aber habe noch nicht genug plan von c ;-) Ist es möglich? Kannst du mir sagen wie ich das machen kann? Wäre super lieb von Dir, danke. Gruß Thomas

20 Oct 2011

Has anyone got File System to work on FLASH chip, such as: 45db16 (on MBED) 45db32 45db64

I am sure that there is evan a memory chip, that has the same command structure as SD card.

I would like to build a board, with NON REMOVABLE memory, and still keep File System Read/Write.

Regards

Ceri.

20 Oct 2011

Thomas Schwarz wrote:

Hi Stefan,

ich hab da mal ne kleine frage ;-)

Kann ich mit deiner library auch binär daten lesen? ich möchte ein Bild einlesen können von der sd-karte, aber habe noch nicht genug plan von c ;-) Ist es möglich? Kannst du mir sagen wie ich das machen kann? Wäre super lieb von Dir, danke. Gruß Thomas

Hallo Thomas,

klar geht das mit Binärdaten... du machst einfach

  fp = fopen( "/" FSNAME "/test.jpg", "r");
    if ( fp == NULL )
    {
        error("Could not open file for read\n");
    }
    char buf[256];
    if ( NULL == fgets(buf, sizeof(buf), fp) )
    {
        error("Error reading from file\n");
    }
    fclose(fp); 

Das Format ist beim lesen egal. es werden nur Bytes gelesen. Erst die verarbeitung vom char-Array entscheidet ob es wie ein String oder wie ein Bild behandelt wird.

Gruß Stefan

20 Oct 2011

ceri clatworthy wrote:

Has anyone got File System to work on FLASH chip, such as: 45db16 (on MBED) 45db32 45db64

I am sure that there is evan a memory chip, that has the same command structure as SD card.

I would like to build a board, with NON REMOVABLE memory, and still keep File System Read/Write.

Regards

Ceri.

Hello Ceri,

I'm not sure but I don't think that there is a flashchip that acts exactly like a SD card.

But it would be nice if we could "mount" a flashchip like a SD card or a usb stick in ChaNFS.

I did something like this on a AVR platform with an i2c eeprom. for eeprom it was not a big task to write a driver to use it with ChaNFS. If you like to write such a driver you can have a look at ChaNFSSD or ChaNFSUSB for the interfaces which must be implemented by the driver.

If you have any further questions on implementing a ChaNFSFlash library I can give you some support.

Best regards,

Stefan

20 Oct 2011

Actually there are such chips, see the eMMC standard. However, they're usually BGA and thus not very hobbyist-friendly.

24 Oct 2011

Hi Stefan.

ich hab noch ein kleines problem. ich sollte 4610 bytes laden, aber das char array hat nach dem laden nur etwa 1450 bytes des bildes, der rest sind 0x00 :-( hast du eventuell ne idee woran das liegt? in der declaration hab ich

char imagebuffer[4610];

und in der main routine

fp = fopen( "/sd/bg.wwi", "rb"); if ( fp == NULL ) { pc.printf("Could not open file for read\n"); } if ( NULL == fgets(imagebuffer, 4610, fp) ) 4610= 2bytes info + bildgröße 48x48 x 16 bit { pc.printf("Error reading from file\n"); } fclose(fp);

vielen Dank für Deine Hilfe. Gruß, Thomas

24 Oct 2011

Thomas Schwarz wrote:

Hi Stefan.

ich hab noch ein kleines problem. ich sollte 4610 bytes laden, aber das char array hat nach dem laden nur etwa 1450 bytes des bildes, der rest sind 0x00 :-( hast du eventuell ne idee woran das liegt? in der declaration hab ich

char imagebuffer[4610];

und in der main routine

fp = fopen( "/sd/bg.wwi", "rb"); if ( fp == NULL ) { pc.printf("Could not open file for read\n"); } if ( NULL == fgets(imagebuffer, 4610, fp) ) 4610= 2bytes info + bildgröße 48x48 x 16 bit { pc.printf("Error reading from file\n"); } fclose(fp);

vielen Dank für Deine Hilfe. Gruß, Thomas

sorry im fopen steht "r" und ned "rb" ;-)

25 Oct 2011

Thomas Schwarz wrote:

Thomas Schwarz wrote:

Hi Stefan.

ich hab noch ein kleines problem. ich sollte 4610 bytes laden, aber das char array hat nach dem laden nur etwa 1450 bytes des bildes, der rest sind 0x00 :-( hast du eventuell ne idee woran das liegt? in der declaration hab ich

char imagebuffer[4610];

und in der main routine

fp = fopen( "/sd/bg.wwi", "rb"); if ( fp == NULL ) { pc.printf("Could not open file for read\n"); } if ( NULL == fgets(imagebuffer, 4610, fp) ) 4610= 2bytes info + bildgröße 48x48 x 16 bit { pc.printf("Error reading from file\n"); } fclose(fp);

vielen Dank für Deine Hilfe. Gruß, Thomas

sorry im fopen steht "r" und ned "rb" ;-)

Hallo Thomas,

hast du schon versucht die Datei in mehreren Schritten einzulesen? Ich könnte mir vorstellen, dass je nach dem was du so alles am laufen hast der interne Ram für diese Operation nicht ausreicht.

Versuche doch mal etwas in der Richtung:

char imagebuffer[4610];

fp = fopen( "/sd/bg.wwi", "rb"); 
if ( fp == NULL ) {  
  pc.printf("Could not open file for read\n"); 
} 
fgets(imagebuffer, 1000, fp);  
fgets (imagebuffer +1000), 1000, fp);
fgets (imagebuffer +2000), 1000, fp); 
...
fgets (imagebuffer +4000), 610, fp);
fclose(fp);

Gruß Stefan

Please log in to post comments.