sd_mmc_mci_mem.c File Reference


Detailed Description

CTRL_ACCESS interface for SD/MMC card.

Author:
Atmel Corporation: http://www.atmel.com
Support and FAQ: http://support.atmel.no/

Definition in file sd_mmc_mci_mem.c.

#include "conf_access.h"
#include "conf_sd_mmc_mci.h"
#include "sd_mmc_mci.h"
#include "sd_mmc_mci_mem.h"
#include "usb_drv.h"
#include "scsi_decoder.h"

Go to the source code of this file.

Defines

#define Sd_mmc_mci_access_signal_off()
#define Sd_mmc_mci_access_signal_on()

Functions

MEM <-> RAM Interface
Ctrl_status sd_mmc_mci_dma_mem_2_ram (U8 slot, U32 addr, void *ram)
Ctrl_status sd_mmc_mci_dma_multiple_mem_2_ram (U8 slot, U32 addr, void *ram, U32 nb_sectors)
Ctrl_status sd_mmc_mci_dma_multiple_ram_2_mem (U8 slot, U32 addr, const void *ram, U32 nb_sectors)
Ctrl_status sd_mmc_mci_dma_ram_2_mem (U8 slot, U32 addr, const void *ram)
Ctrl_status sd_mmc_mci_mem_2_ram (U8 slot, U32 addr, void *ram)
 Copies 1 data sector from the memory to RAM.
Ctrl_status sd_mmc_mci_mem_2_ram_0 (U32 addr, void *ram)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.
Ctrl_status sd_mmc_mci_mem_2_ram_1 (U32 addr, void *ram)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.
Ctrl_status sd_mmc_mci_multiple_mem_2_ram (U8 slot, U32 addr, void *ram, U32 nb_sectors)
 Copies nb_sectors data sector from the memory to RAM.
Ctrl_status sd_mmc_mci_multiple_mem_2_ram_0 (U32 addr, void *ram, U32 nb_sectors)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.
Ctrl_status sd_mmc_mci_multiple_mem_2_ram_1 (U32 addr, void *ram, U32 nb_sectors)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.
Ctrl_status sd_mmc_mci_multiple_ram_2_mem (U8 slot, U32 addr, const void *ram, U32 nb_sectors)
 Copies nb_sectors data sector from RAM to the memory.
Ctrl_status sd_mmc_mci_multiple_ram_2_mem_0 (U32 addr, const void *ram, U32 nb_sectors)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.
Ctrl_status sd_mmc_mci_multiple_ram_2_mem_1 (U32 addr, const void *ram, U32 nb_sectors)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.
Ctrl_status sd_mmc_mci_ram_2_mem (U8 slot, U32 addr, const void *ram)
 Copies 1 data sector from RAM to the memory.
Ctrl_status sd_mmc_mci_ram_2_mem_0 (U32 addr, const void *ram)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.
Ctrl_status sd_mmc_mci_ram_2_mem_1 (U32 addr, const void *ram)
 Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.
Control Interface
Ctrl_status sd_mmc_mci_read_capacity (U8 slot, U32 *u32_nb_sector)
 Returns the address of the last valid sector in the memory.
Ctrl_status sd_mmc_mci_read_capacity_0 (U32 *u32_nb_sector)
 Instance Declaration for sd_mmc_mci_read_capacity Slot O.
Ctrl_status sd_mmc_mci_read_capacity_1 (U32 *u32_nb_sector)
 Instance Declaration for sd_mmc_mci_read_capacity Slot 1.
Bool sd_mmc_mci_removal (U8 slot)
 Tells whether the memory is removable.
Bool sd_mmc_mci_removal_0 (void)
 Instance Declaration for sd_mmc_mci_removal Slot O.
Bool sd_mmc_mci_removal_1 (void)
 Instance Declaration for sd_mmc_mci_removal Slot 1.
Ctrl_status sd_mmc_mci_test_unit_ready (U8 slot)
 Tests the memory state and initializes the memory if required.
Ctrl_status sd_mmc_mci_test_unit_ready_0 (void)
 Instance Declaration for sd_mmc_mci_test_unit_ready Slot O.
Ctrl_status sd_mmc_mci_test_unit_ready_1 (void)
 Instance Declaration for sd_mmc_mci_test_unit_ready Slot 1.
Bool sd_mmc_mci_wr_protect (U8 slot)
 Returns the write-protection state of the memory.
Bool sd_mmc_mci_wr_protect_0 (void)
 Instance Declaration for sd_mmc_mci_wr_protect Slot O.
Bool sd_mmc_wr_mci_protect_1 (void)
 Instance Declaration for sd_mmc_mci_wr_protect Slot 1.
MEM <-> USB Interface
void sd_mmc_mci_read_multiple_sector_callback (const void *psector)
 Callback function invoked after each sector read during sd_mmc_mci_read_multiple_sector.
Ctrl_status sd_mmc_mci_usb_read_10 (U8 slot, U32 addr, U16 nb_sector)
 Tranfers data from the memory to USB.
Ctrl_status sd_mmc_mci_usb_read_10_0 (U32 addr, U16 nb_sector)
 Instance Declaration for sd_mmc_mci_usb_read_10 Slot O.
Ctrl_status sd_mmc_mci_usb_read_10_1 (U32 addr, U16 nb_sector)
 Instance Declaration for sd_mmc_mci_usb_read_10 Slot 1.
Ctrl_status sd_mmc_mci_usb_write_10 (U8 slot, U32 addr, U16 nb_sector)
 Tranfers data from USB to the memory.
Ctrl_status sd_mmc_mci_usb_write_10_0 (U32 addr, U16 nb_sector)
 Instance Declaration for sd_mmc_mci_usb_write_10 Slot O.
Ctrl_status sd_mmc_mci_usb_write_10_1 (U32 addr, U16 nb_sector)
 Instance Declaration for sd_mmc_mci_usb_write_10 Slot 1.
void sd_mmc_mci_write_multiple_sector_callback (void *psector)
 Callback function invoked before each sector write during sd_mmc_mci_write_multiple_sector.

Variables

U32 g_u32_card_size [MCI_NR_SLOTS]
 SD/MMC Card Size per Slot.
Bool sd_mmc_mci_init_done [MCI_NR_SLOTS]
 Initialization sequence status per Slot.
static U8 sd_mmc_mci_presence_status [MCI_NR_SLOTS] = {SD_MMC_INSERTED, SD_MMC_INSERTED}
 SD/MMC Card Presence status per Slot.


Define Documentation

 
#define Sd_mmc_mci_access_signal_off (  ) 

 
#define Sd_mmc_mci_access_signal_on (  ) 


Function Documentation

Ctrl_status sd_mmc_mci_dma_mem_2_ram ( U8  slot,
U32  addr,
void *  ram 
)

Definition at line 354 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_dma_read_open(), sd_mmc_mci_dma_read_sector_2_ram(), sd_mmc_mci_mem_check(), and sd_mmc_mci_read_close().

Referenced by main().

00355 {
00356    if( !sd_mmc_mci_mem_check(slot) )
00357    {
00358      Sd_mmc_mci_access_signal_off();
00359      return CTRL_NO_PRESENT;
00360    }
00361 
00362    if( !sd_mmc_mci_dma_read_open(slot, addr, ram, 1) )
00363      return CTRL_FAIL;
00364 
00365    if( !sd_mmc_mci_dma_read_sector_2_ram(slot,ram) )
00366      return CTRL_FAIL;
00367 
00368    if(! sd_mmc_mci_read_close(slot) )
00369      return CTRL_FAIL;
00370 
00371    Sd_mmc_mci_access_signal_off();
00372    return CTRL_GOOD;
00373 
00374 }

Ctrl_status sd_mmc_mci_dma_multiple_mem_2_ram ( U8  slot,
U32  addr,
void *  ram,
U32  nb_sectors 
)

Definition at line 411 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_dma_read_multiple_sector_2_ram(), sd_mmc_mci_dma_read_open(), sd_mmc_mci_mem_check(), and sd_mmc_mci_read_close().

Referenced by main().

00412 {
00413    if( !sd_mmc_mci_mem_check(slot) )
00414    {
00415      Sd_mmc_mci_access_signal_off();
00416      return CTRL_NO_PRESENT;
00417    }
00418 
00419    if( !sd_mmc_mci_dma_read_open(slot, addr, ram, nb_sectors ) )
00420      return CTRL_FAIL;
00421 
00422    if( !sd_mmc_mci_dma_read_multiple_sector_2_ram(slot, ram, nb_sectors) )
00423      return CTRL_FAIL;
00424 
00425    if( !sd_mmc_mci_read_close(slot) )
00426      return CTRL_FAIL;
00427 
00428    Sd_mmc_mci_access_signal_off();
00429    return CTRL_GOOD;
00430 }

Ctrl_status sd_mmc_mci_dma_multiple_ram_2_mem ( U8  slot,
U32  addr,
const void *  ram,
U32  nb_sectors 
)

Definition at line 523 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_dma_write_multiple_sector_from_ram(), sd_mmc_mci_dma_write_open(), sd_mmc_mci_mem_check(), and sd_mmc_mci_write_close().

Referenced by main().

00524 {
00525    if( !sd_mmc_mci_mem_check(slot) )
00526    {
00527      Sd_mmc_mci_access_signal_off();
00528      return CTRL_NO_PRESENT;
00529    }
00530 
00531    if( !sd_mmc_mci_dma_write_open(slot, addr, ram, nb_sectors) )
00532      return CTRL_FAIL;
00533 
00534    if( !sd_mmc_mci_dma_write_multiple_sector_from_ram(slot, ram, nb_sectors) )
00535      return CTRL_FAIL;
00536 
00537    if( !sd_mmc_mci_write_close(slot) )
00538      return CTRL_FAIL;
00539 
00540    Sd_mmc_mci_access_signal_off();
00541    return CTRL_GOOD;
00542 }

Ctrl_status sd_mmc_mci_dma_ram_2_mem ( U8  slot,
U32  addr,
const void *  ram 
)

Definition at line 467 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_dma_write_open(), sd_mmc_mci_dma_write_sector_from_ram(), sd_mmc_mci_mem_check(), and sd_mmc_mci_write_close().

Referenced by main().

00468 {
00469    if( !sd_mmc_mci_mem_check(slot) )
00470    {
00471      Sd_mmc_mci_access_signal_off();
00472      return CTRL_NO_PRESENT;
00473    }
00474 
00475    if( !sd_mmc_mci_dma_write_open(slot, addr, ram, 1) )
00476      return CTRL_FAIL;
00477 
00478    if( !sd_mmc_mci_dma_write_sector_from_ram(slot, ram) )
00479      return CTRL_FAIL;
00480 
00481    if( !sd_mmc_mci_write_close(slot) )
00482      return CTRL_FAIL;
00483 
00484    Sd_mmc_mci_access_signal_off();
00485    return CTRL_GOOD;
00486 }

Ctrl_status sd_mmc_mci_mem_2_ram ( U8  slot,
U32  addr,
void *  ram 
)

Copies 1 data sector from the memory to RAM.

Parameters:
slot SD/MMC Slot Card Selected.
addr Address of first memory sector to read.
ram Pointer to RAM buffer to write.
Returns:
Status.

Definition at line 331 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_mem_check(), sd_mmc_mci_read_close(), sd_mmc_mci_read_open(), and sd_mmc_mci_read_sector_2_ram().

Referenced by main(), sd_mmc_mci_mem_2_ram_0(), sd_mmc_mci_mem_2_ram_1(), and test_sd_mmc_write().

00332 {
00333    if( !sd_mmc_mci_mem_check(slot) )
00334    {
00335      Sd_mmc_mci_access_signal_off();
00336      return CTRL_NO_PRESENT;
00337    }
00338 
00339    if( !sd_mmc_mci_read_open(slot, addr, 1) )
00340      return CTRL_FAIL;
00341 
00342    if( !sd_mmc_mci_read_sector_2_ram(slot, ram) )
00343      return CTRL_FAIL;
00344 
00345    if( !sd_mmc_mci_read_close(slot) )
00346      return CTRL_FAIL;
00347 
00348    Sd_mmc_mci_access_signal_off();
00349    return CTRL_GOOD;
00350 
00351 }

Ctrl_status sd_mmc_mci_mem_2_ram_0 ( U32  addr,
void *  ram 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.

Definition at line 377 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_mem_2_ram().

00378 {
00379   return sd_mmc_mci_mem_2_ram(0, addr, ram);
00380 }

Ctrl_status sd_mmc_mci_mem_2_ram_1 ( U32  addr,
void *  ram 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.

Definition at line 383 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_mem_2_ram().

00384 {
00385   return sd_mmc_mci_mem_2_ram(1, addr, ram);
00386 }

Ctrl_status sd_mmc_mci_multiple_mem_2_ram ( U8  slot,
U32  addr,
void *  ram,
U32  nb_sectors 
)

Copies nb_sectors data sector from the memory to RAM.

Parameters:
slot SD/MMC Slot Card Selected.
addr Address of first memory sector to read.
ram Pointer to RAM buffer to write.
nb_sectors Number of sectors to read.
Returns:
Status.

Definition at line 389 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_mem_check(), sd_mmc_mci_read_close(), sd_mmc_mci_read_multiple_sector_2_ram(), and sd_mmc_mci_read_open().

Referenced by main(), sd_mmc_mci_multiple_mem_2_ram_0(), and sd_mmc_mci_multiple_mem_2_ram_1().

00390 {
00391    if( !sd_mmc_mci_mem_check(slot) )
00392    {
00393      Sd_mmc_mci_access_signal_off();
00394      return CTRL_NO_PRESENT;
00395    }
00396 
00397    if( !sd_mmc_mci_read_open(slot, addr, nb_sectors) )
00398      return CTRL_FAIL;
00399 
00400    if( !sd_mmc_mci_read_multiple_sector_2_ram(slot, ram, nb_sectors) )
00401      return CTRL_FAIL;
00402 
00403    if( !sd_mmc_mci_read_close(slot) )
00404      return CTRL_FAIL;
00405 
00406    Sd_mmc_mci_access_signal_off();
00407    return CTRL_GOOD;
00408 }

Ctrl_status sd_mmc_mci_multiple_mem_2_ram_0 ( U32  addr,
void *  ram,
U32  nb_sectors 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.

Definition at line 433 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_multiple_mem_2_ram().

00434 {
00435   return sd_mmc_mci_multiple_mem_2_ram(0, addr, ram, nb_sectors);
00436 }

Ctrl_status sd_mmc_mci_multiple_mem_2_ram_1 ( U32  addr,
void *  ram,
U32  nb_sectors 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.

Definition at line 439 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_multiple_mem_2_ram().

00440 {
00441   return sd_mmc_mci_multiple_mem_2_ram(1, addr, ram, nb_sectors);
00442 }

Ctrl_status sd_mmc_mci_multiple_ram_2_mem ( U8  slot,
U32  addr,
const void *  ram,
U32  nb_sectors 
)

Copies nb_sectors data sector from RAM to the memory.

Parameters:
slot SD/MMC Slot Card Selected.
addr Address of first memory sector to write.
ram Pointer to RAM buffer to read.
nb_sectors Number of sectors to write.
Returns:
Status.

Definition at line 501 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_mem_check(), sd_mmc_mci_write_close(), sd_mmc_mci_write_multiple_sector_from_ram(), and sd_mmc_mci_write_open().

Referenced by main(), sd_mmc_mci_multiple_ram_2_mem_0(), and sd_mmc_mci_multiple_ram_2_mem_1().

00502 {
00503    if( !sd_mmc_mci_mem_check(slot) )
00504    {
00505      Sd_mmc_mci_access_signal_off();
00506      return CTRL_NO_PRESENT;
00507    }
00508 
00509    if( !sd_mmc_mci_write_open(slot, addr, nb_sectors) )
00510      return CTRL_FAIL;
00511 
00512    if( !sd_mmc_mci_write_multiple_sector_from_ram(slot, ram, nb_sectors) )
00513      return CTRL_FAIL;
00514 
00515    if( !sd_mmc_mci_write_close(slot) )
00516      return CTRL_FAIL;
00517 
00518    Sd_mmc_mci_access_signal_off();
00519    return CTRL_GOOD;
00520 }

Ctrl_status sd_mmc_mci_multiple_ram_2_mem_0 ( U32  addr,
const void *  ram,
U32  nb_sectors 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.

Definition at line 545 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_multiple_ram_2_mem().

00546 {
00547   return sd_mmc_mci_multiple_ram_2_mem(0, addr, ram, nb_sectors);
00548 }

Ctrl_status sd_mmc_mci_multiple_ram_2_mem_1 ( U32  addr,
const void *  ram,
U32  nb_sectors 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.

Definition at line 551 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_multiple_ram_2_mem().

00552 {
00553   return sd_mmc_mci_multiple_ram_2_mem(1, addr, ram, nb_sectors);
00554 }

Ctrl_status sd_mmc_mci_ram_2_mem ( U8  slot,
U32  addr,
const void *  ram 
)

Copies 1 data sector from RAM to the memory.

Parameters:
slot SD/MMC Slot Card Selected.
addr Address of first memory sector to write.
ram Pointer to RAM buffer to read.
Returns:
Status.

Definition at line 445 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, sd_mmc_mci_mem_check(), sd_mmc_mci_write_close(), sd_mmc_mci_write_open(), and sd_mmc_mci_write_sector_from_ram().

Referenced by main(), sd_mmc_mci_ram_2_mem_0(), sd_mmc_mci_ram_2_mem_1(), and test_sd_mmc_write().

00446 {
00447    if( !sd_mmc_mci_mem_check(slot) )
00448    {
00449      Sd_mmc_mci_access_signal_off();
00450      return CTRL_NO_PRESENT;
00451    }
00452 
00453    if( !sd_mmc_mci_write_open(slot, addr, 1) )
00454      return CTRL_FAIL;
00455 
00456    if( !sd_mmc_mci_write_sector_from_ram(slot,ram) )
00457      return CTRL_FAIL;
00458 
00459    if( !sd_mmc_mci_write_close(slot) )
00460      return CTRL_FAIL;
00461 
00462    Sd_mmc_mci_access_signal_off();
00463    return CTRL_GOOD;
00464 }

Ctrl_status sd_mmc_mci_ram_2_mem_0 ( U32  addr,
const void *  ram 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot O.

Definition at line 489 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_ram_2_mem().

00490 {
00491   return sd_mmc_mci_ram_2_mem(0, addr, ram);
00492 }

Ctrl_status sd_mmc_mci_ram_2_mem_1 ( U32  addr,
const void *  ram 
)

Instance Declaration for sd_mmc_mci_mem_2_ram Slot 1.

Definition at line 495 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_ram_2_mem().

00496 {
00497   return sd_mmc_mci_ram_2_mem(1, addr, ram);
00498 }

Ctrl_status sd_mmc_mci_read_capacity ( U8  slot,
U32 *  u32_nb_sector 
)

Returns the address of the last valid sector in the memory.

Parameters:
slot SD/MMC Slot Card Selected.
u32_nb_sector Pointer to the address of the last valid sector.
Returns:
Status.

Definition at line 129 of file sd_mmc_mci_mem.c.

References g_u32_card_size, Sd_mmc_mci_access_signal_off, Sd_mmc_mci_access_signal_on, and sd_mmc_mci_mem_check().

Referenced by main(), sd_mmc_mci_read_capacity_0(), and sd_mmc_mci_read_capacity_1().

00130 {
00131    Sd_mmc_mci_access_signal_on();
00132 
00133    if( !sd_mmc_mci_mem_check(slot) )
00134    {
00135      Sd_mmc_mci_access_signal_off();
00136      return CTRL_NO_PRESENT;
00137    }
00138    *u32_nb_sector = g_u32_card_size[slot]-1;
00139    Sd_mmc_mci_access_signal_off();
00140    return CTRL_GOOD;
00141 }

Ctrl_status sd_mmc_mci_read_capacity_0 ( U32 *  u32_nb_sector  ) 

Instance Declaration for sd_mmc_mci_read_capacity Slot O.

Definition at line 144 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_read_capacity().

00145 {
00146   return sd_mmc_mci_read_capacity(0, u32_nb_sector);
00147 }

Ctrl_status sd_mmc_mci_read_capacity_1 ( U32 *  u32_nb_sector  ) 

Instance Declaration for sd_mmc_mci_read_capacity Slot 1.

Definition at line 150 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_read_capacity().

00151 {
00152   return sd_mmc_mci_read_capacity(1, u32_nb_sector);
00153 }

void sd_mmc_mci_read_multiple_sector_callback ( const void *  psector  ) 

Callback function invoked after each sector read during sd_mmc_mci_read_multiple_sector.

Parameters:
psector Pointer to read sector.

Definition at line 240 of file sd_mmc_mci_mem.c.

References SD_MMC_SECTOR_SIZE.

00241 {
00242   U16 data_to_transfer = SD_MMC_SECTOR_SIZE;
00243 
00244   // Transfer read sector to the USB interface.
00245   while (data_to_transfer)
00246   {
00247     while (!Is_usb_in_ready(g_scsi_ep_ms_in))
00248     {
00249       if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_in))
00250          return; // USB Reset
00251     }         
00252 
00253     Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_in);
00254     data_to_transfer = usb_write_ep_txpacket(g_scsi_ep_ms_in, psector,
00255                                              data_to_transfer, &psector);
00256     Usb_ack_in_ready_send(g_scsi_ep_ms_in);
00257   }
00258 }

Bool sd_mmc_mci_removal ( U8  slot  ) 

Tells whether the memory is removable.

Parameters:
slot SD/MMC Slot Card Selected.
Returns:
TRUE if the memory is removable, else FALSE.

Definition at line 174 of file sd_mmc_mci_mem.c.

Referenced by sd_mmc_mci_removal_0(), and sd_mmc_mci_removal_1().

00175 {
00176   return FALSE;
00177 }

Bool sd_mmc_mci_removal_0 ( void   ) 

Instance Declaration for sd_mmc_mci_removal Slot O.

Definition at line 180 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_removal().

00181 {
00182   return sd_mmc_mci_removal(0);
00183 }

Bool sd_mmc_mci_removal_1 ( void   ) 

Instance Declaration for sd_mmc_mci_removal Slot 1.

Definition at line 186 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_removal().

00187 {
00188   return sd_mmc_mci_removal(1);
00189 }

Ctrl_status sd_mmc_mci_test_unit_ready ( U8  slot  ) 

Tests the memory state and initializes the memory if required.

The TEST UNIT READY SCSI primary command allows an application client to poll a LUN until it is ready without having to allocate memory for returned data.

This command may be used to check the media status of LUNs with removable media.

Parameters:
slot SD/MMC Slot Card Selected.
Returns:
Status.

Definition at line 75 of file sd_mmc_mci_mem.c.

References SD_MMC_INSERTED, Sd_mmc_mci_access_signal_off, Sd_mmc_mci_access_signal_on, sd_mmc_mci_init_done, sd_mmc_mci_mem_check(), sd_mmc_mci_presence_status, SD_MMC_REMOVED, and SD_MMC_REMOVING.

Referenced by sd_mmc_mci_test_unit_ready_0(), and sd_mmc_mci_test_unit_ready_1().

00076 {
00077   if (slot > MCI_LAST_SLOTS) return CTRL_FAIL;
00078 
00079   Sd_mmc_mci_access_signal_on();
00080   switch (sd_mmc_mci_presence_status[slot])
00081   {
00082     case SD_MMC_REMOVED:
00083       sd_mmc_mci_init_done[slot] = FALSE;
00084       if (OK == sd_mmc_mci_mem_check(slot))
00085       {
00086         sd_mmc_mci_presence_status[slot] = SD_MMC_INSERTED;
00087         Sd_mmc_mci_access_signal_off();
00088         return CTRL_BUSY;
00089       }
00090       Sd_mmc_mci_access_signal_off();
00091       return CTRL_NO_PRESENT;
00092 
00093     case SD_MMC_INSERTED:
00094       if (OK != sd_mmc_mci_mem_check(slot))
00095       {
00096         sd_mmc_mci_presence_status[slot] = SD_MMC_REMOVING;
00097         sd_mmc_mci_init_done[slot] = FALSE;
00098         Sd_mmc_mci_access_signal_off();
00099         return CTRL_BUSY;
00100       }
00101       Sd_mmc_mci_access_signal_off();
00102       return CTRL_GOOD;
00103 
00104     case SD_MMC_REMOVING:
00105       sd_mmc_mci_presence_status[slot] = SD_MMC_REMOVED;
00106       Sd_mmc_mci_access_signal_off();
00107       return CTRL_NO_PRESENT;
00108 
00109     default:
00110       sd_mmc_mci_presence_status[slot] = SD_MMC_REMOVED;
00111       Sd_mmc_mci_access_signal_off();
00112       return CTRL_BUSY;
00113   }
00114 }

Ctrl_status sd_mmc_mci_test_unit_ready_0 ( void   ) 

Instance Declaration for sd_mmc_mci_test_unit_ready Slot O.

Definition at line 117 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_test_unit_ready().

00118 {
00119    return sd_mmc_mci_test_unit_ready(0);
00120 }

Ctrl_status sd_mmc_mci_test_unit_ready_1 ( void   ) 

Instance Declaration for sd_mmc_mci_test_unit_ready Slot 1.

Definition at line 123 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_test_unit_ready().

00124 {
00125    return sd_mmc_mci_test_unit_ready(1);
00126 }

Ctrl_status sd_mmc_mci_usb_read_10 ( U8  slot,
U32  addr,
U16  nb_sector 
)

Tranfers data from the memory to USB.

Parameters:
slot SD/MMC Slot Card Selected.
addr Address of first memory sector to read.
nb_sector Number of sectors to transfer.
Returns:
Status.

Definition at line 204 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, Sd_mmc_mci_access_signal_on, sd_mmc_mci_dma_read_open(), sd_mmc_mci_mem_check(), sd_mmc_mci_read_close(), and sd_mmc_mci_read_multiple_sector().

Referenced by sd_mmc_mci_usb_read_10_0(), and sd_mmc_mci_usb_read_10_1().

00205 {
00206    Sd_mmc_mci_access_signal_on();
00207 
00208    if( !sd_mmc_mci_mem_check(slot) )
00209    {
00210      Sd_mmc_mci_access_signal_off();
00211      return CTRL_NO_PRESENT;
00212    }
00213 
00214    if( !sd_mmc_mci_dma_read_open(slot, addr, NULL, nb_sector) )
00215      return CTRL_FAIL;
00216 
00217    if( !sd_mmc_mci_read_multiple_sector(slot, nb_sector) )
00218      return CTRL_FAIL;
00219 
00220    if( !sd_mmc_mci_read_close(slot) )
00221      return CTRL_FAIL;
00222 
00223    Sd_mmc_mci_access_signal_off();
00224    return CTRL_GOOD;
00225 }

Ctrl_status sd_mmc_mci_usb_read_10_0 ( U32  addr,
U16  nb_sector 
)

Instance Declaration for sd_mmc_mci_usb_read_10 Slot O.

Definition at line 228 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_usb_read_10().

00229 {
00230   return sd_mmc_mci_usb_read_10(0, addr, nb_sector);
00231 }

Ctrl_status sd_mmc_mci_usb_read_10_1 ( U32  addr,
U16  nb_sector 
)

Instance Declaration for sd_mmc_mci_usb_read_10 Slot 1.

Definition at line 234 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_usb_read_10().

00235 {
00236   return sd_mmc_mci_usb_read_10(1, addr, nb_sector);
00237 }

Ctrl_status sd_mmc_mci_usb_write_10 ( U8  slot,
U32  addr,
U16  nb_sector 
)

Tranfers data from USB to the memory.

Parameters:
slot SD/MMC Slot Card Selected.
addr Address of first memory sector to write.
nb_sector Number of sectors to transfer.
Returns:
Status.

Definition at line 261 of file sd_mmc_mci_mem.c.

References Sd_mmc_mci_access_signal_off, Sd_mmc_mci_access_signal_on, sd_mmc_mci_dma_write_open(), sd_mmc_mci_mem_check(), sd_mmc_mci_write_close(), and sd_mmc_mci_write_multiple_sector().

Referenced by sd_mmc_mci_usb_write_10_0(), and sd_mmc_mci_usb_write_10_1().

00262 {
00263    Sd_mmc_mci_access_signal_on();
00264 
00265    if( !sd_mmc_mci_mem_check(slot) )
00266    {
00267      Sd_mmc_mci_access_signal_off();
00268      return CTRL_NO_PRESENT;
00269    }
00270 
00271    if( !sd_mmc_mci_dma_write_open(slot, addr, NULL, nb_sector) )
00272      return CTRL_FAIL;
00273 
00274    if( !sd_mmc_mci_write_multiple_sector(slot, nb_sector) )
00275      return CTRL_FAIL;
00276 
00277    if( !sd_mmc_mci_write_close(slot) )
00278      return CTRL_FAIL;
00279 
00280    Sd_mmc_mci_access_signal_off();
00281    return CTRL_GOOD;
00282 
00283 }

Ctrl_status sd_mmc_mci_usb_write_10_0 ( U32  addr,
U16  nb_sector 
)

Instance Declaration for sd_mmc_mci_usb_write_10 Slot O.

Definition at line 286 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_usb_write_10().

00287 {
00288   return sd_mmc_mci_usb_write_10(0, addr, nb_sector);
00289 }

Ctrl_status sd_mmc_mci_usb_write_10_1 ( U32  addr,
U16  nb_sector 
)

Instance Declaration for sd_mmc_mci_usb_write_10 Slot 1.

Definition at line 292 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_usb_write_10().

00293 {
00294   return sd_mmc_mci_usb_write_10(1, addr, nb_sector);
00295 }

Bool sd_mmc_mci_wr_protect ( U8  slot  ) 

Returns the write-protection state of the memory.

Parameters:
slot SD/MMC Slot Card Selected.
Returns:
TRUE if the memory is write-protected, else FALSE.
Note:
Only used by removable memories with hardware-specific write protection.

Definition at line 156 of file sd_mmc_mci_mem.c.

References is_sd_mmc_mci_card_protected().

Referenced by sd_mmc_mci_wr_protect_0(), and sd_mmc_wr_mci_protect_1().

00157 {
00158   return is_sd_mmc_mci_card_protected(slot);
00159 }

Bool sd_mmc_mci_wr_protect_0 ( void   ) 

Instance Declaration for sd_mmc_mci_wr_protect Slot O.

Definition at line 162 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_wr_protect().

00163 {
00164   return sd_mmc_mci_wr_protect(0);
00165 }

void sd_mmc_mci_write_multiple_sector_callback ( void *  psector  ) 

Callback function invoked before each sector write during sd_mmc_mci_write_multiple_sector.

Parameters:
psector Pointer to sector to write.

Definition at line 298 of file sd_mmc_mci_mem.c.

References SD_MMC_SECTOR_SIZE.

00299 {
00300   U16 data_to_transfer = SD_MMC_SECTOR_SIZE;
00301 
00302   // Transfer sector to write from the USB interface.
00303   while (data_to_transfer)
00304   {
00305     while (!Is_usb_out_received(g_scsi_ep_ms_out))
00306     {
00307       if(!Is_usb_endpoint_enabled(g_scsi_ep_ms_out))
00308          return; // USB Reset
00309     }         
00310 
00311     Usb_reset_endpoint_fifo_access(g_scsi_ep_ms_out);
00312     data_to_transfer = usb_read_ep_rxpacket(g_scsi_ep_ms_out, psector,
00313                                             data_to_transfer, &psector);
00314     Usb_ack_out_received_free(g_scsi_ep_ms_out);
00315   }
00316 }

Bool sd_mmc_wr_mci_protect_1 ( void   ) 

Instance Declaration for sd_mmc_mci_wr_protect Slot 1.

Definition at line 168 of file sd_mmc_mci_mem.c.

References sd_mmc_mci_wr_protect().

00169 {
00170   return sd_mmc_mci_wr_protect(1);
00171 }


Variable Documentation

U32 g_u32_card_size[MCI_NR_SLOTS]

SD/MMC Card Size per Slot.

Definition at line 68 of file sd_mmc_mci.c.

Referenced by sd_mmc_get_ext_csd(), sd_mmc_mci_get_csd(), and sd_mmc_mci_read_capacity().

Bool sd_mmc_mci_init_done[MCI_NR_SLOTS]

Initialization sequence status per Slot.

Definition at line 64 of file sd_mmc_mci.c.

Referenced by sd_mmc_mci_card_init(), sd_mmc_mci_mem_check(), and sd_mmc_mci_test_unit_ready().

U8 sd_mmc_mci_presence_status[MCI_NR_SLOTS] = {SD_MMC_INSERTED, SD_MMC_INSERTED} [static]

SD/MMC Card Presence status per Slot.

Definition at line 68 of file sd_mmc_mci_mem.c.

Referenced by sd_mmc_mci_test_unit_ready().


Generated on Fri Feb 19 02:23:55 2010 for AVR32 UC3 - SD/MMC Driver by  doxygen 1.5.5