为了更加清楚的说明多扇区与单扇区读写的不同,单独开一贴进行详细的说明。
在移植FatFs文件系统时,发现为了提高SD卡的读写速度,需要一个多扇区读写的函数。当然很多人都会第一反应为,用循环调用单扇区读写函数不就能实现吗?如:
uint8 i;
for (i=0; i < count; i++)
{
MMCWriteSingleBlock(); // 单扇区写
MMCReadSingleBolck(); // 单扇区读
}
事实上的确可以这样实现,但是,如果是按照这样的方式实现就没有多扇区读写的优势了。速度是没有任何提升的。于是我们查阅SD卡技术资料可以得到如下时序:
先看看SD卡的单扇区与多扇区的读写时序,可以发现,其时序基本一直。只是多扇区读函数在读取完成后需要发送一个停止命令。实现函数如下:
查看时序,再对于一下函数非常容易理解,本人就不再细说了。其实SD卡写的函数也是一样的,先看看如下时序:
同样我们发现单扇区写和多扇区写的时序基本一致,只是多扇区写函数多了一个“send 'stop transmission token' ”。即停止令牌,函数如下:
对比以上时序和函数非常容易理解,不在叙述。
经过以上时序和函数的实现我们知道,多扇区的读写函数比用单扇区读写函数循环执行效率高很多,当然函数里边的一些代码进行适当的修改将会进一步提高执行效率,在此就不多说,有编程经验的网友都知道怎么更改。
[
本帖最后由 zhaojun_xf 于 2010-5-23 07:59 编辑 ]