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

#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