esp-open-rtos/extras/sdio/sdio_impl.h
Ruslan V. Uss 2994a566a6 Driver for SD/MMC cards (#239)
* Driver for SD/MMC cards

* SDIO: read_register() bug fixed, schematics resized
2016-10-20 10:03:05 +03:00

154 lines
4.4 KiB
C

/*
* Hardware SPI driver for MMC/SD/SDHC cards
*
* Part of esp-open-rtos
* Copyright (C) 2016 Ruslan V. Uss <unclerus@gmail.com>
* BSD Licensed as described in the file LICENSE
*/
#ifndef _EXTRAS_SDIO_IMPL_H_
#define _EXTRAS_SDIO_IMPL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef union
{
uint32_t data;
struct
{
uint16_t reserverd1 :15;
uint8_t vcc_2v7_2v8 :1;
uint8_t vcc_2v8_2v9 :1;
uint8_t vcc_2v9_3v0 :1;
uint8_t vcc_3v0_3v1 :1;
uint8_t vcc_3v1_3v2 :1;
uint8_t vcc_3v2_3v3 :1;
uint8_t vcc_3v3_3v4 :1;
uint8_t vcc_3v4_3v5 :1;
uint8_t vcc_3v5_3v6 :1;
uint8_t reserverd2 :6;
uint8_t ccs :1;
uint8_t busy :1;
} __attribute__((packed)) bits;
} sdio_ocr_t;
typedef union
{
uint8_t data[16];
struct
{
uint8_t manufacturer_id;
char oem_id[2];
char product_name[5];
uint8_t product_rev_minor :4;
uint8_t product_rev_major :4;
uint32_t product_serial;
uint8_t reserved1 :4;
uint8_t date_year_h :4;
uint8_t date_year_l :4;
uint8_t date_month :4;
uint8_t always1 :1;
uint8_t crc :7;
} __attribute__((packed)) bits;
} sdio_cid_t;
typedef union
{
uint8_t data[16];
struct
{
uint8_t reserved1 :6;
uint8_t csd_ver :2;
uint8_t taac;
uint8_t nsac;
uint8_t tran_speed;
uint8_t ccc_high;
uint8_t read_bl_len :4;
uint8_t ccc_low :4;
uint16_t c_size_high :2;
uint8_t reserved2 :2;
uint8_t dsr_imp :1;
uint8_t read_blk_misalign :1;
uint8_t write_blk_misalign :1;
uint8_t read_bl_partial :1;
uint8_t c_size_mid;
uint8_t vdd_r_curr_max :3;
uint8_t vdd_r_curr_min :3;
uint8_t c_size_low :2;
uint8_t c_size_mult_high :2;
uint8_t vdd_w_cur_max :3;
uint8_t vdd_w_curr_min :3;
uint8_t sector_size_high :6;
uint8_t erase_blk_en :1;
uint8_t c_size_mult_low :1;
uint8_t wp_grp_size :7;
uint8_t sector_size_low :1;
uint8_t write_bl_len_high :2;
uint8_t r2w_factor :3;
uint8_t reserved3 :2;
uint8_t wp_grp_enable :1;
uint8_t reserved4 :5;
uint8_t write_partial :1;
uint8_t write_bl_len_low :2;
uint8_t reserved5 :2;
uint8_t file_format :2;
uint8_t tmp_write_protect :1;
uint8_t perm_write_protect :1;
uint8_t copy :1;
uint8_t file_format_grp :1;
uint8_t always1 :1;
uint8_t crc :7;
} __attribute__((packed)) v1;
struct
{
uint8_t reserved1 :6;
uint8_t csd_ver :2;
uint8_t taac;
uint8_t nsac;
uint8_t tran_speed;
uint8_t ccc_high;
uint8_t read_bl_len :4;
uint8_t ccc_low :4;
uint8_t reserved2 :4;
uint8_t dsr_imp :1;
uint8_t read_blk_misalign :1;
uint8_t write_blk_misalign :1;
uint8_t read_bl_partial :1;
uint16_t c_size_high :6;
uint8_t reserved3 :2;
uint8_t c_size_mid;
uint8_t c_size_low;
uint8_t sector_size_high :6;
uint8_t erase_blk_en :1;
uint8_t reserved4 :1;
uint8_t wp_grp_size :7;
uint8_t sector_size_low :1;
uint8_t write_bl_len_high :2;
uint8_t r2w_factor :3;
uint8_t reserved5 :2;
uint8_t wp_grp_enable :1;
uint8_t reserved6 :5;
uint8_t write_partial :1;
uint8_t write_bl_len_low :2;
uint8_t reserved7 :2;
uint8_t file_format :2;
uint8_t tmp_write_protect :1;
uint8_t perm_write_protect :1;
uint8_t copy :1;
uint8_t file_format_grp :1;
uint8_t always1 :1;
uint8_t crc :7;
} __attribute__((packed)) v2;
} sdio_csd_t;
#ifdef __cplusplus
}
#endif
#endif /* _EXTRAS_SDIO_IMPL_H_ */