📄 sd_api.h
字号:
#ifndef _SD_API_H
#define _SD_API_H
/*
======== SD 卡的状态标记,是给测试函数设置下面 SD_CardState 变量用的。 ========
SD_CARD_TIMEOUT 当一个SD卡的操作超出时限,将导致返回错误和该标记被置位
SD_CARD_EXIST 当卡槽内插入了合适的卡体,不管是什么卡,都会使该位被设置;
SD_CARD_WRITE_PROTECT 当卡体的写保护开关被 LOCK 时,则该位被设置;
SD_CARD_READY 当卡槽内的卡被正确识别,并可以随时访问时,则该位被设置;
SD_CARD_DOOR_CLOSE 当卡槽的门(产品外壳上的挡板开关)关闭时,则该位被设置;
SD_CARD_IS_SD 当卡槽内插入的是 SD 卡时,则该位被设置。
SD_CARD_IS_MMC 当卡槽内插入的是 MMC 卡时,则该位被设置;
注意:不要使用 0x80,免得和整数作逻辑运算时被误为负数。
*/
#define SD_CARD_TIMEOUT (unsigned char)0x40
#define SD_CARD_READY (unsigned char)0x20
#define SD_CARD_DOOR_CLOSE (unsigned char)0x10
#define SD_CARD_IS_SD (unsigned char)0x08
#define SD_CARD_IS_MMC (unsigned char)0x04
#define SD_CARD_EXIST (unsigned char)0x02
#define SD_CARD_WRITE_PROTECT (unsigned char)0x01
// 卡槽内的卡经过初始化之后,会填充下面这个变量的相应位
extern volatile unsigned char SD_CardState;
// SD 卡的硬件 IO 分配,用于硬件实时操作,LCD_E 是 LCD 的片选,在这里用于
// 共享信号线的检测
#define SD_TEST_PIN 0x01800000
#define SD_SELF_PIN 0x00800000
#define SD_PROTECT_PIN 0x01000000
#define SD_DOOR_PIN 0x00008000
#define SD_CS 0x00040000
#define LCD_E 0x00200000
// 命令的长度
#define SD_COMMAND_LENGTH 6
#define SD_CS_DISABLED FIOSET=SD_CS
#define SD_CS_ENABLED FIOCLR=SD_CS
// 当前 SD 卡的资料,用三个字节串来保留寄存器 CSD 的内容
extern volatile unsigned char SD_CSD_Register[];
// 当前 SD 卡允许的最大通讯速度
extern volatile int SD_Max_Rate;
// 我的 SD 卡的信息结构
struct SD_Info
{
volatile char Effect;
volatile char SD_Ver;
volatile __int64 Size;
volatile int SectorSize;
volatile int EraseSectorSize;
volatile int FileFormat;
};
//// SD_CardInit ---- SD_CardInit ---- SD_CardInit ---- SD_CardInit ---- SD_CardInit ---- SD_CardIni
//
// 初始化 SD 卡:它首先检查卡门和卡槽的状态,如果卡门关闭和卡槽内有合适的存储卡,
// 则它用 SPI0 发送命令将其复位,并确定使用 SPI 方式通讯。然后继续检查卡的种类。然后
// 根据上面的流程将 SD_CardState 变量内填入本次的检测状态。
//
// 返回值:
// 如果成功设置,则返回 0,卡门、卡槽和卡的工作状态在 SD_CardState 变量中被设置。
// 如果卡不能被访问,则返回负数。SD_CardState 变量中卡门、卡槽、写保护将被设
// 置成本次的检测状态。
//
extern int SD_CardInit(void);
//// SD_CardBusy ---- SD_CardBusy ---- SD_CardBusy ---- SD_CardBusy ---- SD_CardBusy ---- SD_CardBus
//
// 检查 SD 卡是否处于 Busy 状态,如果卡门打开、卡槽内没有卡、SPI0 被占用、SD 卡正忙,
// 则返回非 0 值,否则 SD 卡就是处于 Ready 状态,返回0。
//
// 返回值:
// 0 - SD 卡处于 Ready 状态
// -1 - SPI0 口被其它外设占用
// -2 - SD 卡处于 Busy 状态
//
extern int SD_CardBusy(void);
#endif // _SD_API_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -