📄 sdi.h
字号:
#ifndef __SD_H__
#define __SD_H__
#ifdef __cplusplus
extern "C" {
#endif
#define Idle_State 0
#define Ready_State 1
#define Identification_State 2
#define StandBy_State 3
#define Transmit_State 4
#define Data_State 5
#define Receive_State 6
#define Progress_State 7
#define Dis_State 8
#define PowerUp_State 9
#define SDIO_SD_TYPE 0
#define SDIO_MMC_TYPE 1
#define SDIO_TYPE_A 0
#define SDIO_TYPE_B 1
#define SDIO_NO_RESP 0
#define SDIO_WAIT_RESP 1
#define SDIO_SHORT_RESP 0
#define SDIO_LONG_RESP 1
#define SDIO_WITHOUT_DATA 0
#define SDIO_WITH_DATA 1
//rSDICON
#define CLOCK_TYPE (1<<5)
#define BYTE_ORDER (1<<4)
#define ENCLK (1<<0)
//rSDICSTA
#define RESP_INDEX (0xFF<<0)
#define DATA_TIMEOUT (1<<5)
#define CMD_ON (1<<8)
#define RESP_END (1<<9)
#define CMD_TOUT (1<<10)
#define CMD_END (1<<11)
#define RESP_CRC_FAIL (1<<12)
//rSDIDSTA
#define CRC_STAT_FAIL (0x1<<7)
#define RECEIVE_CRC_FAIL (1<<6)
#define DATA_TOUT (1<<5)
#define DATA_FINISH (1<<4)
#define BUSY_FINISH (1<<3)
//SDIDCON
#define BLOCK_NUM (0xFFF<<0)
#define DATA_TRANSMIT_MODE (3<<12)
#define ONLYBUSY_CHECK (1<<12)
#define DATA_RECEIVE_MODE (1<<13)
#define DATA_TRANSMIT_START (1<<14)
#define DMA_EN (1<<15)
#define WIDE_BUS_EN (1<<16)
#define WIDE_BUS_DIS (0<<16)
#define STREAM_TRANSFER (0<<17)
#define BLOCK_TRANSFER (1<<17)
#define BUSY_AFTER_CMD (1<<18)
#define RCV_AFTER_CMD (1<<19)
#define TRANS_AFTER_RESP (1<<20)
#define INT_PERIOD_TYPE (1<<21)
#define BYTE_TRANSFER (0<<22)
#define HALFWORD_TRANSFER (1<<22)
#define WORD_TRANSFER (1<<23)
#define BURST4_EN (1<<24)
//SDIFSTA
#define TX_FIFO_HALF_FULL (1<<11)
#define TX_FIFO_AVAILABLE_DETECT (1<<13)
#define RX_FIFO_AVAILABLE_DETECT (1<<12)
typedef enum _CardType {
SD_CARD=0, // 4 bit Data bus SD
MMC_CARD=1, // 1 bit Data bus MMC
MOVI_NAND_CARD=2, // 4 bit Data bus MMC
ERROR_CARD=3
} CardType;;
typedef enum _Command_type {
GO_TO_IDLE_CMD=0, // Basic Commands and Read Stream Commands (Class0 and Class1)
SEND_OP_CMD=1, // Basic Commands and Read Stream Commands (Class0 and Class1)
ALL_SEND_SID_CMD=2, // Basic Commands and Read Stream Commands (Class0 and Class1)
SET_RELATIVE_ADDR=3, // Basic Commands and Read Stream Commands (Class0 and Class1)
SET_DSR_CMD=4, // Basic Commands and Read Stream Commands (Class0 and Class1)
SWITCH_CMD=6, // Basic Commands and Read Stream Commands (Class0 and Class1)
SELECT_CMD=7, // Basic Commands and Read Stream Commands (Class0 and Class1)
SEND_EXT_CSD_CMD=8, // Basic Commands and Read Stream Commands (Class0 and Class1)
SEND_CSD_CMD=9, // Basic Commands and Read Stream Commands (Class0 and Class1)
SEND_CID_CMD=10, // Basic Commands and Read Stream Commands (Class0 and Class1)
READ_DAT_CMD=11, // Basic Commands and Read Stream Commands (Class0 and Class1)
STOP_TRANSMISSION_CMD=12, // Basic Commands and Read Stream Commands (Class0 and Class1)
SEND_STATUS_CMD=13, // Basic Commands and Read Stream Commands (Class0 and Class1)
BUSTEST_R_CMD=14, // Basic Commands and Read Stream Commands (Class0 and Class1)
GO_INACTIVE_STATE_CMD=15, // Basic Commands and Read Stream Commands (Class0 and Class1)
SET_BLOCKLEN_CMD=16, // Block Oriented Read Commands(Class2)
READ_SINGLE_BLOCK_CMD=17, // Block Oriented Read Commands(Class2)
READ_MULTIPLE_BLOCK_CMD=18, // Block Oriented Read Commands(Class2)
BUSTEST_W_CMD=19, // Basic Commands and Read Stream Commands (Class0 and Class1)
WRITE_DAT_UNTIL_STOP_CMD=20, // Stream write Command (Class3)
SET_BLOCK_COUNT_CMD=23, // Block Oriented Write Commands( Class4 )
WRITE_BLOCK_CMD=24, // Block Oriented Write Commands( Class4 )
WRITE_MULTIPLE_BLOCK=25, // Block Oriented Write Commands( Class4 )
PROGRAM_CID_CMD=26, // Block Oriented Write Commands( Class4 )
PROGRAM_CSD_CMD=27, // Block Oriented Write Commands( Class4 )
SET_WRITE_PROT_CMD=28, // Block Oriented Write Protection Commands( Class6 )
CLR_WRITE_PROT_CMD=29, // Block Oriented Write Protection Commands( Class6 )
SEND_WRITE_PROT_CMD=30, // Block Oriented Write Protection Commands( Class6 )
ERASE_GROUP_START_CMD=35, // Erase Commands (Class5)
ERASE_GROUP_END_CMD=36, // Erase Commands (Class5)
ERASE_CMD=38, // Erase Commands (Class5)
FAST_IO_CMD=39, // I/O Mode Commands (Class9)
GO_IRQ_STATE_CMD=40, // I/O Mode Commands (Class9)
LOCK_UNLOCK_CMD=42, // Lock Card (Class7)
APP_CMD=55, // Application Specific Commands (Class8)
GEN_CMD=56, // Application Specific Commands (Class8)
} CommandType;
/*
typedef struct _ACommandType {
} ACommandType;
*/
#if 0
// response0 0x5A000014
// response1 0x5A000018
// response2 0x5A00001C
// response3 0x5A000020
__packed typedef struct _CID_register {
unsigned char manufactureID:8; // 8=>136
unsigned char applicationID:16; // 16=>128
unsigned char productNamd:40; // 40=>112
unsigned char productRevision:8; // 8=>72
unsigned char productRevision2:8; // 8=>64
unsigned char productSerialNuber:32; // 32=>56
unsigned char reserved1:4; // 4=>24
unsigned char manufacturingDate:12; // 12=>20
unsigned char crc_check:7; // 7=>8
unsigned char reserved2:1; // 1 =>1
} CID_register;
typedef struct _CSD_register {
unsigned char SCD_structure:2; // [127:126] R
unsigned char reserved1:6; // [125:120] R
unsigned char dataReadAccTime:8; // [119:112] R
unsigned char dataReadAccTime2:8; // [111:104] R //4
unsigned char maxDataTransferTime:8; // [103:96] R
unsigned char cardCommandClasses:12; // [95:84] R
unsigned char maxReadDataBlockLen:4; // [83:80] R // 6
#if MISALIGN
unsigned char readBlockPartial:1; // [79:79] R
unsigned char writeBlockMisalign:1; // [78:78] R
unsigned char readBlockMisalign:1; // [77:77] R
unsigned char DRSimplemented:1; // [76:76] R
unsigned char reserved2:2; // [75:74] R
unsigned char deviceSize:12; // [73:62] R // 9
unsigned char currentRMin:3; // [61:59] R
unsigned char currentRMax:3; // [58:56] R
unsigned char currentWMin:3; // [55:53] R
unsigned char currentWMax:3; // [52:50] R
unsigned char deviceSizeMultiflier:3; // [49:47] R
unsigned char eraseBlockEn:1; // [46:46] R
unsigned char eraseSectorSize:7; // [45:39] R
unsigned char wp_grp_size:7; // [38:32] R
unsigned char wp_grp_enable:1; // [31:31] R
unsigned char reservedforMMC:2; // [30:29] R
unsigned char writeSpeedFactor:3; // [28:26] R
unsigned char writeBLlen:4; // [25:22] R
unsigned char writeBLpartial:1; // [21:21] R
unsigned char reserved3:5; // [20:15] R
#else
#endif
unsigned char fileFormatGroup:1; // [15:15]RW
unsigned char copyFlag:1; // [14:14]RW
unsigned char PermanentWriteProtection:1; // [13:13]RW
unsigned char tempWriteProtection:1; // [12:12]RW
unsigned char fileFormat:2; // [11:10]RW
unsigned char reserved4:2; // [9:8]RW
unsigned char crc_check:7; // [7:1]RW
unsigned char alwaysOne:1; // [0:0]
} CSD_register;
#endif
// Function prototypes
void Ch18_Sdmmc(void);
void set_system_clock(void);
int SD_card_init(void);
void Rd_cid_csd(char reg);
int Check_status(char type);
void writeBigSizeIOTest(void);
void writeBigSizeIOTest2(void);
void readBigSizeIOTest(void);
void readBigSizeIOTest2(void);
void TR_Buf_new(void);
void Card_sel_desel(char sel_desel);
void CMD0(void);
int CMD55(void);
void Rd_CSD(void);
void Rd_CID(void);
void Rd_Block(void);
void Rd_Stream(void);
void Wt_Block(void);
void Wt_Stream(void);
void Set_Prt(void);
void Clr_Prt(void);
void Flush_Rx_buf(void);
void Set_Bus(CardType type);
void View_Rx_buf(void);
void View_Tx_buf(void);
//////////////////////////////////////////////////////////////////////////////////
void SDIO_TypeSetting(U32 ClkType, U32 ByteType);
void SDIO_BlockSizeSetting(U32 Size);
void SDIO_Command(U32 CmdArg, U32 Command, U32 WaitResp, U32 LongResp, U32 WithData);
int Check_CMDend(CommandType cmd, int be_resp);
void SDIO_PrescalerSetting(U32 BaudRate);
void CARD_SEL_DESEL(U8 sel_desel);
void SET_BUSWIDTH(CardType);
void SDIO_WriteTest(void);
void SDIO_ReadTest(void);
void SDIO_EraseBlock(void);
void SD_MMC_SETGPIO(void);
void CalculationBPS_NORMALSD_MMC(int Time);
CardType Check_OCR(void);
int Check_DATend(void);
int Check_BUSYend(void);
void __irq Rd_Int(void);
void __irq Wt_Int(void);
void Set_4bit_bus_MoviNand(void);
void writeBigSizeIOTestRnd(void);
void readBigSizeIOTestRnd(void);
void rwBigSigeIOTestRnd(void);
int Check_DATend2(void);
void eraseBlock_beforewrite(unsigned int StartAddr, unsigned EndAddr);
void stream_write_test(void);
void stream_read_test(void);
#ifdef __cplusplus
}
#endif
#endif /*__SD_H___*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -