1.非FAT格式下,读写U盘
如果我们不按照FAT格式读写U盘的话,其实很简单,我在以前的帖子中也一再坚持,就是将CF卡和U盘当作一个无限大的外部RAM,那么这种模式下,U盘和CF卡与普通的外部扩展RAM的区别就仅仅是读写U盘的时候,不能一个字节一个自己的来,必须一次512B,不能通过地址总线找到每一个RAM字节的存放地址,而必须是一个扇区一个扇区的来。如果能够接受这一点,那么,你就可以通过单片机读写U盘了。当然这还需要主意一些问题,就是你不能随意的存储和读写你的数据,你必须接受U盘的要求。其实这些要求也很简单,就是不能往FAT表的扇区写任何数据,否这,你的U盘就崩溃了,在WINDOWS下就识别不出来了,我就干过这种事情,往U盘的FAT表和FAT备份表写了一数据,最后的结果是U盘往PC机的USB口一插,计算机就死机,原因就是WINDOWS不能识别U盘,而U盘本身没有坏,就是说USB通信没有问题,有问题的是FLASH的扇区,让我写坏了,而写坏的部分恰恰是FAT表,这是一个灾难性的错误,解决的办法就是凭着各种资料,把FAT表的格式和数据通过单片机再写回去,呵呵,我用了一个上午的时间来拯救我那可怜的U盘。如果你注意了以上的问题,那么好,就可以准备用单片机读写U盘了。前面我也说了,用单片机读写U盘,必须一个扇区一个扇区的来。也就是说,我们读写的最小单位就是一个扇区512B。那么就必须要求你的单片机能够提供至少512B的RAM,我这里选用的是STC89C54RD,这个单片机能够满足我的要求,此单片机具体的信息可以查询,就不给厂家做广告了。那么就是读写的地址的问题了。此中模式下,最关键的问题就是用单片机把数据存进去,或者读出来,那么我们这个地址怎么设置,如果用汇编51的话,就是DPL1,DPH1,DPL0,DPH0怎么设置应该设置成什么?其实这也就是FLASH的地址,就是U盘数据的存放地址,如果我们用4个8位的数据来表示所有的FLASH的话,就是FFFFFFFF,那么我们寻址的范围就是200G,这么大的空间,我们怎么确定呢,jnmcu.com有些资料,可以查看。我在这里简单的说明一下:单片机写入地址=相关扇区号+32 转换成4个十六进制就可以,就是单片机的外部访问地址。其中最关键的就是相关扇区号,硬盘的存储单位不应该是扇区,而是“簇”,而单片机读写地址的关联却是扇区,应此我们还必须找清楚簇号和扇区号的关系。这种关系的找法有很多中,我参考了大量的资料总结了一下,就是FAT表的第一个扇区和第一个簇指的是同一个地方,哈哈,有的读者已经明白了,既然第一个扇区和第一个簇指的是同一个地方,那么他们的计算公式一相等,就可以得出簇和扇区的关系,在这里我总结的关系是:数据首扇区地址=(文件起始簇号-根目录簇)*每簇扇区数目+根目录扇区,这个关系是一个不变的关系,不管你是8M的U盘或者CF卡,还是200G的硬盘,这个关系肯定不变,有了这个关系,我们就可以根据簇琏来找扇区,找到扇区,转换成4个16进制的数据,就是单片机的读写地址了。至此就完成了单片机读写U盘的所有准备工作。但是这种模式下读写出来的数据不是FAT格式,但是却是一种实用,简单的读写方式,我觉得这种方式很好。
2.FAT格式下单片机读写U盘/cf卡
以上是本人在开发便携式心电监护仪中单片机读写U盘的一点心得和开发笔记,希望行家里手多多指正,也希望刚刚开始开发的同行多多交流
上一篇:MSP430G2553测试程序(温度检测)
下一篇:ISP和JTAG
推荐阅读最新更新时间:2024-03-16 14:28