diff --git a/SD/Makefile b/SD/Makefile
index 90181d7519794aaecf03bf3a572ad6feee8a6718..2bce8126c66c9d620d8ecec9240d5682da2a079f 100644
--- a/SD/Makefile
+++ b/SD/Makefile
@@ -6,7 +6,7 @@ export TARGET_ARCH = -mmcu=$(MCU)
 export CFLAGS =  -Wall -I. -DF_CPU=16000000 -Os -DDEBUG -DTEST_WRITE -DTEST_READ #-g
 export LDFLAGS = -g $(TARGET_ARCH) -lm -Wl,--gc-sections #	-Os
 
-TARGET = fileSystem
+TARGET = picofs
 TERM = /dev/ttyUSB0
 CPPFLAGS = -mmcu=$(MCU)
 PGMER = -c stk500v1 -b 57600 -P $(TERM)
diff --git a/SD/Sd2Card.c b/SD/Sd2Card.c
index 12bd914c51daba0ec9767f8133dc228dc055bfc9..f9f678fb9e75d133de6a6dd7a979a82a74549f65 100644
--- a/SD/Sd2Card.c
+++ b/SD/Sd2Card.c
@@ -294,7 +294,7 @@ info->partialBlockRead_ = value;
  */
 uint8_t readData(SD_info *info, uint32_t block, uint16_t offset, uint16_t count, uint8_t* dst) {
 if(count==0) return true;
-if((count+offset)>512){ goto fail; }
+if((count+offset)>256){ goto fail; }
 if(!info->inBlock_||block!=info->block_||offset<info->offset_){
   info->block_=block;
   // use address if not SDHC card
@@ -315,7 +315,7 @@ uint16_t i;
 for(i=0;i<count;i++) dst[i]=spi_exch(0xff);
 
 info->offset_ += count;
-if(!info->partialBlockRead_||info->offset_>=512){
+if(!info->partialBlockRead_||info->offset_>=256){
   // read rest of data, checksum and set chip select high
   readEnd(info);
   }
@@ -336,8 +336,8 @@ return false;
  * \return The value one, true, is returned for success and
  * the value zero, false, is returned for failure.
  */
-uint8_t readBlock(SD_info *info, uint32_t block, uint8_t* dst) {
-return readData(info, block, 0, 512, dst);
+uint8_t readBlockSD(SD_info *info, uint32_t block, uint8_t* dst) {
+return readData(info, block, 0, 256, dst);
 }
 
 //------------------------------------------------------------------------------
@@ -345,7 +345,7 @@ return readData(info, block, 0, 512, dst);
 static uint8_t writeData_(SD_info *info, uint8_t token, const uint8_t* src) {
 spi_exch(token);
 uint16_t i;
-for(i=0;i<512;i++) spi_exch(src[i]);
+for(i=0;i<256;i++) spi_exch(src[i]);
 spi_exch(0xff);  // dummy crc
 spi_exch(0xff);  // dummy crc
 info->status_=spi_exch(0xff);
@@ -378,7 +378,7 @@ return writeData_(info, WRITE_MULTIPLE_TOKEN, src);
  * \return The value one, true, is returned for success and
  * the value zero, false, is returned for failure.
  */
-uint8_t writeBlock(SD_info *info, uint32_t blockNumber, const uint8_t* src) {
+uint8_t writeBlockSD(SD_info *info, uint32_t blockNumber, const uint8_t* src) {
 // use address if not SDHC card
 if(info->type_!=SD_CARD_TYPE_SDHC) blockNumber <<= 9;
 if(cardCommand(info, CMD24, blockNumber)){
diff --git a/SD/Sd2Card.h b/SD/Sd2Card.h
index 03cf0cf7cccb92af71a2d6476875e06f1dc5fdf5..9203d1495cb9a55b4d5b5feb5e4da16eacffe927 100644
--- a/SD/Sd2Card.h
+++ b/SD/Sd2Card.h
@@ -68,8 +68,8 @@ uint8_t erase(SD_info *info, uint32_t firstBlock, uint32_t lastBlock);
 uint8_t sd_init(SD_info *info);
 void partialBlockRead(SD_info *info, uint8_t value);
 uint8_t readData(SD_info *info, uint32_t block, uint16_t offset, uint16_t count, uint8_t* dst);
-uint8_t readBlock(SD_info *info, uint32_t block, uint8_t* dst);
+uint8_t readBlockSD(SD_info *info, uint32_t block, uint8_t* dst);
 uint8_t writeData(SD_info *info, const uint8_t* src);
-uint8_t writeBlock(SD_info *info, uint32_t blockNumber, const uint8_t* src);
+uint8_t writeBlockSD(SD_info *info, uint32_t blockNumber, const uint8_t* src);
 uint8_t writeStart(SD_info *info, uint32_t blockNumber, uint32_t eraseCount);
 uint8_t writeStop(SD_info *info);
diff --git a/SD/picofs.c b/SD/picofs.c
index 2ff8614f5912308ac9a0f7f0449755aae88c19dc..a7939fac209342f0a21766f4e390b09bfd1d7f5e 100644
--- a/SD/picofs.c
+++ b/SD/picofs.c
@@ -2,17 +2,20 @@
 #include <stdlib.h>
 #include <string.h>
 
-//inclusion des fonctions faites précédemment
+#include "avr/io.h"
+#include "util/delay.h"
+
 #include "serial.h"
-#include <avr/io.h>
-#include <spi.h>
+#include "spi.h"
 #include "SdInfo.h"
 #include "Sd2Card.h"
+
+
 #define CHUNK_SIZE 64
 
-//#define BLOCK_SIZE 256
+#define BLOCK_SIZE 256
 #define MAX_FILENAME_LENGTH 16
-#define MAX_BLOCKS_PER_FILE 2040
+#define MAX_BLOCKS_PER_FILE 16
 #define MAX_FILES_IN_DIRECTORY 64
 #define FILESYSTEM_SIZE (8 * 1024 * 1024) // 8 Mo
 #define FIRST_DISPONIBILITY_CARD_BLOCK 1024
@@ -20,14 +23,39 @@
 #define FIRST_DATA_BLOCK 1040
 
 
+void readBlock(SD_info *sd, unsigned int num, int offset, unsigned char *storage, int size) {
+    // FILE *file = fopen("filesystem.bin", "rb+"); // Utiliser "rb+" pour ouvrir le fichier en lecture et écriture
+    // if (file == NULL) {
+    //     perror("Erreur lors de l'ouverture du fichier");
+    //     return;
+    // }
+    
+    readData(sd,num,offset, size, storage);
+    // fseek(file, num * BLOCK_SIZE + offset, SEEK_SET);
+    // fread(storage, 1, size, file);
+    // //fclose(file);
+}
+
+void writeBlock(SD_info *sd, unsigned int num, int offset, const unsigned char *storage, int size) {
+    // FILE *file = fopen("filesystem.bin", "rb+"); // Utiliser "rb+" pour ouvrir le fichier en lecture et écriture
+    // if (file == NULL) {
+    //     perror("Erreur lors de l'ouverture du fichier");
+    //     return;
+    // }
+    writeData(sd,num,offset,size,storage);
+    // fseek(file, num * BLOCK_SIZE + offset, SEEK_SET);
+    // fwrite(storage, 1, size, file);
+    // fclose(file);
+}
+
 
-void LS(SD_info *info) {
+void LS(SD_info *sd) {
     unsigned char buffer[MAX_FILENAME_LENGTH];
     int fileCount = 0;
 
     // Parcourir les blocs multiples de 16 à partir de 0 jusqu'à MAX_FILES_IN_DIRECTORY
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
-        readBlock(info, blockNum, buffer);
+        readBlock(sd,blockNum, 0, buffer, MAX_FILENAME_LENGTH);
 
         // Vérifier si le nom de fichier est vide
         if (buffer[0] != 0) {
@@ -43,7 +71,7 @@ void LS(SD_info *info) {
 }
 
 
-void setBlockAvailability(int blockNum, int availability) {
+void setBlockAvailability(SD_info *sd, int blockNum, int availability) {
 
     int byteIndexInCard = blockNum / 8; //Numéro d'octet dans la carte des blocs libres
     int blockIndexInCard = byteIndexInCard / 256; //Numéro du bloc dans la carte des blocs libres 
@@ -55,7 +83,7 @@ void setBlockAvailability(int blockNum, int availability) {
 
     // Lire l'octet existant dans le bloc de disponibilité du super bloc
     unsigned char buffer;
-    readBlock(availabilityBlockNum, byteIndexInBlock, &buffer, 1);
+    readBlock(sd, availabilityBlockNum, byteIndexInBlock, &buffer, 1);
 
     // Mettre à jour le bit d'offset correspondant :
     if (availability==1) { // indisponible
@@ -66,14 +94,14 @@ void setBlockAvailability(int blockNum, int availability) {
     }
 
     // Écrire l'octet mis à jour dans le bloc de disponibilité du super bloc
-    writeBlock(availabilityBlockNum, byteIndexInBlock, &buffer, 1);
+    writeBlock(sd,availabilityBlockNum, byteIndexInBlock, &buffer, 1);
 }
 
 int min(int a, int b) {
     return a < b ? a : b;
 }
 
-void RM(const char *filesystem_path, const char *filename) {
+void RM(SD_info *sd, const char *filename) {
     int fileFound = -1;
     int offset;
     unsigned char fileBuffer[BLOCK_SIZE];
@@ -81,13 +109,13 @@ void RM(const char *filesystem_path, const char *filename) {
     // Parcourir les blocs réservés pour la description des fichiers (superbloc)
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
         unsigned char filenameBuffer[MAX_FILENAME_LENGTH];
-        readBlock(blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
+        readBlock(sd,blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
 
         // Vérifier si le bloc contient le nom du fichier recherché
         if (strncmp((const char *)filenameBuffer, filename, MAX_FILENAME_LENGTH) == 0) {
             // Effacer le nom du fichier dans le superbloc
             memset(filenameBuffer, 0, MAX_FILENAME_LENGTH);
-            writeBlock(blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
+            writeBlock(sd,blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
             fileFound = 1;
             offset = blockNum;
             break;
@@ -109,22 +137,22 @@ void RM(const char *filesystem_path, const char *filename) {
 
         for (int chunkStart = startOffset; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) {
             int chunkSize = min(CHUNK_SIZE, BLOCK_SIZE - chunkStart);
-            readBlock(blockNum, chunkStart, fileBuffer, chunkSize);
+            readBlock(sd,blockNum, chunkStart, fileBuffer, chunkSize);
 
             for (int i = 0; i < chunkSize; i += 2) {
                 int blockNumData = (fileBuffer[i] << 8) | fileBuffer[i + 1];
                 printf("blockNumData=%d\n",blockNumData);
                 if (blockNumData == 0) {
-                    writeBlock(blockNum, chunkStart, fileBuffer, chunkSize); 
+                    writeBlock(sd,blockNum, chunkStart, fileBuffer, chunkSize); 
                     printf("Le fichier \"%s\" a été supprimé avec succès.\n", filename);
                     return; // Sortir des boucles
                 }
-                setBlockAvailability(blockNumData, 0); // Marquer le bloc comme disponible
+                setBlockAvailability(sd,blockNumData, 0); // Marquer le bloc comme disponible
                 fileBuffer[i] = 0;
                 fileBuffer[i + 1] = 0;
             }
 
-            writeBlock(blockNum, chunkStart, fileBuffer, chunkSize);
+            writeBlock(sd,blockNum, chunkStart, fileBuffer, chunkSize);
         }
     }
 
@@ -132,7 +160,7 @@ void RM(const char *filesystem_path, const char *filename) {
 }
 
 // Fonction qui modifie le nom du fichier
-void MV(const char *filesystem_path, const char *old_filename, const char *new_filename) {
+void MV(SD_info *sd, const char *old_filename, const char *new_filename) {
     size_t sizeNew_filename = strlen(new_filename);
     size_t sizeOld_filename = strlen(old_filename);
     unsigned char filenameBuffer[MAX_FILENAME_LENGTH];
@@ -141,7 +169,7 @@ void MV(const char *filesystem_path, const char *old_filename, const char *new_f
     // Parcourir les blocs réservés pour la description des fichiers (superbloc)
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
         
-        readBlock(blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
+        readBlock(sd,blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
         
         // Vérifier si le bloc contient le nom du fichier recherché
         if (strncmp((const char*)filenameBuffer, old_filename, MAX_FILENAME_LENGTH) == 0) {
@@ -151,7 +179,7 @@ void MV(const char *filesystem_path, const char *old_filename, const char *new_f
             }
             
             // Écrire le nom du fichier dans l'emplacement
-            writeBlock(blockNum, 0, (const unsigned char *)new_filename, sizeNew_filename);
+            writeBlock(sd,blockNum, 0, (const unsigned char *)new_filename, sizeNew_filename);
             
             fileFound=1;
 
@@ -166,13 +194,13 @@ void MV(const char *filesystem_path, const char *old_filename, const char *new_f
 }
 
 // Renvoie le premier bloc de donné disponible
-int findAvailableBlock() {
+int findAvailableBlock(SD_info *sd) {
     unsigned char availabilityBuffer[BLOCK_SIZE];
     int offset;
 
     // Lire la carte de disponibilité (à partir du bloc 1)
     for (int blockNum = FIRST_DISPONIBILITY_CARD_BLOCK; blockNum < FIRST_DATA_BLOCK; blockNum++) {
-        readBlock(blockNum, 0, availabilityBuffer, BLOCK_SIZE);
+        readBlock(sd,blockNum, 0, availabilityBuffer, BLOCK_SIZE);
         
         if (blockNum==FIRST_DISPONIBILITY_CARD_BLOCK) {
             offset=FIRST_DATA_BLOCK/8;
@@ -199,7 +227,7 @@ int findAvailableBlock() {
     // Aucun bloc disponible trouvé
     return -1;
 }
-/*
+
 // Fonction qui reconstitue le numéro de bloc à partir du tableau
 int reconsituteNumber(unsigned char blockNumberBuffer[2]) {
     unsigned char octet1 = blockNumberBuffer[0];
@@ -214,8 +242,8 @@ void createNumberBuffer(int dataBlockNum, unsigned char blockNumberBuffer[2]) {
     blockNumberBuffer[0] = (dataBlockNum >> 8) & 0xFF;
     blockNumberBuffer[1] = dataBlockNum & 0xFF;
 }
-*/
-void TYPE(const char *filesystem_path, const char *filename) {
+
+void TYPE(SD_info *sd, const char *filename) {
     size_t sizeFilename = strlen(filename);
     unsigned char buffer[MAX_FILENAME_LENGTH];
     int placeFound = -1;
@@ -232,18 +260,18 @@ void TYPE(const char *filesystem_path, const char *filename) {
     
     // Parcours des blocs réservés pour la description des fichiers (superbloc)
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
-        readBlock(blockNum, 0, buffer, MAX_FILENAME_LENGTH);
+        readBlock(sd,blockNum, 0, buffer, MAX_FILENAME_LENGTH);
         // Vérifier si le bloc est vide (pas de nom de fichier)
         if (buffer[0] == 0) {
             // Écrire le nom du fichier dans l'emplacement vide du superbloc
             if (sizeFilename < MAX_FILENAME_LENGTH) {
                 sizeFilename += 1; // Ajouter '\0' s'il y a de la place
             }
-            writeBlock(blockNum, 0, (const unsigned char *)filename, sizeFilename);
+            writeBlock(sd,blockNum, 0, (const unsigned char *)filename, sizeFilename);
             placeFound = blockNum;
             
             // Lire les données depuis l'entrée standard et écrire dans le fichier
-            int dataBlockNum = findAvailableBlock(); // Premier bloc de données à partir du bloc 1040
+            int dataBlockNum = findAvailableBlock(sd); // Premier bloc de données à partir du bloc 1040
             int blockSizeUsed = 0; // Compteur d'octets dans le bloc actuel
             
             unsigned char chunkBuffer[CHUNK_SIZE];
@@ -252,8 +280,8 @@ void TYPE(const char *filesystem_path, const char *filename) {
             while ((bytesRead = fread(chunkBuffer, 1, CHUNK_SIZE, stdin)) > 0) {
                 
                 // Écrire le chunk dans le bloc de données
-                writeBlock(dataBlockNum, blockSizeUsed, chunkBuffer, bytesRead);
-                setBlockAvailability(dataBlockNum, 1);
+                writeBlock(sd,dataBlockNum, blockSizeUsed, chunkBuffer, bytesRead);
+                setBlockAvailability(sd,dataBlockNum, 1);
                 
                 // Écrire le numéro du bloc actuel dans la description du fichier
                 unsigned char blockNumberBuffer[2];
@@ -272,10 +300,10 @@ void TYPE(const char *filesystem_path, const char *filename) {
                     } else {
                         offset = 0;
                     }
-                    writeBlock(placeFound + index_description_block, offset + index_in_descrBlock*2, blockNumberBuffer, 2);
+                    writeBlock(sd,placeFound + index_description_block, offset + index_in_descrBlock*2, blockNumberBuffer, 2);
                     index_in_descrBlock++;
                     
-                    dataBlockNum = findAvailableBlock(); // Passer au bloc suivant
+                    dataBlockNum = findAvailableBlock(sd); // Passer au bloc suivant
                     blockSizeUsed = 0; // Réinitialiser la taille utilisée
                     
                     // Passage au bloc de description suivant
@@ -307,7 +335,7 @@ void TYPE(const char *filesystem_path, const char *filename) {
 }
 
 
-void CAT(const char *filesystem_path, const char *filename) {
+void CAT(SD_info *sd, const char *filename) {
     unsigned char filenameBuffer[MAX_FILENAME_LENGTH];
     unsigned char byteBuffer[2];
     unsigned char dataBuffer[CHUNK_SIZE];
@@ -315,7 +343,7 @@ void CAT(const char *filesystem_path, const char *filename) {
     
     // Parcours des blocs réservés pour la description des fichiers (superbloc)
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
-        readBlock(blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
+        readBlock(sd,blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
         
         // Vérifier si le bloc contient le nom du fichier recherché
         if (strncmp((const char *)filenameBuffer, filename, MAX_FILENAME_LENGTH) == 0) {
@@ -331,7 +359,7 @@ void CAT(const char *filesystem_path, const char *filename) {
                 
                 // Lecture des octets deux par deux
                 for (int i=0; i<BLOCK_SIZE;i+=2) {
-                    readBlock(descrBlockNum+blockNum, offset+i, byteBuffer, 2);
+                    readBlock(sd,descrBlockNum+blockNum, offset+i, byteBuffer, 2);
                 
                     // Lire les numéros de blocs associés à ce fichier depuis les blocs de description
                     int dataBlockNum = reconsituteNumber(byteBuffer);
@@ -343,7 +371,7 @@ void CAT(const char *filesystem_path, const char *filename) {
                     
                     for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) {
                         // Lire et afficher le contenu du bloc de données
-                        readBlock(dataBlockNum, chunkStart, dataBuffer, CHUNK_SIZE);
+                        readBlock(sd,dataBlockNum, chunkStart, dataBuffer, CHUNK_SIZE);
                         fwrite(dataBuffer, 1, CHUNK_SIZE, stdout);
                     }
                 }
@@ -359,7 +387,7 @@ void CAT(const char *filesystem_path, const char *filename) {
 
 
 // Fonction pour copier un fichier existant du système de fichier
-void CP(const char *filesystem_path, const char *source_filename, const char *destination_filename) {
+void CP(SD_info *sd, const char *source_filename, const char *destination_filename) {
     unsigned char source_filenameBuffer[MAX_FILENAME_LENGTH];
     unsigned char destination_filenameBuffer[MAX_FILENAME_LENGTH];
     unsigned char descriptionBuffer[CHUNK_SIZE];
@@ -373,7 +401,7 @@ void CP(const char *filesystem_path, const char *source_filename, const char *de
     // Recherche du fichier source
     source_offset = -1;
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
-        readBlock(blockNum, 0, source_filenameBuffer, MAX_FILENAME_LENGTH);
+        readBlock(sd,blockNum, 0, source_filenameBuffer, MAX_FILENAME_LENGTH);
         
         // Vérifier si le bloc contient le nom du fichier source
         if (strncmp((const char *)source_filenameBuffer, source_filename, MAX_FILENAME_LENGTH) == 0) {
@@ -390,7 +418,7 @@ void CP(const char *filesystem_path, const char *source_filename, const char *de
     // Recherche d'un emplacement libre pour le fichier destination
     destination_offset = -1;
     for (int blockNum = 0; blockNum < MAX_FILES_IN_DIRECTORY; blockNum += 16) {
-        readBlock(blockNum, 0, destination_filenameBuffer, MAX_FILENAME_LENGTH);
+        readBlock(sd,blockNum, 0, destination_filenameBuffer, MAX_FILENAME_LENGTH);
         
         // Vérifier si le bloc est vide (pas de nom de fichier)
         if (destination_filenameBuffer[0] == 0) {
@@ -405,7 +433,7 @@ void CP(const char *filesystem_path, const char *source_filename, const char *de
     }
 
     // Copie du nom de la copie dans le bloc de description
-    writeBlock(destination_offset, 0, (const unsigned char *)destination_filename, strlen(destination_filename));
+    writeBlock(sd,destination_offset, 0, (const unsigned char *)destination_filename, strlen(destination_filename));
 
     // Copier les blocs de données associés au fichier source dans de nouveaux blocs de données pour le fichier destination
     for (int i = 0; i < MAX_BLOCKS_PER_FILE_DESCRIPTION; i++) {
@@ -414,7 +442,7 @@ void CP(const char *filesystem_path, const char *source_filename, const char *de
         
         // Lecture des numéros de bloc dans les blocs de description
         for (int byteNum=0; byteNum<BLOCK_SIZE; byteNum+=2) {
-            readBlock(source_offset + i, offset + byteNum, numBuffer, 2);
+            readBlock(sd,source_offset + i, offset + byteNum, numBuffer, 2);
             
 
             numDataBlock = reconsituteNumber(numBuffer);
@@ -425,22 +453,22 @@ void CP(const char *filesystem_path, const char *source_filename, const char *de
             
             for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) {
                 // On stocke le bloc de données associé au fichier source dans descriptionBuffer
-                readBlock(numDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE);
+                readBlock(sd,numDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE);
                 
                 if (chunkStart == 0) {
                     // Trouver un nouveau bloc de données disponible
-                    newDataBlock = findAvailableBlock();
+                    newDataBlock = findAvailableBlock(sd);
                     
                     // Mise à jour de la carte de disponibilités
-                    setBlockAvailability(newDataBlock, 1);
+                    setBlockAvailability(sd,newDataBlock, 1);
                     
                     // Ecriture du numéro de bloc dans la description du fichier
                     createNumberBuffer(newDataBlock,numBuffer);
-                    writeBlock(destination_offset+i, offset+byteNum, numBuffer, 2);
+                    writeBlock(sd,destination_offset+i, offset+byteNum, numBuffer, 2);
                 }
             
                 // Ecriture du bloc de données dans le premier bloc disponible
-                writeBlock(newDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE);
+                writeBlock(sd,newDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE);
             }
         }
     }
@@ -450,21 +478,108 @@ void CP(const char *filesystem_path, const char *source_filename, const char *de
 
 int main(int argc, char *argv[]) {
     
-    
+    #ifdef TEST_WRITE
+    uint8_t blocW[BLOCK_SIZE]={0xac,0xbc,0xcc};
+    #endif
+    #ifdef TEST_READ
+    uint8_t blocR[BLOCK_SIZE];
+    #endif
+    #ifdef DEBUG
     init_printf();
+    #endif
     SD_info sd;
     spi_init();
-    
     uint8_t result=sd_init(&sd);
+    #ifdef DEBUG
     printf("result=%x\n",result);
     printf("status=%x\n",sd.status_);
     printf("erreur=%x\n",sd.errorCode_);
     printf("type=%x\n",sd.type_);
-    
     uint32_t size=cardSize(&sd);
     printf("taille=%ld\n",size);
+    #endif
+    
+    #ifdef TEST_WRITE
+    int statutWrite=writeBlockSD(&sd,16,blocW); //écriture dans bloc 16
+    #endif
+    #ifdef DEBUG
+    printf("statutWrite=%x\n",statutWrite);
+    #endif
+    
     
+    #ifdef TEST_READ
+    int statutRead=readBlockSD(&sd,16,blocR);
+    #endif
+    #ifdef DEBUG
+    printf("statutRead=%x\n",statutRead);
+    int i;
+    for(i=0;i<3;i++) printf("blocR[%d]=%x ",i,blocR[i]);
+    printf("\n");
+    #endif
     
-    return 0;
+    return 0;    
+//     // Vérification du nombre d'arguments
+//     if (argc < 3) {
+//         printf("Usage: %s filesystem_path ACTION [arguments...]\n", argv[0]);
+//         printf("Actions:\n");
+//         printf("  LS\n");
+//         printf("  TYPE filename\n");
+//         printf("  CAT filename\n");
+//         printf("  RM filename\n");
+//         printf("  MV old_filename new_filename\n");
+//         printf(" CP filename copy_filename\n");
+//         
+//         // setBlockAvailability(1040,1);
+//         // setBlockAvailability(1041,1);
+//         // setBlockAvailability(1042,1);
+//         // setBlockAvailability(1043,1);
+//         // printf("1er bloc dispo:%d\n",findAvailableBlock());
+//         return 1;
+//     }
+// 
+//     // Récupération des arguments
+//     const char *filesystem_path = argv[1];
+//     const char *action = argv[2];
+// 
+//     // Exécution de l'action correspondante en fonction des arguments passés
+//     if (strcmp(action, "LS") == 0) {
+//         LS(filesystem_path);
+//     } else if (strcmp(action, "TYPE") == 0) {
+//         if (argc < 4) {
+//             printf("Usage: %s filesystem_path TYPE filename\n", argv[0]);
+//             return 1;
+//         }
+//         TYPE(filesystem_path, argv[3]);
+//     } else if (strcmp(action, "CAT") == 0) {
+//         if (argc < 4) {
+//             printf("Usage: %s filesystem_path CAT filename\n", argv[0]);
+//             return 1;
+//         }
+//         CAT(filesystem_path, argv[3]);
+//     } else if (strcmp(action, "RM") == 0) { 
+//         if (argc < 4) {
+//             printf("Usage: %s filesystem_path RM filename\n", argv[0]);
+//             return 1;
+//         }
+//         RM(filesystem_path, argv[3]);
+//     } else if (strcmp(action, "MV") == 0) { 
+//         if (argc < 5) {
+//             printf("Usage: %s filesystem_path MV filename\n", argv[0]);
+//             return 1;
+//         }
+//         MV(filesystem_path, argv[3], argv[4]);
+//     } else if (strcmp(action, "CP") == 0) {
+//         if (argc < 5) {
+//             printf("Usage: %s filesystem_path MV filename\n", argv[0]);
+//             return 1;
+//         }
+//         CP(filesystem_path, argv[3], argv[4]);
+//         
+//     } else {
+//         printf("Action non reconnue. Actions possibles : LS, TYPE, CAT, RM, MV.\n");
+//         return 1;
+//     }
+
+//    return 0;
 }