基于FAT32系统的删除数据区数据

首先给出我之前做的任务

在数据区删除对应的数据:
步骤分解:
(1)首先要在根目录找到起始簇

    例如以上图为例,文件名为ILLUST这个txt文件,他的起始簇即为06。

    具体如何找起始簇此文暂且不讨论。

(2)如果不止1簇,找到下一簇
(3)处理最后一簇

    假设我们已经找到起始簇,接下来的步骤就是:

    1、找到FAT表,读取一个簇的数据出来(4096个字节)


如图所画为第一簇、第二簇,依次类推。

    2、分析上图所画的对应簇的数据(4个字节为一个簇的标志符),将其转换成32为长字符,如第一簇转换后为:0FFFFFFF (小端存储)

    3、若为结束符,则删除该簇的数据(包括FAT表该簇数据、根目录对应簇数据4096个字节);若不为结束符,则按其指向簇继续查找,直至查找到结束符。


首先给出对SD卡读取的函数代码:

//******************************************************
//CMD17读SD卡单块数据命令
//´从第N扇区读取num个字节到buff对应的地址
//******************************************************
uchar CMD17(ulong N,uint offset,uint num,uchar *p)
{
uchar ACK=0xff,A3,A2,A1,A0;
uchar cnt1=0,cnt2=0;
uint i=0;
SD_CS=0; //拉低CS
if(num>512) //超过512字节
num=512; //按512字节处理
N=N<<9; //N也就是起始地址
N=N+(ulong)offset; //offset偏移地址
A3=(uchar)(N>>24);
A2=(uchar)(N>>16);
A1=(uchar)(N>>8);
A0=(uchar)N;


while(cnt1<10&&ACK!=0xfe)
{
cnt1++;cnt2=0;
W_BYTE(0x51,0);   //写入单块读命令
W_BYTE(A3,0); //这里A3,A2,A1为地址参数
W_BYTE(A2,0);   //A3Î为32位地址最高位
W_BYTE(A1,0);
W_BYTE(A0,0);
W_BYTE(0xff,0);
while(cnt2<30&&ACK!=0x00)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值