393_Arduino SD卡驱动库实现分析-全局接口

         全部的学习汇总: https://github.com/GreyZhang/SdFatFs

         对着代码,理解一下做一个SD卡驱动实现所需要的一些功能。代码是用C++实现的,这次了解的主要内容应该是class中的public部分。

         我看了一下,代码中这个类的定义挺大。因此,代码分片段一点点来看。

393_Arduino SD卡驱动库实现分析-全局接口

         接下来,直接来一个逐行分析。

  1. 179,是这个类的一个构造函数,指定了一部分成员的初始化数值;
  2. 180,获取SD卡的容量大小;
  3. 181,指定第一块和最后一个块之后,执行擦除;
  4. 182,擦除单个块使能;(多个块的才出为什么没有类似的接口?是在反复调用这个接口吗?)
  5. 186,返回错误码;
  6. 190,返回错误数据(是否是详细的错误信息?);
  7. 197,初始化,主要是SPI的速度和片选,无需参数的默认处理;
  8. 205,也是初始化,但是从实现上看可以理解为修改SPI的波特率;
  9. 208,指定波特率和片选的初始化;

393_Arduino SD卡驱动库实现分析-全局接口

  1. 209,部分块的读取,参数是一个u8,返回值没有。这个主要是一个动作执行接口?
  2. 211,这是一个纯函数,也是一个内联函数,返回一个成员值。作用又是什么呢?
  3. 214,读取块,把指定的块读取到指定的地址;
  4. 215,读取数据,指定了块、偏移量、读取的数据量和存储地址;
  5. 221,读取CID,并且填充到指定的存储。结合之前的教程,这种函数叫做修改器,或者填充器。
  6. 227,读取卡的CSD,与CID类似。
  7. 230,读取结束。猜测这个应该是一个SPI的操作?
  8. 231,设置时钟速度,应该也是SPI的操作。
  9. 233,使用SPI的库的时候,设置SPI时钟的方法;
  10. 236,卡的类型获取,也是一个内联函数。
  11. 239,写入一个块,默认是一种阻塞方式;
  12. 240,写入数据;这样会写入到哪个块呢?
  13. 241,指定写入的块编号和预擦除的块,启动写入;
  14. 242,写入停止;
  15. 243,判断是否忙碌;

以上是SD卡操作的基本方式,从设计来说至少可以知道满足一个文件系统的设计还是够用的了。