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

📄 sd.h

📁 FS7805 使用SD卡的demo
💻 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中没有用到 暂无法测试,因为SD卡不支持
#define ERASE_WR_BLK_END     33   //                V      R1  //FS7821中没有用到 暂无法测试,因为SD卡不支持
#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中没有用到 暂无法测试,因为SD卡不支持
#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

⌨️ 快捷键说明

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