?? sd_command.h
字號:
//======================================================
// 文件名稱: SD_Command.h
// 功能描述: SD卡命令相關頭文件
// 維護記錄: 2006-8-03 v1.0
//======================================================
#ifndef __SD_COMMAND_H__
#define __SD_COMMAND_H__
//=============================================================
// 語法格式: unsigned char SD_SendCmd_NoCSOP(unsigned char cmdIndex, unsigned char *Param, unsigned char resLen, unsigned char *resp)
// 實現功能: 發送命令(不對CS操作)
// 參數: cmdIndex - 命令序號
// Param - 參數首地址
// resLen - 響應長度
// resp - 響應存儲首地址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_SendCmd_NoCSOP(unsigned char cmdIndex, unsigned char *Param, unsigned char resLen, unsigned char *resp);
//=============================================================
// 語法格式: unsigned char SD_SendCmd(unsigned char cmdIndex, unsigned char *param, unsigned char resptype, unsigned char *resp)
// 實現功能: 發送命令
// 參數: cmdIndex - 命令序號
// Param - 參數首地址
// resLen - 響應長度
// resp - 響應存儲首地址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_SendCmd(unsigned char cmdIndex, unsigned char *Param, unsigned char resLen, unsigned char *resp);
//=============================================================
// 語法格式: void SD_DWord2Bytes(unsigned char *Param, unsigned long int ulValue)
// 實現功能: 雙字轉換為字節
// 參數: Param - 參數首地址
// ulValue - 雙字參數
// 返回值: 無
//=============================================================
extern void SD_DWord2Bytes(unsigned char *Param, unsigned long int ulValue);
//=============================================================
// 語法格式: unsigned char SD_BlockCommand(unsigned char cmdIndex, unsigned char resLen, unsigned long int ulParam)
// 實現功能: 發送Block相關命令
// 參數: cmdIndex - 命令序號
// resLen - 響應長度
// ulParam - 參數(Block號)
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_BlockCommand(unsigned char cmdIndex, unsigned char resLen, unsigned long int ulParam);
//=============================================================
// 語法格式: unsigned char SD_ResetSD(void)
// 實現功能: 發送SD卡軟件復位命令
// 參數: 無
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ResetSD(void);
//=============================================================
// 語法格式: unsigned char SD_ReadCSD(unsigned char CSDLen, unsigned char *CSDBuf)
// 實現功能: 發送讀CSD寄存器命令
// 參數: CSDLen - CSD寄存器長度
// CSDBuf - CSD寄存器內容存儲緩沖區首址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ReadCSD(unsigned char CSDLen, unsigned char *CSDBuf);
//=============================================================
// 語法格式: unsigned char SD_ReadCard_Status(unsigned char *ucBuffer)
// 實現功能: 發送讀Crad Status寄存器命令
// 參數: 無
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ReadCard_Status(unsigned char *ucBuffer);
//=============================================================
// 語法格式: unsigned char SD_ReadCard_Status(unsigned char *ucBuffer)
// 實現功能: 發送設置Block大小命令
// 參數: 無
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_SetBlockLen(unsigned long int ulLen);
//=============================================================
// 語法格式: unsigned char SD_ReadSingleBlock(unsigned long int ulBlockAddr)
// 實現功能: 發送讀Block函數命令
// 參數: Block地址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ReadSingleBlock(unsigned long int ulBlockAddr);
//=============================================================
// 語法格式: unsigned char SD_WriteSingleBlock(unsigned long int ulBlockAddr)
// 實現功能: 發送寫Block函數命令
// 參數: ulBlockAddr - Block地址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_WriteSingleBlock(unsigned long int ulBlockAddr);
//=============================================================
// 語法格式: unsigned char SD_EraseStartBlock(unsigned long int ulStartBlockAddr)
// 實現功能: 發送設置Block擦除起始地址命令
// 參數: ulStartBlockAddr - Block地址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_EraseStartBlock(unsigned long int ulStartBlockAddr);
//=============================================================
// 語法格式: unsigned char SD_EraseEndBlock(unsigned long int ulStartBlockAddr)
// 實現功能: 發送設置Block擦除結束地址命令
// 參數: ulEndBlockAddr - Block地址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_EraseEndBlock(unsigned long int ulEndBlockAddr);
//=============================================================
// 語法格式: unsigned char SD_EraseSelectedBlock(void)
// 實現功能: 發送擦除選中的Block命令
// 參數: 無
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_EraseSelectedBlock(void);
//=============================================================
// 語法格式: unsigned char SD_ReadOCR(unsigned char *OCRBuf)
// 實現功能: 發送讀操作條件寄存器OCR命令
// 參數: 無
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ReadOCR(unsigned char *OCRBuf);
//=============================================================
// 語法格式: unsigned char SD_EnableCRC(unsigned char Enable)
// 實現功能: 發送使能CRC校驗命令
// 參數: Enable - 使能CRC
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_EnableCRC(unsigned char Enable);
//=============================================================
// 語法格式: unsigned char SD_ReadRegister(unsigned long int ulLen, unsigned char *ucRegBuf)
// 實現功能: 讀取寄存器數據
// 參數: ulLen - 寄存器長度
// ucRegBuf- 寄存器存儲緩沖區首址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ReadRegister(unsigned long int ulLen, unsigned char *ucRegBuf);
//=============================================================
// 語法格式: unsigned char SD_ReadBlockData(unsigned long int BlockLen, unsigned char *BlockBuf)
// 實現功能: 讀數據塊
// 參數: BlockLen - 數據塊長度
// BlockBuf - 數據塊存儲緩沖區首址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_ReadBlockData(unsigned long int BlockLen, unsigned char *BlockBuf);
//=============================================================
// 語法格式: unsigned char SD_WriteBlockData(unsigned char Multi, unsigned long int BlockLen, unsigned char *BlockBuf)
// 實現功能: 讀數據塊
// 參數: Multi - 是否為多塊操作
// BlockLen - 長度
// BlockBuf - Block存儲緩沖區首址
// 返回值: 錯誤類型
//=============================================================
extern unsigned char SD_WriteBlockData(unsigned char Multi, unsigned long int BlockLen, unsigned char *BlockBuf);
//=============================================================
// 語法格式: void SD_StopMultiToken(void)
// 實現功能: 發送多塊寫停止令牌
// 參數: 無
// 返回值: 無
//=============================================================
extern void SD_StopMultiToken(void);
//=============================================================
// 語法格式: unsigned char SD_WaitBusy(unsigned char Type)
// 實現功能: 查詢SD卡是否處于忙狀態
// 參數: Type - 查詢類型
// 返回值: 無
//=============================================================
extern unsigned char SD_WaitBusy(unsigned char Type);
// 命令響應長度
#define R1 1
#define R1B 1
#define R2 2
#define R3 5
// 錯誤碼(R1和R2高字節)
#define MSK_IDLE 0x01
#define MSK_ERASE_RST 0x02
#define MSK_ILL_CMD 0x04
#define MSK_CRC_ERR 0x08
#define MSK_ERASE_SEQ_ERR 0x10
#define MSK_ADDR_ERR 0x20
#define MSK_PARAM_ERR 0x40
// 錯誤碼(R2低字節)
#define MSK_TOK_ERROR 0x01
#define MSK_TOK_CC_ERROR 0x02
#define MSK_TOK_ECC_FAILED 0x04
#define MSK_TOK_CC_OUTOFRANGE 0x08
#define MSK_TOK_CC_LOCKED 0x10
// 數據令牌
#define SD_TOK_READ_STARTBLOCK 0xFE
#define SD_TOK_WRITE_STARTBLOCK 0xFE
#define SD_TOK_READ_STARTBLOCK_M 0xFE
#define SD_TOK_WRITE_STARTBLOCK_M 0xFC
#define SD_TOK_STOP_MULTI 0xFD
// 數據響應令牌
#define SD_RESP_DATA_MSK 0x0F // 數據響應掩碼
#define SD_RESP_DATA_ACCETPTED 0x05 // 數據被接受
#define SD_RESP_DATA_REJECT_CRC 0x0B // 由于CRC錯誤而被拒絕
#define SD_RESP_DATA_REJECT_WRITE 0x0D // 由于寫錯誤而被拒絕
// 等待類型
#define SD_WAIT_READ 0x00 // 讀等待
#define SD_WAIT_WRITE 0x01 // 寫等待
#define SD_WAIT_ERASE 0x02 // 擦除等待
#define SD_READREG_TIMEOUT 8 // 讀寄存器超時次數
#define CMD0 0 // 復位
#define CMD0_R R1
#define CMD1 1 // 讀OCR寄存器
#define CMD1_R R1
#define CMD9 9 // 讀CSD寄存器
#define CMD9_R R1
#define CMD13 13 // 讀 Card_Status 寄存器
#define CMD13_R R2
#define CMD16 16 // 設置塊的長度
#define CMD16_R R1
#define CMD17 17 // 讀單塊
#define CMD17_R R1
#define CMD24 24 // 寫單塊
#define CMD24_R R1
#define CMD32 32 // 設置擦除塊的起始地址
#define CMD32_R R1
#define CMD33 33 // 設置擦除塊的終止地址
#define CMD33_R R1
#define CMD38 38 // 擦除所選擇的塊
#define CMD38_R R1B
#define CMD58 58 // 讀OCR寄存器
#define CMD58_R R3
#define CMD59 59 // 使能或禁止 CRC
#define CMD59_R R1
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -