?? sd.h
字號:
#ifndef _sd_h_
#define _sd_h_
#define BYTES_PER_SECTOR_SHIFT 9
//SD Card------------------------------------------------------------------------------------------------------------
#define MAX_CMD_LEN 6
#define MAX_RESP_LEN 17 // Max response length = 136 bits
#define RSP_LEN 6
#define LONG_RSP_LEN 17
#define CARD_CMD_START 0x40
#define CARD_PWRUP_FINISH 0x80
#define OPERATION_VOL_RANGE 0x00FF0000
#define GOOD_CRC16_STS 0x02
/* SD Cmd Type*/
#define SD_CMD_ONLY 1
#define SD_CMD_SHORT_RSP 2
#define SD_CMD_LONG_RSP 3
#define SD_CMD_TX_DATA 4
#define SD_CMD_TX_DATA_ONLY 5
#define SD_CMD_RX_DATA 6
#define SD_CMD_RX_DATA_ONLY 7
#define IDLE_STATE 0
#define READY_STATE 1
#define IDENTIFY_STATE 2
#define STANDBY_STATE 3
#define TRANSFER_STATE 4
#define DATA_STATE 5
#define RECEIVE_STATE 6
#define PRGROGAM_STATE 7
#define DISCONNECT_STATE 8
#define BUS_WIDTH_1BIT 0x00
#define BUS_WIDTH_4BIT 0x02
// Command Name Index MMC-3.1 MMC-4.0 SD-1.01 Resp
#define GO_IDLE_STATE 0 // V V V -
#define SEND_OP_COND 1 // V V R3 (OCR) //僅對MMC有效
#define ALL_SEND_CID 2 // V V V R2
#define SEND_RELATIVE_ADDR 3 // R1 R1 R6 See SdGetRespType()
#define SET_DSR 4 // V V V - //FS7821中沒有用到 測試通過
#define SWITCH 6 // V R1 //僅對MMC卡有效
#define SELECT_CARD 7 // V V V R1
#define SEND_EXT_CSD 8 // V R1 //僅對MMC卡有效 測試通過
#define SEND_CSD 9 // V V V R2
#define SEND_CID 10 // V V V R2 //FS7821中沒有用到 測試通過
#define READ_DAT_UNTIL_STOP 11 // V V R1 //FS7821中沒有用到 僅對MMC有效
#define STOP_TRANS 12 // V V V R1 //
#define SEND_STATUS 13 // V V V R1
#define GO_INACTIVE_STATE 15 // V V V - //FS7821中沒有用到 測試通過
#define SET_BLOCK_LEN 16 // V V V R1 //FS7821中沒有用到,已測試通過
#define READ_BLOCK 17 // V V V R1
#define READ_MUL_BLOCK 18 // V V V R1 //
#define WRITE_DAT_UNTIL_STOP 20 // V V R1 //FS7821中沒有用到 僅對MMC有效
#define SET_BLOCK_COUNT 23 // V V R1 //FS7821中沒有用到 僅對MMC有效
#define WRITE_BLOCK 24 // V V V R1
#define WRITE_MUL_BLOCK 25 // V V V R1 //
#define PROGRAM_CID 26 // V V R1 //FS7821中沒有用到,僅供卡制造商使用
#define PROGRAM_CSD 27 // V V V R1 //FS7821中沒有用到
#define SET_WRITE_PROT 28 // V V V R1 //FS7821中沒有用到 測試通過
#define CLR_WRITE_PROT 29 // V V V R1 //FS7821中沒有用到 測試通過
#define SEND_WRITE_PROT 30 // V V V R1 //FS7821中沒有用到 測試通過
#define ERASE_WR_BLK_START 32 // V R1 //FS7821中沒有用到 暫無法測試,因?yàn)镾D卡不支持
#define ERASE_WR_BLK_END 33 // V R1 //FS7821中沒有用到 暫無法測試,因?yàn)镾D卡不支持
#define ERASE_GROUP_START 35 // V V R1 //FS7821中沒有用到 僅對MMC有效
#define ERASE_GROUP_END 36 // V V R1 //FS7821中沒有用到 僅對MMC有效
#define ERASE 38 // V V V R1 //FS7821中沒有用到 暫無法測試,因?yàn)镾D卡不支持
#define FAST_IO 39 // V V R4 //FS7821中沒有用到 僅對MMC有效
#define GO_IRQ_STATE 40 // V V R5 //FS7821中沒有用到 僅對MMC有效
#define LOCK_UNLOCK 42 // V V V R1 //FS7821中沒有用到
#define APP_CMD 55 // V V V R1 //僅對SD卡有效
#define GEN_CMD 56 // V V V R1 //FS7821中沒有用到
// ACMD Name Index MMC-3.1 MMC-4.0 SD-1.01 Resp
#define SET_BUS_WIDTH 6 // V R1 //僅對SD卡有效
#define SEND_SD_STATUS 13 // V R1 //FS7821中沒有用到
#define SEND_NUM_WR_BLOCKS 22 // V R1 //FS7821中沒有用到
#define SET_WR_BLK_ERASE_CNT 23 // V R1 //FS7821中沒有用到
#define SD_SEND_OP_COND 41 // V R3 (OCR)//僅對SD卡有效
#define SET_CLR_CARD_DETECT 42 // V R1 //FS7821中沒有用到
#define SEND_SCR 51 // V R1 //FS7821中沒有用到
#define TYPE_RESP_NO 0
#define TYPE_RESP_R1 1
#define TYPE_RESP_R2 2
#define TYPE_RESP_R3 3
#define TYPE_RESP_R4 4
#define TYPE_RESP_R5 5
#define TYPE_RESP_R6 6
//----------------------------------------------------------------------------
// Status code 0x00 ~ 0x3f for storage media
//----------------------------------------------------------------------------
#define STATUS_SUCCESS 0x00
#define STATUS_PARAM_ERROR 0x01
#define STATUS_FLASH_ERROR 0x02
#define STATUS_WRITE_PROTECT 0x03
#define STATUS_CIS_ERROR 0x04
#define STATUS_BLOCK_ERROR 0x05
#define STATUS_DATA_ERROR 0x06
#define STATUS_ECC_1ERROR 0x07
#define STATUS_ECC_2ERROR 0x08
#define STATUS_NO_BLOCK 0x09
#define STATUS_INVALID_BLOCK 0x0a
#define STATUS_NO_MEDIA 0x0b
#define STATUS_MEDIA_CHANGE 0x0c
#define STATUS_MEDIA_BUSY 0x0d
#define STATUS_AUTH_ERROR 0x0e
#define STATUS_CMD_ERROR 0x0f
typedef enum {CARD_SD, CARD_MMC} TCARD_TYPE;
extern BYTE idata SdCmdBuf[5];
#define SdCtrlReset() (SW_RST|=bmSDMI_RST)
#define SdCardExist() (SDMI_ST&bmSD_EXIST)
void SdInit();
void SdLowClk();
void SdHiClk();
void SdStopClk();
void SdWaitCard();
BYTE SdGetRespType(BYTE CmdIndex);
STATUS SdSendCmd(BYTE CmdIndex, BYTE *CmdBuf);
STATUS SdSendAppCmd(BYTE AppCmdIndex, BYTE *CmdBuf);
STATUS SdReset();
STATUS SdCardDetect();
STATUS SdGoIdentifyState();
STATUS SdGoStandbyState();
STATUS SdReadCSD();
STATUS SdGoTransferState();
STATUS SdChangeBusWidth(BYTE busWidth); //busWidth只能取值1或4
STATUS SdReadExtCSD();
STATUS SdStopCmd();
STATUS SdWaitCmd();
STATUS SdSetBlockLen(INT16U len);
STATUS SdReadOneSector();
STATUS SdReadNextSectorData();
STATUS SdReadSector();
STATUS SdReadNextSector();
STATUS SdWriteOneSector();
STATUS SdWriteNextSector();
STATUS SdWriteSector();
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -