📄 sd.h
字号:
#ifndef __SD_H__
#define __SD_H__
//#include <avr/io.h>
#include "datatype.h"
#define SD_TYPE_SD 1
#define SD_TYPE_MMC 2
#define SD_POWER_PIN 3
#define SD_POWER_OFF PORTB |= (1 << SD_POWER_PIN)
#define SD_CD_PIN (PIND & (1 << PD2))
#define SPI_CS_ASSERT rPDATE = 0x0
#define SPI_CS_DEASSERT rPDATE=0x20
#define SPI_HIGH_SPEED 1
#define SPI_LOW_SPEED 0
#define SD_CMD0 0
#define BEEP_ON PORTD &= ~(1 << PD7)
#define BEEP_OFF PORTD |= (1 << PD7)
//spi模拟SD卡操作命令宏定义
#define CMD_GO_IDLE_STATE 0x00 /* CMD0: response R1 */
#define CMD_SEND_OP_COND 0x01 /* CMD1: response R1 */
#define CMD_SEND_IF_COND 0x08 /* CMD8: response R1 */
#define CMD_SEND_CSD 0x09 /* CMD9: response R1 */
#define CMD_SEND_CID 0x0A /* CMD10: response R1 */
#define CMD_STOP_TRANSMISSION 0x0C /* CMD12: response R1 */
#define CMD_SEND_STATUS 0x0D /* CMD13: response R2 */
#define CMD_SET_BLOCKLEN 0x10 /* CMD16: arg0[31:0]: block length, response R1 */
#define CMD_READ_SINGLE_BLOCK 0x11 /* CMD17: arg0[31:0]: data address, response R1 */
#define CMD_READ_MULTIPLE_BLOCK 0x12 /* CMD18: arg0[31:0]: data address, response R1 */
#define CMD_WRITE_SINGLE_BLOCK 0x18 /* CMD24: arg0[31:0]: data address, response R1 */
#define CMD_WRITE_MULTIPLE_BLOCK 0x19 /* CMD25: arg0[31:0]: data address, response R1 */
#define CMD_PROGRAM_CSD 0x1B /* CMD27: response R1 */
#define CMD_SET_WRITE_PROT 0x1C /* CMD28: arg0[31:0]: data address, response R1b */
#define CMD_CLR_WRITE_PROT 0x1D /* CMD29: arg0[31:0]: data address, response R1b */
#define CMD_SEND_WRITE_PROT 0x1E /* CMD30: arg0[31:0]: write protect data address, response R1 */
#define CMD_TAG_SECTOR_START 0x20 /* CMD32: arg0[31:0]: data address, response R1 */
#define CMD_TAG_SECTOR_END 0x21 /* CMD33: arg0[31:0]: data address, response R1 */
#define CMD_UNTAG_SECTOR 0x22 /* CMD34: arg0[31:0]: data address, response R1 */
#define CMD_TAG_ERASE_GROUP_START 0x23 /* CMD35: arg0[31:0]: data address, response R1 */
#define CMD_TAG_ERASE_GROUP_END 0x24 /* CMD36: arg0[31:0]: data address, response R1 */
#define CMD_UNTAG_ERASE_GROUP 0x25 /* CMD37: arg0[31:0]: data address, response R1 */
#define CMD_ERASE 0x26 /* CMD38: arg0[31:0]: stuff bits, response R1b */
#define CMD_SD_SEND_OP_COND 0x29 /* ACMD41: arg0[31:0]: OCR contents, response R1 */
#define CMD_LOCK_UNLOCK 0x2A /* CMD42: arg0[31:0]: stuff bits, response R1b */
#define CMD_APP 0x37 /* CMD55: arg0[31:0]: stuff bits, response R1 */
#define CMD_CRC_ON_OFF 0x3B /* CMD59: arg0[31:1]: stuff bits, arg0[0:0]: crc option, response R1 */
typedef struct _SD_INFO
{
INT8U mid; //制造商ID
INT8U oid[2]; //OEM ID
INT8U pnm[5]; //产品名称
INT8U prv; //产品版本
INT32U psn; //32位串号
INT8U mdt; //制造日期 高4位年,低4位月
INT8U ct; //卡类型
INT32U bn; //卡中块的数量
INT32U bl; //卡的块长度
INT32U cap;
}SD_INFO , *PSD_INFO;
extern SD_INFO g_SDInfo;
extern void SPI_MasterInit(INT8U u8Speed);
extern INT8U SPI_MasterTransmit(INT8U u8Data);
extern INT8U SD_SendCMD(INT8U u8Cmd, INT32U u32Arg);
extern INT8U SD_GetOCR(INT8U *pu8Buff);
extern INT8U SD_GetCID(INT8U *pu8Buff);
extern INT8U SD_GetCSD(INT8U *pu8Buff);
extern INT8U SD_GetCardInfo(PSD_INFO psdi);
extern INT8U SD_ReadBlockSingle(INT32U u32Sector, INT8U *pu8Buff);
extern INT8U SD_WriteBlockSingle(INT32U u32Sector, INT8U *pu8Buff);
extern INT8U SD_Init(PSD_INFO pg_SDInfo);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -