df_mem.c

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 //_____  I N C L U D E S ___________________________________________________
00015 
00016 #include "config.h"                         // system configuration
00017 #include "df_mem.h"
00018 #include "df.h"
00019 
00020 
00021 
00022 //_____ M A C R O S ________________________________________________________
00023 //_____ P R I V A T E    D E C L A R A T I O N _____________________________
00024 
00025 
00026 //_____ D E F I N I T I O N ________________________________________________
00027 
00028 
00029 #define MEM_BASE_ADDRESS       0x0000
00030 
00031 
00032 data    U32  gl_ptr_mem;             /* memory data pointer */
00033 
00034 
00035 /* Disk management  */
00036 bit     reserved_disk_space = FALSE;    /* reserved space for application on disk */
00037 
00038 
00039 
00040 //extern xdata U32 df_mem_size;
00041 extern xdata U32 DF_DISK_SIZE;
00042 
00043 
00044 void  df_check_init( void );
00045 
00046 
00047 //_____ D E C L A R A T I O N ______________________________________________
00048 
00059 void df_mem_init(void)
00060 {
00061    df_init();        // Init the DF driver and its communication link.
00062 }
00063 
00064 
00076 Ctrl_status df_test_unit_ready(void)
00077 {
00078    return( (OK==df_mem_check()) ? CTRL_GOOD : CTRL_NO_PRESENT);
00079 }
00080 
00081 
00092 Ctrl_status df_read_capacity( U32 _MEM_TYPE_SLOW_ *u32_nb_sector )
00093 {
00094    *u32_nb_sector = DF_DISK_SIZE;
00095    return CTRL_GOOD;
00096 }
00097 
00098 
00110 Bool  df_wr_protect(void)
00111 {
00112    return FALSE;
00113 }
00114 
00115 
00125 Bool  df_removal(void)
00126 {
00127    return FALSE;
00128 }
00129 
00130 
00131 
00132 //------------ STANDARD FUNCTIONS to read/write the memory --------------------
00133 
00150 Ctrl_status df_read_10( U32 addr , U16 nb_sector )
00151 {
00152 #if   (DF_NB_MEM != 1)                 // if more than 1 memory, variables are needed for zones mangement
00153    U32   next_sector_addr = addr;
00154    U16   nb_sectors_remaining = nb_sector;
00155 #endif
00156 
00157 #if   (DF_NB_MEM == 1)     /* 1 DATAFLASH */
00158    df_read_open(addr);                    // wait device is not busy, then send command & address
00159    df_read_sector(nb_sector);             // transfer data from memory to USB
00160 #else                      /* 2 or 4 DATAFLASH */
00161    #ifdef DF_4_MB             // 512B PAGES
00162    while (nb_sectors_remaining != 0)
00163    {
00164       df_read_open(next_sector_addr);     // wait device is not busy, then send command & address
00165       df_read_sector(1);                  // transfer the page from memory to USB
00166       df_read_close();
00167       nb_sectors_remaining--;
00168       next_sector_addr++;
00169    }
00170    #else                      // 1024B PAGES
00171    while (nb_sectors_remaining != 0)
00172    {
00173       df_read_open(next_sector_addr);     // wait device is not busy, then send command & address
00174       if ((LSB0(next_sector_addr)&0x01) == 0)
00175       {
00176         if (nb_sectors_remaining == 1)
00177         {
00178            df_read_sector(1);
00179            df_read_close();
00180            nb_sectors_remaining--;
00181            next_sector_addr++;
00182         }
00183         else
00184         {
00185           df_read_sector(2);
00186           df_read_close();
00187           nb_sectors_remaining -= 2;
00188           next_sector_addr += 2;
00189         }
00190       }
00191       else
00192       {
00193         df_read_sector(1);
00194         df_read_close();
00195         nb_sectors_remaining--;
00196         next_sector_addr++;
00197       }
00198    }
00199    #endif
00200 #endif
00201    df_read_close();                    // unselect memory
00202    return CTRL_GOOD;
00203 }
00204 
00205 
00219 Ctrl_status df_write_10( U32 addr , U16 nb_sector )
00220 {
00221 #if   (DF_NB_MEM != 1)                 // if more than 1 memory, variables are needed for zones mangement
00222    U32   next_sector_addr = addr;
00223    U16   nb_sectors_remaining = nb_sector;
00224 #endif
00225 
00226 #if      (DF_NB_MEM == 1)  /* 1 DATAFLASH */
00227    df_write_open(addr);                    // wait device is not busy, then send command & address
00228    df_write_sector(nb_sector);             // transfer data from memory to USB
00229 #else                      /* 2 or 4 DATAFLASH */
00230    #ifdef DF_4_MB       // 512B PAGES
00231    while (nb_sectors_remaining != 0)
00232    {
00233       df_write_open(next_sector_addr);     // wait device is not busy, then send command & address
00234       df_write_sector(1);                  // transfer the page from memory to USB
00235       df_write_close();
00236       nb_sectors_remaining--;
00237       next_sector_addr++;
00238    }
00239    #else                // 1024B PAGES
00240    while (nb_sectors_remaining != 0)
00241    {
00242       df_write_open(next_sector_addr);     // wait device is not busy, then send command & address
00243       if ((LSB0(next_sector_addr)&0x01) == 0)
00244       {
00245         if (nb_sectors_remaining == 1)
00246         {
00247           df_write_sector(1);
00248           df_write_close();
00249           nb_sectors_remaining--;
00250           next_sector_addr++;
00251         }
00252         else
00253         {
00254           df_write_sector(2);
00255           df_write_close();
00256           nb_sectors_remaining -= 2;
00257           next_sector_addr += 2;
00258         }
00259       }
00260       else
00261       {
00262         df_write_sector(1);
00263         df_write_close();
00264         nb_sectors_remaining--;
00265         next_sector_addr++;
00266       }
00267    }
00268    #endif
00269 #endif
00270    df_write_close();                    // unselect memory
00271    return CTRL_GOOD;
00272 }
00273 
00274 
00275 //------------ SPECIFIC FONCTION USB TRANSFER -----------------------------------------
00276 
00277 //** If your device transfer have a specific transfer for USB (Particularity of Chejudo product, or bootloader)
00278 // !!! In this case the driver must be know the USB access
00279 
00285 Ctrl_status df_usb_read()
00286 {
00287    return CTRL_GOOD;
00288 }
00289 
00290 
00296 Ctrl_status df_usb_write( void )
00297 {
00298    return CTRL_GOOD;
00299 }
00300 
00301 
00302 //------------ Standard functions for read/write 1 sector to 1 sector ram buffer -----------------
00303 
00317 Ctrl_status    df_ram_2_df(U32 addr, U8 *ram)
00318 {
00319    df_write_open(addr);
00320    df_write_sector_from_ram(ram);
00321    df_write_close();
00322    return CTRL_GOOD;
00323 }
00324 
00337 Ctrl_status    df_df_2_ram( U32 addr, U8 *ram)
00338 {
00339    df_read_open(addr);
00340    df_read_sector_2_ram(ram);
00341    df_read_close();
00342    return CTRL_GOOD;
00343 }
00344 
00345 
00346 
00352 Ctrl_status df_df_2_ram_read()
00353 {
00354    return CTRL_GOOD;
00355 }
00356 
00357 
00363 Ctrl_status df_ram_2_df_write( void )
00364 {
00365    return CTRL_GOOD;
00366 }
00367 

Generated on Fri Jun 15 14:07:32 2007 for Atmel by  doxygen 1.5.1-p1