最近拿到一个项目,关于FAT32的。以前搞过fatfs的移植,那会也没怎么关注效率。这次拿到的是一个已经移植好的usb 1.1的协议,而且已经有了文件存储协议FAT32,基础移植库是znfat。
刚开始看的时候,项目做出来的效率很低,也就是20KByte/s的速度。很低。
不是很懂得USB bulk-only的协议,大致扫了一遍,略微修改了一些明显占用处理时间的地方,同时删除了一些没有效用的逻辑部分,达到了3.3S,100kByte数据,速度是30KByte/s。当然这都不是主要的,主要的是后面关于FAT32协议部分的优化
接触过两个FAT32协议库了,以前也看过FAT32标准协议,这次趁着接触znfat,也记录下自己的学习历程。
自己做的上个平台,由于底层USB驱动不错,所以FAT32协议我移植上去之后,速度就已经达到200KByte/s了,所以那会也没关注与FAT32的优化,新接触这个,确实USB底层通信协议略差一些,用的也是USB1.1,本身也略慢一些。
看这两个FAT32协议,发现跟底层USB驱动对接的,主要就是一个读函数,一个写函数。disk_read,disk_write。均是按block来读和写。
我测试了下新平台的disk_write的效率,不考虑FAT32协议,100KBytes数据,一次性通过disk_write连续写入,耗费时间约为0.4s.也就是说,裸USB速度是250KByte/s。这个速度是在我前面已经初步优化过USB协议及逻辑结构之后的速度。同时做了另外一个测试,就是将这100KByte数据,按最小单位block(512字节),分多次写入磁盘,得出的结论是1.4s,同样都是通过disk_write写入数据,发现一次性写入跟多次性写入数据差别就是倍数关系了。所以disk_write里面也有很大的优化空间。
跟进disk_

最低0.47元/天 解锁文章
762

被折叠的 条评论
为什么被折叠?



