You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
3.8 KiB
82 lines
3.8 KiB
#ifndef __SDX1_H__
|
|
#define __SDX1_H__
|
|
|
|
/*★★★★★★★★★★★★★★★★★★★★★★★★
|
|
《振南的znFAT--嵌入式FAT32文件系统设计与实现》
|
|
一书[上下册]已经由北航出版社正式出版发行。
|
|
此书是振南历经3年多时间潜心编著,是现今市面上唯
|
|
一一套讲述FAT32文件系统、SD卡等嵌入式存储技术的
|
|
专著。书中还介绍了大量的编程技巧与振南的开发经验。
|
|
请在各大网络销售平台搜索“znFAT”,即可购买。
|
|
在全国各大书店也有售。
|
|
振南的ZN-X开发板,支持51、AVR、STM32(M0/M3/M4)等
|
|
CPU。此板可与书配套,板上各种精彩的实验实例请详见
|
|
振南网站www.znmcu.cn
|
|
★★★★★★★★★★★★★★★★★★★★★★★★*/
|
|
|
|
/***************************************************************************************
|
|
★程序模块:【振南ZN-X开发板】上『SD卡1』驱动程序 〖STC51部分:STC15L2K60S2〗
|
|
★功能描述:实现了SD卡的扇区读写、多扇区读写、扇区擦除、读取总物理扇区数等功能
|
|
此驱动可支持几乎所有的SD卡,包括MMC/SD/SDHC
|
|
★配套教程与参考资料:
|
|
●《振南的znFAT--嵌入式FAT32文件系统设计与实验》一书 下册 第11章《SD卡物理驱动》
|
|
●《振南的单片机高级外设系列视频教程》之《SD卡专辑》
|
|
****************************************************************************************/
|
|
|
|
|
|
#include "../bsp/bsp_config.h"///#include "sd_type.h"
|
|
#include "znfat.h"///#include "sd_type.h"
|
|
|
|
////#include <STC15Fxxxx.H>
|
|
|
|
sbit SD1_CS =P5^5; //SD卡片选 输入
|
|
|
|
|
|
#define D_FILE_SECTOR 65544
|
|
|
|
|
|
#define SET_SD1_CS_PIN(val) (SD1_CS =val)
|
|
|
|
#define TRY_TIME 200 //向SD卡写入命令之后,读取SD卡的回应次数,即读TRY_TIME次,如果在TRY_TIME次中读不到回应,产生超时错误,命令写入失败
|
|
|
|
#define TRY_TIME2 200 //add by cc
|
|
//相关宏定义
|
|
//-------------------------------------------------------------
|
|
#define SD_VER_ERR 0X00
|
|
#define SD_VER_MMC 0X01
|
|
#define SD_VER_V1 0X02
|
|
#define SD_VER_V2 0X03
|
|
#define SD_VER_V2HC 0X04
|
|
|
|
#define INIT_ERROR 0x01 //初始化错误
|
|
#define INIT_CMD0_ERROR 0x02 //CMD0错误
|
|
#define INIT_CMD1_ERROR 0x03 //CMD1错误
|
|
#define INIT_SDV2_ACMD41_ERROR 0x04 //ACMD41错误
|
|
#define INIT_SDV1_ACMD41_ERROR 0x05 //ACMD41错误
|
|
|
|
#define WRITE_CMD24_ERROR 0x06 //写块时产生CMD24错误
|
|
#define WRITE_BLOCK_ERROR 0x07 //写块错误
|
|
|
|
#define READ_BLOCK_ERROR 0x08 //读块错误
|
|
|
|
#define WRITE_CMD25_ERROR 0x09 //在连续多块写时产生CMD25错误
|
|
#define WRITE_NBLOCK_ERROR 0x0A //连续多块写失败
|
|
|
|
#define READ_CMD18_ERROR 0x0B //在连续多块读时产生CMD18错误
|
|
|
|
#define GET_CSD_ERROR 0x0C //读CSD失败
|
|
|
|
//-------------------------------------------------------------
|
|
UINT8 SD1_Init(); //SD卡初始化
|
|
|
|
UINT8 L1_SD_Wsector(UINT32 addr,UINT8 *buffer); //将buffer数据缓冲区中的数据写入地址为addr的扇区中
|
|
UINT8 L1_SD_Rsector(UINT32 addr,UINT8 *buffer); //从地址为addr的扇区中读取数据到buffer数据缓冲区中
|
|
UINT8 SD1_Write_nSector(UINT32 nsec,UINT32 addr,UINT8 *buffer); //将buffer数据缓冲区中的数据写入起始地址为addr的nsec个连续扇区中
|
|
UINT8 SD1_Read_nSector(UINT32 nsec,UINT32 addr,UINT8 *buffer); //将buffer数据缓冲区中的数据写入起始地址为addr的nsec个连续扇区中
|
|
UINT8 SD1_Erase_nSector(UINT32 addr_sta,UINT32 addr_end);
|
|
UINT32 SD1_GetTotalSec(void); //获取SD卡的总扇区数
|
|
UINT8 L2_SD_Rsector(UINT16 addr,UINT8 *buffer);////从
|
|
UINT8 L2_SD_Wsector(UINT16 addr,UINT8 *buffer);
|
|
UINT8 L2_SD_Erase_nSector(UINT16 addr_sta,UINT16 addr_end);
|
|
|
|
#endif
|
|
|