Definition in file sd_mmc_spi_mem.h.
#include "conf_access.h"
#include "ctrl_access.h"
Go to the source code of this file.
Defines | |
#define | SD_MMC_INSERTED 1 |
#define | SD_MMC_REMOVED 0 |
#define | SD_MMC_REMOVING 2 |
Functions | |
Ctrl_status | sd_mmc_spi_mem_2_ram (U32 addr, void *ram) |
This fonction reads 1 sector from SD/MMC to internal ram buffer. | |
void | sd_mmc_spi_mem_init (void) |
This function initializes the hw/sw resources required to drive the SD_MMC_SPI. | |
Ctrl_status | sd_mmc_spi_ram_2_mem (U32 addr, const void *ram) |
This fonction initialises the memory for a write operation from ram buffer to SD/MMC (1 sector). | |
Ctrl_status | sd_mmc_spi_read_capacity (U32 *u32_nb_sector) |
This function gives the address of the last valid sector. | |
Bool | sd_mmc_spi_removal (void) |
This function tells if the memory has been removed or not. | |
Ctrl_status | sd_mmc_spi_test_unit_ready (void) |
This function tests the state of the SD_MMC memory and sends it to the Host. | |
Ctrl_status | sd_mmc_spi_usb_read_10 (U32 addr, U16 nb_sector) |
This function performs a read operation of n sectors from a given address on. | |
Ctrl_status | sd_mmc_spi_usb_write_10 (U32 addr, U16 nb_sector) |
This fonction initialises the SD/MMC memory for a write operation. | |
Bool | sd_mmc_spi_wr_protect (void) |
This function returns the write protected status of the memory. |
#define SD_MMC_INSERTED 1 |
#define SD_MMC_REMOVED 0 |
#define SD_MMC_REMOVING 2 |
Ctrl_status sd_mmc_spi_mem_2_ram | ( | U32 | addr, | |
void * | ram | |||
) |
This fonction reads 1 sector from SD/MMC to internal ram buffer.
DATA FLOW is: SD/MMC => RAM
(sector = 512B)
addr | Sector address to read | |
ram | Ram buffer pointer |
Definition at line 304 of file sd_mmc_spi_mem.c.
References Sd_mmc_spi_access_signal_off, Sd_mmc_spi_access_signal_on, sd_mmc_spi_check_presence(), sd_mmc_spi_init_done, sd_mmc_spi_mem_init(), sd_mmc_spi_read_close(), sd_mmc_spi_read_open(), sd_mmc_spi_read_sector_to_ram(), and sd_mmc_spi_write_close().
00305 { 00306 Sd_mmc_spi_access_signal_on(); 00307 sd_mmc_spi_check_presence(); 00308 00309 if (sd_mmc_spi_init_done == FALSE) 00310 { 00311 sd_mmc_spi_mem_init(); 00312 } 00313 00314 if (sd_mmc_spi_init_done == TRUE) 00315 { 00316 sd_mmc_spi_read_open(addr); 00317 if (KO == sd_mmc_spi_read_sector_to_ram(ram)) 00318 { 00319 sd_mmc_spi_write_close(); 00320 Sd_mmc_spi_access_signal_off(); 00321 return CTRL_NO_PRESENT; 00322 } 00323 sd_mmc_spi_read_close(); 00324 Sd_mmc_spi_access_signal_off(); 00325 return CTRL_GOOD; 00326 } 00327 Sd_mmc_spi_access_signal_off(); 00328 00329 return CTRL_NO_PRESENT; 00330 }
void sd_mmc_spi_mem_init | ( | void | ) |
This function initializes the hw/sw resources required to drive the SD_MMC_SPI.
/
Definition at line 81 of file sd_mmc_spi_mem.c.
References sd_mmc_spi_internal_init().
Referenced by sd_mmc_spi_mem_2_ram(), sd_mmc_spi_ram_2_mem(), sd_mmc_spi_read_capacity(), sd_mmc_spi_usb_read_10(), and sd_mmc_spi_usb_write_10().
00082 { 00083 sd_mmc_spi_internal_init(); // Restart Init of SD/MMC card after previous first init 00084 }
Ctrl_status sd_mmc_spi_ram_2_mem | ( | U32 | addr, | |
const void * | ram | |||
) |
This fonction initialises the memory for a write operation from ram buffer to SD/MMC (1 sector).
DATA FLOW is: RAM => SD/MMC
(sector = 512B)
addr | Sector address to write | |
ram | Ram buffer pointer |
Definition at line 346 of file sd_mmc_spi_mem.c.
References Sd_mmc_spi_access_signal_off, Sd_mmc_spi_access_signal_on, sd_mmc_spi_check_presence(), sd_mmc_spi_init_done, sd_mmc_spi_mem_init(), sd_mmc_spi_write_close(), sd_mmc_spi_write_open(), and sd_mmc_spi_write_sector_from_ram().
00347 { 00348 Sd_mmc_spi_access_signal_on(); 00349 sd_mmc_spi_check_presence(); 00350 00351 if (sd_mmc_spi_init_done == FALSE) 00352 { 00353 sd_mmc_spi_mem_init(); 00354 } 00355 00356 if (sd_mmc_spi_init_done == TRUE) 00357 { 00358 sd_mmc_spi_write_open(addr); 00359 if (KO == sd_mmc_spi_write_sector_from_ram(ram)) 00360 { 00361 sd_mmc_spi_write_close(); 00362 Sd_mmc_spi_access_signal_off(); 00363 return CTRL_NO_PRESENT; 00364 } 00365 sd_mmc_spi_write_close(); 00366 Sd_mmc_spi_access_signal_off(); 00367 return CTRL_GOOD; 00368 } 00369 Sd_mmc_spi_access_signal_off(); 00370 00371 return CTRL_NO_PRESENT; 00372 }
Ctrl_status sd_mmc_spi_read_capacity | ( | U32 * | u32_nb_sector | ) |
This function gives the address of the last valid sector.
*u32_nb_sector | number of sector (sector = 512B). OUT |
Definition at line 152 of file sd_mmc_spi_mem.c.
References Sd_mmc_spi_access_signal_off, Sd_mmc_spi_access_signal_on, sd_mmc_spi_init_done, sd_mmc_spi_last_block_address, and sd_mmc_spi_mem_init().
00153 { 00154 // sd_mmc_spi_check_presence(); // ommited because creates interferences with "sd_mmc_spi_test_unit_ready()" function 00155 Sd_mmc_spi_access_signal_on(); 00156 00157 if (sd_mmc_spi_init_done == FALSE) 00158 { 00159 sd_mmc_spi_mem_init(); 00160 } 00161 00162 if (sd_mmc_spi_init_done == TRUE) 00163 { 00164 *u32_nb_sector = sd_mmc_spi_last_block_address+1; 00165 Sd_mmc_spi_access_signal_off(); 00166 return CTRL_GOOD; 00167 } 00168 else 00169 { 00170 Sd_mmc_spi_access_signal_off(); 00171 return CTRL_NO_PRESENT; 00172 } 00173 }
Bool sd_mmc_spi_removal | ( | void | ) |
This function tells if the memory has been removed or not.
FALSE -> The memory isn't removed /
Definition at line 196 of file sd_mmc_spi_mem.c.
00197 { 00198 return FALSE; 00199 // return ((OK == sd_mmc_spi_check_presence()) ? FALSE : TRUE); 00200 }
Ctrl_status sd_mmc_spi_test_unit_ready | ( | void | ) |
This function tests the state of the SD_MMC memory and sends it to the Host.
For a PC, this device is seen as a removable media Before indicating any modification of the status of the media (GOOD->NO_PRESENT or vice-versa), the function must return the BUSY data to make the PC accepting the change
Definition at line 88 of file sd_mmc_spi_mem.c.
References SD_MMC_INSERTED, SD_MMC_REMOVED, SD_MMC_REMOVING, Sd_mmc_spi_access_signal_off, Sd_mmc_spi_access_signal_on, sd_mmc_spi_init_done, sd_mmc_spi_mem_check(), and sd_mmc_spi_presence_status.
00089 { 00090 Sd_mmc_spi_access_signal_on(); 00091 switch (sd_mmc_spi_presence_status) 00092 { 00093 case SD_MMC_REMOVED: 00094 sd_mmc_spi_init_done = FALSE; 00095 if (OK == sd_mmc_spi_mem_check()) 00096 { 00097 sd_mmc_spi_presence_status = SD_MMC_INSERTED; 00098 Sd_mmc_spi_access_signal_off(); 00099 return CTRL_BUSY; 00100 } 00101 Sd_mmc_spi_access_signal_off(); 00102 return CTRL_NO_PRESENT; 00103 00104 case SD_MMC_INSERTED: 00105 if (OK != sd_mmc_spi_mem_check()) 00106 { 00107 sd_mmc_spi_presence_status = SD_MMC_REMOVING; 00108 sd_mmc_spi_init_done = FALSE; 00109 Sd_mmc_spi_access_signal_off(); 00110 return CTRL_BUSY; 00111 } 00112 Sd_mmc_spi_access_signal_off(); 00113 return CTRL_GOOD; 00114 00115 case SD_MMC_REMOVING: 00116 sd_mmc_spi_presence_status = SD_MMC_REMOVED; 00117 Sd_mmc_spi_access_signal_off(); 00118 return CTRL_NO_PRESENT; 00119 00120 default: 00121 sd_mmc_spi_presence_status = SD_MMC_REMOVED; 00122 Sd_mmc_spi_access_signal_off(); 00123 return CTRL_BUSY; 00124 } 00125 00126 /* 00127 if (OK==sd_mmc_spi_mem_check()) 00128 { 00129 if (sd_mmc_spi_status_changed == FALSE) 00130 { 00131 sd_mmc_spi_status_changed = TRUE; 00132 return CTRL_BUSY; // BUSY token must be returned to indicate a status change ! 00133 } 00134 else 00135 return CTRL_GOOD; // the 2nd time the host will ask for unit_ready, we can answer GOOD if we have returned BUSY first ! 00136 } 00137 else 00138 { 00139 if (sd_mmc_spi_status_changed == TRUE) 00140 { 00141 sd_mmc_spi_status_changed = FALSE; 00142 return CTRL_BUSY; // BUSY token must be returned to indicate a status change ! 00143 } 00144 else 00145 return CTRL_NO_PRESENT; 00146 } 00147 */ 00148 }
Ctrl_status sd_mmc_spi_usb_read_10 | ( | U32 | addr, | |
U16 | nb_sector | |||
) |
This function performs a read operation of n sectors from a given address on.
(sector = 512B)
DATA FLOW is: SD_MMC => USB
addr | Sector address to start the read from | |
nb_sector | Number of sectors to transfer |
Definition at line 213 of file sd_mmc_spi_mem.c.
References Sd_mmc_spi_access_signal_off, Sd_mmc_spi_access_signal_on, sd_mmc_spi_init_done, sd_mmc_spi_mem_init(), sd_mmc_spi_read_close(), sd_mmc_spi_read_multiple_sector(), and sd_mmc_spi_read_open().
00214 { 00215 Bool status; 00216 00217 if (sd_mmc_spi_init_done == FALSE) 00218 { 00219 sd_mmc_spi_mem_init(); 00220 } 00221 00222 if (sd_mmc_spi_init_done == TRUE) 00223 { 00224 Sd_mmc_spi_access_signal_on(); 00225 sd_mmc_spi_read_open(addr); 00226 status = sd_mmc_spi_read_multiple_sector(nb_sector); 00227 sd_mmc_spi_read_close(); 00228 Sd_mmc_spi_access_signal_off(); 00229 if (status == OK) 00230 return CTRL_GOOD; 00231 else 00232 return CTRL_NO_PRESENT; 00233 } 00234 else 00235 return CTRL_NO_PRESENT; 00236 }
Ctrl_status sd_mmc_spi_usb_write_10 | ( | U32 | addr, | |
U16 | nb_sector | |||
) |
This fonction initialises the SD/MMC memory for a write operation.
DATA FLOW is: USB => SD_MMC
(sector = 512B)
addr | Sector address to start write | |
nb_sector | Number of sectors to transfer |
Definition at line 256 of file sd_mmc_spi_mem.c.
References Sd_mmc_spi_access_signal_off, Sd_mmc_spi_access_signal_on, sd_mmc_spi_init_done, sd_mmc_spi_mem_init(), sd_mmc_spi_write_close(), sd_mmc_spi_write_multiple_sector(), and sd_mmc_spi_write_open().
00257 { 00258 Bool status; 00259 00260 if (sd_mmc_spi_init_done == FALSE) 00261 { 00262 sd_mmc_spi_mem_init(); 00263 } 00264 00265 if (sd_mmc_spi_init_done == TRUE) 00266 { 00267 Sd_mmc_spi_access_signal_on(); 00268 sd_mmc_spi_write_open(addr); 00269 status = sd_mmc_spi_write_multiple_sector(nb_sector); 00270 sd_mmc_spi_write_close(); 00271 Sd_mmc_spi_access_signal_off(); 00272 if (status == OK) 00273 return CTRL_GOOD; 00274 else 00275 return CTRL_NO_PRESENT; 00276 } 00277 else 00278 return CTRL_NO_PRESENT; 00279 }
Bool sd_mmc_spi_wr_protect | ( | void | ) |
This function returns the write protected status of the memory.
Only used by memory removal with a HARDWARE SPECIFIC write protected detection ! The user must unplug the memory to change this write protected status, which cannot be for a SD_MMC.
Definition at line 185 of file sd_mmc_spi_mem.c.