⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd_api.h

📁 SD卡驱动 SD_CARD_TIMEOUT 当一个SD卡的操作超出时限
💻 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 + -