⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmc.h

📁 最新DSP+ARM双核CPU处理器使用的X-loader源程序
💻 H
字号:
/* * (C) Copyright 2008 * Texas Instruments, <www.ti.com> * Syed Mohammed Khasim <khasim@ti.com> * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation's version 2 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#ifndef MMC_H#define MMC_H#include "mmc_host_def.h"/* Responses */#define RSP_TYPE_NONE	  (RSP_TYPE_NORSP   | CCCE_NOCHECK | CICE_NOCHECK)#define RSP_TYPE_R1	  (RSP_TYPE_LGHT48  | CCCE_CHECK   | CICE_CHECK)#define RSP_TYPE_R1B	  (RSP_TYPE_LGHT48B | CCCE_CHECK   | CICE_CHECK)#define RSP_TYPE_R2	  (RSP_TYPE_LGHT136 | CCCE_CHECK   | CICE_NOCHECK)#define RSP_TYPE_R3	  (RSP_TYPE_LGHT48  | CCCE_NOCHECK | CICE_NOCHECK)#define RSP_TYPE_R4	  (RSP_TYPE_LGHT48  | CCCE_NOCHECK | CICE_NOCHECK)#define RSP_TYPE_R5	  (RSP_TYPE_LGHT48  | CCCE_CHECK   | CICE_CHECK)#define RSP_TYPE_R6	  (RSP_TYPE_LGHT48  | CCCE_CHECK   | CICE_CHECK)#define RSP_TYPE_R7	  (RSP_TYPE_LGHT48  | CCCE_CHECK   | CICE_CHECK)/* All supported commands */#define MMC_CMD0          (INDEX(0)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD1          (INDEX(1)  | RSP_TYPE_R3   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD2          (INDEX(2)  | RSP_TYPE_R2   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD3          (INDEX(3)  | RSP_TYPE_R1   | DP_NO_DATA | DDIR_WRITE)#define MMC_SDCMD3        (INDEX(3)  | RSP_TYPE_R6   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD4          (INDEX(4)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD6          (INDEX(6)  | RSP_TYPE_R1B  | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD7_SELECT   (INDEX(7)  | RSP_TYPE_R1B  | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD7_DESELECT (INDEX(7)  | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD8          (INDEX(8)  | RSP_TYPE_R1   | DP_DATA    | DDIR_READ)#define MMC_SDCMD8        (INDEX(8)  | RSP_TYPE_R7   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD9          (INDEX(9)  | RSP_TYPE_R2   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD12         (INDEX(12) | RSP_TYPE_R1B  | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD13         (INDEX(13) | RSP_TYPE_R1   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD15         (INDEX(15) | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD16         (INDEX(16) | RSP_TYPE_R1   | DP_NO_DATA | DDIR_WRITE)#define MMC_CMD17         (INDEX(17) | RSP_TYPE_R1   | DP_DATA    | DDIR_READ)#define MMC_CMD24         (INDEX(24) | RSP_TYPE_R1   | DP_DATA    | DDIR_WRITE)#define MMC_ACMD6         (INDEX(6)  | RSP_TYPE_R1   | DP_NO_DATA | DDIR_WRITE)#define MMC_ACMD41        (INDEX(41) | RSP_TYPE_R3   | DP_NO_DATA | DDIR_WRITE)#define MMC_ACMD51        (INDEX(51) | RSP_TYPE_R1   | DP_DATA    | DDIR_READ)#define MMC_CMD55         (INDEX(55) | RSP_TYPE_R1   | DP_NO_DATA | DDIR_WRITE)#define MMC_AC_CMD_RCA_MASK     (unsigned int)(0xFFFF << 16)#define MMC_BC_CMD_DSR_MASK     (unsigned int)(0xFFFF << 16)#define MMC_DSR_DEFAULT         (0x0404)#define SD_CMD8_CHECK_PATTERN	(0xAA)#define SD_CMD8_2_7_3_6_V_RANGE	(0x01 << 8)/* Clock Configurations and Macros */#define MMC_CLOCK_REFERENCE		(96)#define MMC_RELATIVE_CARD_ADDRESS	(0x1234)#define MMC_INIT_SEQ_CLK		(MMC_CLOCK_REFERENCE * 1000 / 80)#define MMC_400kHz_CLK			(MMC_CLOCK_REFERENCE * 1000 / 400)#define CLKDR(r, f, u)			((((r)*100) / ((f)*(u))) + 1)#define CLKD(f, u)			(CLKDR(MMC_CLOCK_REFERENCE, f, u))#define MMC_OCR_REG_ACCESS_MODE_MASK			(0x3 << 29)#define MMC_OCR_REG_ACCESS_MODE_BYTE    		(0x0 << 29)#define MMC_OCR_REG_ACCESS_MODE_SECTOR  		(0x2 << 29)#define MMC_OCR_REG_HOST_CAPACITY_SUPPORT_MASK		(0x1 << 30)#define MMC_OCR_REG_HOST_CAPACITY_SUPPORT_BYTE		(0x0 << 30)#define MMC_OCR_REG_HOST_CAPACITY_SUPPORT_SECTOR	(0x1 << 30)#define MMC_SD2_CSD_C_SIZE_LSB_MASK         (0xFFFF)#define MMC_SD2_CSD_C_SIZE_MSB_MASK         (0x003F)#define MMC_SD2_CSD_C_SIZE_MSB_OFFSET       (16)#define MMC_CSD_C_SIZE_LSB_MASK             (0x0003)#define MMC_CSD_C_SIZE_MSB_MASK             (0x03FF)#define MMC_CSD_C_SIZE_MSB_OFFSET           (2)#define MMC_CSD_TRAN_SPEED_UNIT_MASK        (0x07 << 0)#define MMC_CSD_TRAN_SPEED_FACTOR_MASK      (0x0F << 3)#define MMC_CSD_TRAN_SPEED_UNIT_100MHZ      (0x3 << 0)#define MMC_CSD_TRAN_SPEED_FACTOR_1_0       (0x01 << 3)#define MMC_CSD_TRAN_SPEED_FACTOR_8_0       (0x0F << 3)typedef struct {	unsigned not_used:1;	unsigned crc:7;	unsigned ecc:2;	unsigned file_format:2;	unsigned tmp_write_protect:1;	unsigned perm_write_protect:1;	unsigned copy:1;	unsigned file_format_grp:1;	unsigned content_prot_app:1;	unsigned reserved_1:4;	unsigned write_bl_partial:1;	unsigned write_bl_len:4;	unsigned r2w_factor:3;	unsigned default_ecc:2;	unsigned wp_grp_enable:1;	unsigned wp_grp_size:5;	unsigned erase_grp_mult:5;	unsigned erase_grp_size:5;	unsigned c_size_mult:3;	unsigned vdd_w_curr_max:3;	unsigned vdd_w_curr_min:3;	unsigned vdd_r_curr_max:3;	unsigned vdd_r_curr_min:3;	unsigned c_size_lsb:2;	unsigned c_size_msb:10;	unsigned reserved_2:2;	unsigned dsr_imp:1;	unsigned read_blk_misalign:1;	unsigned write_blk_misalign:1;	unsigned read_bl_partial:1;	unsigned read_bl_len:4;	unsigned ccc:12;	unsigned tran_speed:8;	unsigned nsac:8;	unsigned taac:8;	unsigned reserved_3:2;	unsigned spec_vers:4;	unsigned csd_structure:2;} mmc_csd_reg_t;/* csd for sd2.0 */typedef struct {	unsigned not_used:1;	unsigned crc:7;	unsigned reserved_1:2;	unsigned file_format:2;	unsigned tmp_write_protect:1;	unsigned perm_write_protect:1;	unsigned copy:1;	unsigned file_format_grp:1;	unsigned reserved_2:5;	unsigned write_bl_partial:1;	unsigned write_bl_len:4;	unsigned r2w_factor:3;	unsigned reserved_3:2;	unsigned wp_grp_enable:1;	unsigned wp_grp_size:7;	unsigned sector_size:7;	unsigned erase_blk_len:1;	unsigned reserved_4:1;	unsigned c_size_lsb:16;	unsigned c_size_msb:6;	unsigned reserved_5:6;	unsigned dsr_imp:1;	unsigned read_blk_misalign:1;	unsigned write_blk_misalign:1;	unsigned read_bl_partial:1;	unsigned read_bl_len:4;	unsigned ccc:12;	unsigned tran_speed:8;	unsigned nsac:8;	unsigned taac:8;	unsigned reserved_6:6;	unsigned csd_structure:2;} mmc_sd2_csd_reg_t;/* extended csd - 512 bytes long */typedef struct {	unsigned char reserved_1[181];	unsigned char erasedmemorycontent;	unsigned char reserved_2;	unsigned char buswidthmode;	unsigned char reserved_3;	unsigned char highspeedinterfacetiming;	unsigned char reserved_4;	unsigned char powerclass;	unsigned char reserved_5;	unsigned char commandsetrevision;	unsigned char reserved_6;	unsigned char commandset;	unsigned char extendedcsdrevision;	unsigned char reserved_7;	unsigned char csdstructureversion;	unsigned char reserved_8;	unsigned char cardtype;	unsigned char reserved_9[3];	unsigned char powerclass_52mhz_1_95v;	unsigned char powerclass_26mhz_1_95v;	unsigned char powerclass_52mhz_3_6v;	unsigned char powerclass_26mhz_3_6v;	unsigned char reserved_10;	unsigned char minreadperf_4b_26mhz;	unsigned char minwriteperf_4b_26mhz;	unsigned char minreadperf_8b_26mhz_4b_52mhz;	unsigned char minwriteperf_8b_26mhz_4b_52mhz;	unsigned char minreadperf_8b_52mhz;	unsigned char minwriteperf_8b_52mhz;	unsigned char reserved_11;	unsigned int sectorcount;	unsigned char reserved_12[288];	unsigned char supportedcommandsets;	unsigned char reserved_13[7];} mmc_extended_csd_reg_t;/* mmc sd responce */typedef struct {	unsigned int ocr;} mmc_resp_r3;typedef struct {	unsigned short cardstatus;	unsigned short newpublishedrca;} mmc_resp_r6;extern mmc_card_data mmc_dev;unsigned char mmc_lowlevel_init(void);unsigned char mmc_send_command(unsigned int cmd, unsigned int arg,			       unsigned int *response);unsigned char mmc_setup_clock(unsigned int iclk, unsigned short clkd);unsigned char mmc_set_opendrain(unsigned char state);unsigned char mmc_read_data(unsigned int *output_buf);#endif /* MMC_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -