📄 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 + -