/****************************************************************************** | |
* | |
* mmc_decode_cid() and sd_decode_csd() | |
* | |
* analyse the meta data of an SD-card to read its capacity and some other properties. | |
* | |
* CID and CSD Analysis borrowed from the Linux kernel. | |
* | |
******************************************************************************/ | |
#ifndef SDPS_INFO_H_ | |
#define SDPS_INFO_H_ 1 | |
#include <stdint.h> | |
struct mmc_cid { | |
uint32_t manfid; | |
char prod_name[8]; | |
uint32_t serial; | |
uint16_t oemid; | |
uint16_t year; | |
uint8_t hwrev; | |
uint8_t fwrev; | |
uint8_t month; | |
}; | |
struct mmc_csd { | |
volatile uint64_t capacity_bytes; | |
uint32_t sd_last_block_address; | |
uint8_t mmca_vsn; | |
uint16_t erase_size; | |
uint8_t spare; | |
uint16_t cmdclass; | |
uint16_t tacc_clks; | |
int32_t erase_shift; | |
uint32_t tacc_ns; | |
uint32_t r2w_factor; | |
uint32_t max_dtr; | |
uint32_t read_blkbits; | |
uint32_t write_blkbits; | |
uint32_t capacity; | |
uint32_t pref_erase; | |
uint32_t read_partial : 1, | |
read_misalign : 1, | |
write_partial : 1, | |
write_misalign : 1; | |
}; | |
extern struct mmc_cid myCID; | |
extern struct mmc_csd myCSD; | |
int mmc_decode_cid( const struct mmc_csd *pxCSD, struct mmc_cid *pxCID, uint32_t *raw_data ); | |
int sd_decode_csd( struct mmc_csd *pxCSD, uint32_t *ulResponse ); | |
#endif /* SDPS_INFO_H_ */ |