OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5953|回复: 7

军哥 求助 SD卡没有引导扇区

[复制链接]

21

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-1-10
在线时间
10 小时
发表于 2014-8-20 12:48:35 | 显示全部楼层 |阅读模式
5金钱
军哥 

unsigned char FAT_Init(void)//Initialize of FAT  need initialize SD first  
{       
 bootsector710 *bs  = 0;   //定义DBR结构体,包含BPB部分(12~90字节是BPB)
 bpb710        *bpb = 0;   //定义BPB结构体   
 partrecord    *pr  = 0;   //定义硬盘信息 结构休  (16字节)
 DWORD hidsec=0;
 u32 Capacity,DBR_Sector; 
  u8 i;
 Capacity = SD_GetCapacity(); //得到SD容量,单位为字节      
 if(Capacity<0xff)
return 1;     
 if(SD_ReadSingleBlock(0,fat_buffer))
return 2;   //读物理扇区0。即MBR(其中MBR内的硬盘分区表中有DBR的地址信息),如没有MBR,则为DBR。经测试,我的SD卡是有MBR的
 bs = (bootsector710 *)fat_buffer;     //(bootsector710 *)fat_buffer:把数组fat_buffer转换为指向结构类型bootsector710 的指针,然后赋给结构指针bs
 pr = (partrecord *)((partsector *)fat_buffer)->psPart;//first partition   第一分区
 hidsec = pr->prStartLBA;//the hidden sectors    得DBR所在的物理扇区偏移扇区数。在DBR之前的扇区数是隐藏的。
 if(hidsec >= Capacity/512)hidsec = 0;  
 else 
 {
  if(SD_ReadSingleBlock(pr->prStartLBA,fat_buffer))return 3;//read the bpb sector  即DBR扇区,里面的(第12~90字节是BPB)
  bs = (bootsector710 *)fat_buffer; 
  if(bs->bsJump[0]!=0xE9 && bs->bsJump[0]!=0xEB)
  {
   hidsec = 0;
   if(SD_ReadSingleBlock(0,fat_buffer))
return 4;//read the bpb sector
   bs = (bootsector710 *)fat_buffer; 
  }
 }   
 if(bs->bsJump[0]!=0xE9 && bs->bsJump[0]!=0xEB)
return 5;//对付没有bootsect的sd卡 //dead with the card which has no bootsect
 bpb = (bpb710 *)bs->bsBPB;
 if(bpb->bpbFATsecs)//detemine thd FAT type  //do not support FAT12
 {
  FAT32_Enable=0; //FAT16
  FATsectors   = bpb->bpbFATsecs;//FAT表占用的扇区数 
  FirstDirClust = 2;
 }
 else
 {
  FAT32_Enable=1; //FAT32
  FATsectors   = bpb->bpbBigFATsecs;//FAT占用的扇区数 
  FirstDirClust = bpb->bpbRootClust;
 }

 BytesPerSector = bpb->bpbBytesPerSec;      //每扇区字节数
 SectorsPerClust = (BYTE)bpb->bpbSecPerClust;//每簇扇区数
 FirstFATSector = bpb->bpbResSectors+hidsec;//第一个FAT表扇区
 RootDirCount = bpb->bpbRootDirEnts;  //根目录项数
 RootDirSectors = (RootDirCount*32)>>9;  //根目录占用的扇区数
 FirstDirSector = FirstFATSector+bpb->bpbFATs*FATsectors;//第一个目录扇区
 FirstDataSector = FirstDirSector+RootDirSectors;//第一个数据扇区
 return 0; 
}  
军哥 调试SD卡时 SD卡可以正常初始化 但调到fat时发现 程序卡在红色标记部分了  SD卡没有引导扇区是怎么回事 ?怎么处理啊 请提示

最佳答案

查看完整内容[请看2#楼]

问题发现了 原来是底层中多发了几个0xff
个人博客www.xiaovdiy.cn
https://shop100764513.taobao.com/
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

21

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-1-10
在线时间
10 小时
 楼主| 发表于 2014-8-20 12:48:36 | 显示全部楼层
问题发现了 原来是底层中多发了几个0xff
个人博客www.xiaovdiy.cn
https://shop100764513.taobao.com/
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-16
在线时间
1 小时
发表于 2014-8-20 13:28:52 | 显示全部楼层
楼主  我刚学stm32   还没学过sdio    不过我学过一段时间的数据恢复      将sd卡先格式化一下     DBR引导扇区就会出来  相应的文件系统FTA表  文件系统格式   lBA的大小都会出现在DBR引导扇区中    MBR中有分区表信息   和一446个字节的引导信息
回复

使用道具 举报

21

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-1-10
在线时间
10 小时
 楼主| 发表于 2014-8-20 15:52:59 | 显示全部楼层
回复【3楼】雨山:
---------------------------------
程序更新到最新了
个人博客www.xiaovdiy.cn
https://shop100764513.taobao.com/
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2014-11-5
在线时间
0 小时
发表于 2014-11-5 13:43:22 | 显示全部楼层
回复【4楼】雨山:
---------------------------------
我也遇到了同样的问题,请问能否详细的说下是怎么解决的?谢谢
苟日新,日日新,又日新
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2015-12-29
在线时间
0 小时
发表于 2015-12-29 16:16:35 | 显示全部楼层
我也遇到了同样的问题,请问能否详细的说下是怎么解决的?谢谢
回复

使用道具 举报

21

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2013-1-10
在线时间
10 小时
 楼主| 发表于 2015-12-30 09:21:13 | 显示全部楼层
malei22 发表于 2015-12-29 16:16
我也遇到了同样的问题,请问能否详细的说下是怎么解决的?谢谢

更新了一下最新的程序版本
个人博客www.xiaovdiy.cn
https://shop100764513.taobao.com/
回复

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2016-5-11
在线时间
17 小时
发表于 2018-3-29 18:04:18 | 显示全部楼层
雨山 发表于 2014-8-20 12:48
问题发现了&nbsp;原来是底层中多发了几个0xff

楼主你好  请问具体是在哪里发了0xff  是SD初始化还是读写的时候?  能帮忙看看吗 现在很急
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表