【100分】求MSP430驱动SDHC的FAT32系统盘文件系统fat32代码

电子工程世界-论坛中国最火的电子工程师交流社区100分 求解答 虚拟打印机中
INF文件与安装问题
[问题点数:100分,结帖人ggxxkkll]
100分 求解答 虚拟打印机中
INF文件与安装问题
[问题点数:100分,结帖人ggxxkkll]
只显示楼主
取消只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。利用MSP430在SD卡上实现FAT32文件系统
&&&&&&&&经过一周左右时间的摸索,终于明白了如何用msp30在SD卡实现FAT32文件系统,很开心~在学习的过程中,也发现一个问题,就是网上系统地讲SD卡的资料很少,而讲SDHC卡的资料则更少,所以决定写一篇博客与大家分享,由于SDHC卡大部分内容都与SD卡一样,所以下文除非是特别介绍SDHC卡,其余都会以SD卡代替SDHC卡。如果发现文中存在问题,欢迎指正,谢谢。
首先,我们先说明一下本文的主要内容,本文的主要侧重点在于利用msp430(其它单片机应该类似)驱动SD卡。驱动方式选用SPI方式,驱动成功之后,将FAT32文件系统移植过来。所以如果想要仔细学习FAT32文件系统的,可以忽略本文了,想要快速地利用单片机在SD卡上实现FAT32文件系统的,可以看一下。大家可以交流一下。
一、开发之前的准备
1、准备WinHex工具
工欲善其事,必先利其器。在开发之前,我们必须要先准备好需要的工具,除了相应的单片机开发平台,我们还需要一个很重要的工具,WinHex。WinHex可以直接查看磁盘内部的16进制数据。我们把SD卡用卡槽接到电脑上之后,打开WinHex,点击Tools--Open
Disk,然后在Physical
Media下选择自己的SD卡,即可打开自己的SD卡。如下图所示。这里需要注意的是,一定要在Physical
Media下选自己的SD卡,这样看到才是物理地址,否则看到的是逻辑地址,可能会跟你的实际操作不一致,如你在地址为1024的地方写了一段数据,用WinHex在这里却看不到你写的数据。
2、SD卡和SDHC卡
目前大家口头上经常说的是SD卡,但实际上,目前所用的大容量的卡其实均是SDHC卡。SD的容量最大只能到2G,而SDHC卡的容量最小2G,最大32G。所以,如果你的“SD卡”的容量超过2G了,那其实那是SDHC卡。SD卡和SDHC卡在用户使用上,除了容量大了,几乎体会不到别的区别,但是在开发过程中,却是存在一些区别的,SD卡是按字节寻址,SDHC卡是按块寻址。这一点一定要记住。什么是按字节寻址,什么是按块寻址,我们在下文会简单讲解。
3、寻址方式及“块”和“簇”的简单介绍
&&&&&&首先,我们介绍一下“块”的概念,在SD卡或者SDHC卡里,一个块是由512个字节组成,每次读写的时候,数据都是以块为单位进行读写的。SD卡读写是按字节寻址,这是指其读写地址的单位为字节,而我们前面提到,读写的时候数据是以块为单位进行读写的,所以读写SD卡的时候,其地址应该为512的倍数,即读写SD卡时,其地址参数为0,512,1024……而SDHC卡则是以块为单位寻址的,即读写SDHC卡时,地址参数为1时,读写的地址实际上用512字节开始,到1023字节出结束。从WinHex中,我们也可以看到,在地址为512倍数的上一行,有一条线分割了上下两行,这其实也就是把块分割开了,看起来更清楚了。
在这里,我们再简单介绍一下“簇”。我们在格式化SD卡的时候,可能会忽略一个选项,分配单元大小,如下图所示,这个其实就是我们常说的“簇”。在文件系统中,存储文件是以“簇”为单位进行存储的。就比如说一栋楼,将它划分为若干个房间,每个房间的大小一样,同时给每个房间一个房间号.这时,每个房间的大小,就是分配单元.
在建立分区时,会出现分配单元大小的选项。每个簇只能存放一个文件。文件就是按照这个簇的大小被分成若干块存储在磁盘上的。比如一个512字节大的文件,当分配单元为512字节时,它占用512字节的存储空间;一个513字节大的文件,当分配单元为512字节时,它占用1024字节的存储空间,但当分配单元为4096时,它就会占用4096字节的存储空间。所以,这也就解释了为什么有时候我们明明看SD卡或者U盘上还有一定容量的存储空间,却存不下文件的问题。
二、SD卡命令介绍
&&&&&&SD卡里,用到的所有命令都是6个字节,第一个字节为命令代号,紧接着的4个字节为该命令所需的参数,最后一个字节为校验。命令里,第一个字节可以通过命令数+0x40得到。如cmd8的第一个字节为0x48。
在SPI模式下,我们需要用到底命令如下表所示:
&关于这些命令,这里有几个注意事项:
1)CMD0的最后一个字节必须为0x95,因为SD卡刚上电还没有处于SPI模式,还需要这样一个校验的字节来校验,进入SPI模式之后,则不需要校验了,最后一个字节可以随意;
2)CMD55和CMD41(该命令也常称为ACMD41)必须一起使用,这里所说的两个一起使用是指两个命令必须连续发送,而不是先一直发送CMD55,收到正确的回复之后,再一直发送CMD41,,这样做的后果是一直收到0x05,不是收到0x00;此外,发送完CMD41之后,会先收到一个0x01,然后才是0x00;
3)读写SD卡时,SD卡和SDHC卡的地址信息是不同的,一个是以字节为单位,一个是以块为单位;读SD卡时,写入CDM17之后,要一直读,直道读到0xfe,说明后续的512字节是数据;写SD卡时,写进数据之后,回复为0x05,说明成功写入。
& & 这些命令对应的回复整理的还不太全面,有些命令的回复是好几个字节的,这里没有详细写出。
&三、开发过程
1、硬件方面
由于我们是采用SPI方式驱动SD卡,所以只需要用到4跟线,分别为片选信号线(CS)、数据输入线(DIN)、数据输出线(DOUT)和时钟线(CLK)。这里,我的这四根线都采用外部上拉的方式上拉了。设计的原理图如下图所示。这里需要注意的是,SD卡的数据输入应该接单片机的数据输出,SD的数据输出应该接单片机的数据输入。
&&在SPI模式下,我们需要用到的4个脚的信息可以从下表中获取,多于的一些脚在SPI模式下是用不到,这里所有的脚我都上拉了,其实有一些脚不上拉也没关系,而且MSP430有些型号内部可以设置上拉的。此外,SD卡一般有9个引脚,原理图里有11个引脚,主要是因为原理图里画的是卡槽,多出来的几个引脚是检测是否有卡,以及卡是否写保护的。
2、软件方面
& &软件方面,我们可以分为四个步骤:
先编写出利用SPI接口读写一个字节的函数
然后利用这些函数编写出写命令函数
利用写命令函数写出读写数据块以及初始化函数
移植FAT32文件系统
(1)读写一个字节的函数
该函数有两种方式实现,一个是利用单片机自带的SPI模块来实现,这种方式的好处是读写速度快,但是单片机上的SPI模块数量有限,这样不太灵活,另一个是利用普通IO实现,这样的好处是使用十分灵活,但是速度不够快,MSP430的IO的极限翻转速度大概在320K左右。
(2)写命令函数
写命令函数其实是调用写一个字节的函数,实现发送6个字节命令的效果,只是这里有一点需要注意,在写命令函数里,为了提高兼容性,应该先拉高片选信号,给8个周期的时钟信号之后,再拉低片选信号,开始发命令的操作。
(3)读写块函数
&读写块函数其实是调用写命令函数和读一个字节的函数,这里需要注意的有两点,一个就是上文提到的地址信息的问题,另一个就是在读写完块数据之后,需要拉高片选信号,并且再给8个周期的时钟信号,以提高稳定性。
(4)初始化函数
初始化函数其实是整个SD卡驱动里,最为重要的一个环节,在SD卡的初始化阶段里,为了能够识别出多种类型的SD卡(MMC卡、SD卡、SDHC卡等),需要调用多条命令,并且根据应答数据来判断是哪种类型的卡。在初始化的时候,需要注意的是要放慢SPI的速度,这样初始化的成功率会高一些。具体初始化的过程,后面我会再整理一下,做成一张图上传的~
(5)移植FAT32文件系统
有了上述的基础函数之后,就可以把FAT32文件系统移植过来了,只需要把底层的驱动函数改成自己写的驱动函数就可以了~
前段时间,想用MSP430在SD上实现FAT32文件系统,由于时间有限,自己只完成了SD卡的底层驱动这一部分。文件系统的实现,则要感谢znFAT的团队,因为上层的文件系统是移植的他们的znFAT。感觉znFAT的可移植性真的很强,而且很稳定,移植起来还是比较顺利的~大家如果想对FAT32文件系统有深入的了解的话,可以买znFAT代码编写者写的一本书看下,目前简单翻了一遍,感觉思路很清晰的~
最后要感谢网上众多技术达人对于SD卡驱动的总结,之前也遇到不少奇奇怪怪的问题,也是看很多他们的总结,才能顺利完成这个任务~
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。最近电脑总是蓝屏,求高手!!!成功解决问题追加100分 蓝屏时描述的是一个叫gameprotectnet.sys的文件_百度知道
最近电脑总是蓝屏,求高手!!!成功解决问题追加100分 蓝屏时描述的是一个叫gameprotectnet.sys的文件
Minidump&#92:
C: 768_1有助于描述该问题的文件;Users\Local&#92.2
区域设置 ID;Temp&#92.1: A1C1C901
OS Version.1;28-01;AppData&#92: 6:
BCCode: BD65F0A0
BCP1.7601:\Windows&#92: 6_1_7601
Service Pack: 2052有关该问题的其他信息;lenovo&#92.dmp
C:&#92以下是重启电脑后描述的 问题事件名称: 1_0
BCP4.768: BlueScreen
OS 版本.WER-
我有更好的答案
按默认排序
Windows\System32\drivers\GameProtectNet进入安全模式将该文件删除C:&#92
你好!首先声明,以下的解答并非网络复制,完全是本人实践与交流的精华!出现死机的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等。(上述代码通常是由有问题的驱动程序或系统服务造成的. )建议:请按如下方法排除解决:1、摸CPU的温度。是否过高。看散热。2、硬盘连线是否松动;无异常后,对硬盘进行查错处理;3、系统是否有病毒,建议安全模式下扫描杀毒; 4、把BIOS恢复出厂状态试试;5、装系统后硬件的驱动程序是否安装成功? 6、最好先重装操作系统; 7、如重装系统后仍有问题,则极可能是硬件不兼容所致; 8、向商家或周围熟悉电脑的朋友咨询一下也好,或许他们会给予帮助; 9、祝你好运! 望能帮到朋友你!
一般蓝屏代码或事件查看器里面的内容普通人是看不懂的,请将你在蓝屏前电脑的表现,和你操作说的详细些。下载什么软件、补丁,升级了什么硬件了吗?详细的说说蓝屏前你做了什么,可能就是这些操作引起的蓝屏的发生,有问题请追问我(我跟据你提供的信息重新回答你)。1、蓝屏前下载了什么软件、补丁、插件、驱动等全部卸载试试,如果是驱动不合适,请下载驱动精灵升级驱动。2、如果电脑有木马,请下载Win清理助手、金山卫士、360急救箱查杀木马。3、如果不经常出现蓝屏关机在开机就可以了,还是不行,请开机按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,在不行还原一下系统或重装系统。4、如果是硬件问题引起的,或超频了硬件将BIOS电池放电(恢复BIOS出厂默认值)建议插拔一下显卡、内存等硬件,清理一下电脑里的卫生,并且擦亮显卡、内存的金手指(在测试一下硬件的温度是否过高)。5、电脑在光驱读盘时被非正常打开可以导致蓝屏,一般将光盘重新放入光驱即可。电脑在带电插拔某设备时可以导致蓝屏,重启一下电脑修复或按上面第三项修复。6、还有就是硬盘是否有问题,用系统自带的功能修复一下或下载软件修复硬盘坏道,或格式化硬盘重新分区重装系统,还是不行就需要换硬盘了。7、最近升级了硬件,这些硬件与系统不兼容,比如:内存、显卡等,请更换硬件试试(到升级硬件的地方更换合适为止)。8、如果是硬件问题引起的,自己又找不出问题所在,建议到维修那里检修一下。9、玩游戏蓝屏,一般是游戏本身的问题,电脑的配置与游戏有冲突,显卡、显卡驱动不合适,CPU、显卡的温度过高,内存太小等引起的,另外就是在玩游戏、看视频时,同时在干别的操作最容易蓝屏,因此在玩游戏、看视频时不要在操作别的东西了(看视频蓝屏问题同上)。
一般蓝屏是自己不正确操作引起的,记住容易引起蓝屏的操作不做。电脑不要满负荷操作,就是在玩游戏、看视频时、下载时、看网页的同时在干别的操作最容易死机、蓝屏,因此在玩游戏、看视频、下载时、看网页时不要在操作别的东西了。
这个问题我以前经常遇到,,这个应该是硬件问题,,,建议,把内存条等硬件拆下检查金属接触点和插槽的接触点。。不要用超频,,再不行就重新装下系统,刷新BIOS。win7的话换换驱动的下载地址(下载工具,(驱动精灵比较好用),,如果是xp系统用不同的安装盘,。或者置换下系统,win7,win8,xp,vista,先试试我说的第一个,应该问题不大,以前我的电脑隔三差五就蓝屏。。。酒精擦了擦接触点,重装系统后一年半了没问题..
来自:求助得到的回答
我觉得是两个问题,第一个文件应该是与硬件有关系,所以你需要看一下那个硬件的驱动有问题。第二个我绝得是你安装过的游戏文件有问题。
跟驱动有关
前几天我弄网卡 也是这个蓝屏代码
360说的是玩私服会这样, 解决办法拔掉网线可以开机,用360急救强力模式扫,重起就ok了.或进入安全模式用360急救扫.
或者点击以下连接
那个才是高手:
他教怎么把 GameProtectNet.sys 这个驱动删掉
这个文件是游戏中的反外挂驱动文件,电脑右键管理,设备管理器,点击查看,显示隐藏设备,在非即插即用设备里,选择这个GamesGuardnet,然后右键卸载,关机。即可.我跟你一样的问题。我就是这样解决的。希望给你帮助。
MIRSF就这样
内存条松动
你肯定是玩私服吧
其他类似问题
蓝屏的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁电子工程世界-论坛中国最火的电子工程师交流社区}

我要回帖

更多关于 系统盘文件系统fat32 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信