没有合适的资源?快使用搜索试试~ 我知道了~
首页基于FAT32文件系统的SDHC卡读写
基于FAT32文件系统的SDHC卡读写
3星 · 超过75%的资源 需积分: 13 41 下载量 20 浏览量
更新于2023-03-16
评论
收藏 101KB DOC 举报
采用C编写,应用FAT32文件系统,对SDHC卡进行初始化并读取MBR,DBR的内容,获取存储卡的基本信息,然后读取子目录下的某个文本文件的内容。
资源详情
资源评论
资源推荐
/******************************************************************
程序说明:
SD 卡采用 SPI 方式。8,9 号引脚没有用到。接的电压是 3.3V;
当使用 51F 时,输出配置为推挽输出,此时可以不接上拉电阻
SD1.0 和 SD2.0 的初始化命令式不一样的。1.0 是使用 CMD0 和 CMD1
就可以初始化,而 2.0 需要如下的初始化步骤:CMD0+CMD8+CMD55
+ ACMD41,需要设置成 LARGE 模式
功能设定:
实验前提条件:格式化 SD 卡,在 SD 的根目录上建立名为 TEST 的文
件夹, 要求在该文件夹下建立一个名为"test.txt"的文件,使用
FAT32 文件系统,簇大小为 512 字节,所要求建立的文件大小为 512
个字节
编程思路:
获取 MBR 和 DBR 的信息,读取根目录找到 TEST 文件夹所在的簇 A,查
找空闲的簇为 N,写第 A 簇关于。和。。的目录项和关于 TEST.TXT 的
信息,转到第 N 簇写入 TEST.TXT 首簇的内容,写 FAT 表的值
******************************************************************/
/******************************************************************
* 包含头文件 *
******************************************************************/
#include "C8051F330.h"
#include "struct.h"
/******************************************************************
* 端口定定义 *
******************************************************************/
sbit SD_SO=P0^1; //SD 卡同步数据 输出
sbit SD_SCL=P0^0; //SD 卡同步时钟 输入
sbit SD_SI=P0^2; //SD 卡同步数据 输入
sbit SD_CS=P0^3; //SD 卡片选 输入
/******************************************************************
* 宏定义 *
******************************************************************/
#define uchar unsigned char
#define WRITE_BLOCK_ERROR 0x01
#define READ_BLOCK_ERROR 0x02 //读块错误
#define DELAY_TIME 5 //SD 卡的复位与初始化时 SPI 的延时参数,根据实际速率修改其
值,否则会造成 SD 卡复位或初始化失败
#define TRY_TIME 10 //向 SD 卡写入命令之后,读取 SD 卡的回应次数,即读 TRY_TIME
次,如果在 TRY_TIME 次中读不到回应,产生超时错误,命令写入失败
/******************************************************************
* 全局变量声明 *
******************************************************************/
unsigned long xdata laddr;
unsigned char is_init; //在初始化的时候设置此变量为 1,相当于条件编译,可以用
来改变时钟的快慢
xdata struct FAT32_MBR MBR_Data; //接收读取的 MBR 信息
xdata struct FAT32_DBR DBR_Data; //存放读取的 DBR 信息
unsigned long xdata DBRFirstSec; //DBR 所在的扇区
unsigned long xdata TotalSecNo; //磁盘总扇区数
unsigned int xdata BytesPerSec; //每个扇区所占的字节数
unsigned char xdata SecPerCluster; //每个簇所占的扇区数
unsigned int xdata HoldSecNo; //保留扇区数
unsigned char xdata FATNo; //FAT 表个数
unsigned long xdata SecPerFAT; //每个 FAT 表的扇区数
unsigned long xdata RootClusterNo; //根目录簇号
unsigned long xdata SecOfFAT1; //FAT1 表所在扇区
unsigned long xdata SecOfFAT2; //FAT2 表所在的扇区
unsigned long xdata SecOfRoot; //根目录所在扇区
unsigned long xdata CurFreeCluNo=0; //当前空闲簇的簇号
unsigned long xdata FreeClusterNo=0; //空闲的簇号
/******************************************************************
* 初始化延时函数 *
******************************************************************/
void delay(unsigned int time)
{
while(time--);
}
/******************************************************************
* 端口初始化 *
******************************************************************/
void Port_IO_Init()
{
P0MDOUT = 0x0D; // P0.0 - Skipped, Push-Pull, Digital
P0SKIP = 0x0F; // P0.1 - Skipped, Open-Drain, Digital
XBR1 = 0x40; // P0.2 - Skipped, Push-Pull, Digital
} // P0.3 - Skipped, Push-Pull, Digital
/******************************************************************
* 晶振初始化 *
******************************************************************/
void Oscillator_Init()
{
OSCLCN = 0x82; //12.25M 的时钟
}
/******************************************************************
- 功能描述:IO 模拟 SPI,发送一个字节
- 隶属模块:SD 卡模块
- 函数属性:内部
- 参数说明:x 是要发送的字节
- 返回说明:无返回
- 注:其中 is_init 为 1 时,写的速度放慢,初始化 SD 卡 SPI 速度不能太高
******************************************************************/
void SD_spi_write(unsigned char n)
{
unsigned char data i;
for(i=8;i;i--)
{
SD_SCL=0;
SD_SI=(n&0x80);
n<<=1;
if(is_init)delay(DELAY_TIME);
SD_SCL=1;
if(is_init)delay(DELAY_TIME);
}
SD_SI=1;
}
/******************************************************************
- 功能描述:IO 模拟 SPI,读取一个字节
- 隶属模块:SD 卡模块
- 函数属性:内部
- 参数说明:无
- 返回说明:返回读到的字节
******************************************************************/
unsigned char SD_spi_read()
{
剩余14页未读,继续阅读
shijiabin4567
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2