论坛» 嵌入式开发» MCU

如何让单片机轻松读写U盘

工程师
2008-03-17 09:29 1楼

FAT16 NTFS等格式的随意读写困扰不少同行.其实单片机读写U盘主要的是找到接口芯片,象NSL912,CH375等都是非常好用的芯片.但是找到接口芯片还不行.除非你用厂家提供的程序,那需要你来调整单片机适应他们的设置,这个过程也是麻烦的,并且无法从底层的接口来掌握.刚才说,找到单片机读写U盘的接口芯片后,还需要了解硬盘的分区格式和数据接口,在此我向大家推荐一本书<<硬盘扇区读写技术>>机械工业出版社宋群生主编的.这本书很详细的向大家讲了硬盘的分区格式和数据格式包括,FAT FDT等,但是还是需要大家注意,就是在计算机上如何了解U盘的数据存放格式,网站jnyldz.com有资料可以参考.就是在读写扇区的时候,一定要注意硬盘接口的问题.当我们往U盘里面写数据的时候,需要找到文件的扇区地址,其实在硬盘里面,文件的存放格式是以簇的形式存放的.那么,受限根据FAT表里面的内容找到首簇,根据根目录下的FDT表里面的内容找到文件的第一簇存放位置就可以往需要的位置存些数据,注意硬盘是以扇区为读写单位的,所以,如果我们需要往硬盘里面写少于512字节的时候,就需要将U盘里面的一个扇区(目标)的内容读出来.讲需要存写的数据写到缓冲区,这就需要你的单片机系统有512字节的RAM,这对于一个单片机来说是比较困难,那么我们可以扩展一片6116,62256,等RAM,在此一片6116就可以了.对于读扇区的话,那就和写扇区相似了,一次必须读够512个字节.对于单片机读写U盘,关键的问题就是找到我们的目标扇区,找到目标扇区,转换成单片机的地址,这样我们读写U盘就像读写外部的RAM直接用一条指令:MOVX @DPTR,#DATA,或者 DATAPORT=DAT;就可以了.但是如何将U盘的扇区找到就是我们面临的最大问题,刚才我已经简要的说明,就是先找到FAT表,读出有用的数据,根据这些数据计算出文件所在地簇,根据簇和扇区的数学关系,就可以找到文件的扇区,这样对于一个扇区(512B)你就可以随心所欲的读写了.还有一个关键问题就是需要在计算机上了解我们到底通过单片机把数据存放到U盘的什么位置了,我们找到的扇区到底对不对.还有一种情况就是我们明明通过单片机把数据写到U盘里面了,但是还是通过WINDOWS,无法识别出来,这就需要一个硬盘扇区分析软件,jnyldz.COM上有详细的说明.通过这个软件,我们可以清清楚楚地看到U盘的数据格式,包括FAT表的内容,FDT表的内容FAT的BPB表的内容 等相关的扇区地址,和数据区的地址都可以看出来.只要大家掌握了这些就可以用单片机随意的读写你的U盘了.并且通过这种方式读写,不用厂家提供的封装好了的子程序或者函数.我们不用担着那些子程序,和函数的DEBUG和面临升级的麻烦,应为程序都是你写的你想怎么升级就怎么升级.以上是鄙人的一点心得,希望大家批评指教。

助工
2008-03-17 12:18 2楼
不太明白,收藏了
工程师
2008-03-17 13:10 3楼

写的很好,心得体会比较深刻,再接再厉

助工
2008-03-18 22:39 4楼

写的不错,希望能把NSL912、CH375这类芯片的性能介绍下。是不是用它们就不用关心usb传输协议了?

助工
2008-03-20 16:39 5楼

研究研究~

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]