完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
unsigned char FAT_Init(void)//Initialize of FAT need initialize SD first
{ bootsector710 *bs = 0; bpb710 *bpb = 0; partrecord *pr = 0; DWORD hidsec=0; u32 Capacity; Capacity = SD_GetCapacity(); if(Capacity<0xff)return 1; if(SD_ReadSingleBlock(0,fat_buffer))return 2; bs = (bootsector710 *)fat_buffer; pr = (partrecord *)((partsector *)fat_buffer)->psPart;//first partition hidsec = pr->prStartLBA;//the hidden sectors if(hidsec >= Capacity/512)hidsec = 0; else { if(SD_ReadSingleBlock(pr->prStartLBA,fat_buffer))return 3;//read the bpb sector 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; } 原子哥和各位武林高手打扰了,最近在学习你的FAT32文件系统,有史以来的难啊,好多句子着实读不懂,望原子哥解惑一下,感激不尽,我简单的解释一下我对初始化的理解“是将FAT32的文件格式拷贝到SD卡里面”,对吗? bootsector710 *bs = 0; 这个定义是不是定义一个指向数据结构bootsector710的结构体指针*bs? bs = (bootsector710 *)fat_buffer; 这个语句的意思是结构体bootsector710 的指针bs指向数据缓存区?可不可以直接写为bs=fat_buffer? pr = (partrecord *)((partsector *)fat_buffer)->psPart;//first partition这个句子怎么解释呢? if(bs->bsJump[0]!=0xE9 && bs->bsJump[0]!=0xEB)return 5;//对付没有bootsect的sd卡 //dead with the card which has no bootsect 这个句子我觉得是 if(bs->bsJump[0]=0xE9 && bs->bsJump[0]=0xEB)return 5;是判断当前扇区是不是DBR所在的分区,如果是,当前扇区为DBR分区,如果不是,当前扇区为MBR分区,对吗? bpb = (bpb710 *)bs->bsBPB;这个句子怎么解释呢? 期望原子哥和各位爱心人士的回答,如果我的问题太简单,请不要见笑,我是菜鸟。那位高人要是系统的解释一下这个初始化函数,那再好不过了,先致谢了。 |
|
相关推荐
1个回答
|
|
谢谢原子哥的热心回答,听原子哥一说,“如拨云雾而见青天”,豁然开朗啊,再次致谢
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:45 , Processed in 0.625596 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号