393_Arduino SD卡驱动库实现分析-全局接口
全部的学习汇总: https://github.com/GreyZhang/SdFatFs
对着代码,理解一下做一个SD卡驱动实现所需要的一些功能。代码是用C++实现的,这次了解的主要内容应该是class中的public部分。
我看了一下,代码中这个类的定义挺大。因此,代码分片段一点点来看。
接下来,直接来一个逐行分析。
- 179,是这个类的一个构造函数,指定了一部分成员的初始化数值;
- 180,获取SD卡的容量大小;
- 181,指定第一块和最后一个块之后,执行擦除;
- 182,擦除单个块使能;(多个块的才出为什么没有类似的接口?是在反复调用这个接口吗?)
- 186,返回错误码;
- 190,返回错误数据(是否是详细的错误信息?);
- 197,初始化,主要是SPI的速度和片选,无需参数的默认处理;
- 205,也是初始化,但是从实现上看可以理解为修改SPI的波特率;
- 208,指定波特率和片选的初始化;
- 209,部分块的读取,参数是一个u8,返回值没有。这个主要是一个动作执行接口?
- 211,这是一个纯函数,也是一个内联函数,返回一个成员值。作用又是什么呢?
- 214,读取块,把指定的块读取到指定的地址;
- 215,读取数据,指定了块、偏移量、读取的数据量和存储地址;
- 221,读取CID,并且填充到指定的存储。结合之前的教程,这种函数叫做修改器,或者填充器。
- 227,读取卡的CSD,与CID类似。
- 230,读取结束。猜测这个应该是一个SPI的操作?
- 231,设置时钟速度,应该也是SPI的操作。
- 233,使用SPI的库的时候,设置SPI时钟的方法;
- 236,卡的类型获取,也是一个内联函数。
- 239,写入一个块,默认是一种阻塞方式;
- 240,写入数据;这样会写入到哪个块呢?
- 241,指定写入的块编号和预擦除的块,启动写入;
- 242,写入停止;
- 243,判断是否忙碌;
以上是SD卡操作的基本方式,从设计来说至少可以知道满足一个文件系统的设计还是够用的了。