整合进入FatFs
在前文中提到过,如果需要所存储的数据能够在电脑上读取出来,需要建立文件系统,FatFs作为一个开源的文件系统具有很好的可移植性,在成功完成SD卡初始化,并借助实现过程对SPI通信、SD卡命令的发送与返回信息的接收这些基本操作有一个代码上的认识以后,下一步就需要将这些基本模块与FatFs文件系统进行整合,以完整实现数据存储以备后续读取的功能。
对于这个系统的完整说明请单击网页链接
为了简便起见这里仍然只挑重点说
需要移植方提供的函数
因为基本的系统框架FatFs是提供了的,但是针对不同的存储媒介需要有不同的一些基本函数,以下这张表中列写了需要自行编写的各个功能函数
其中,有三个函数是一直需要的
初始化
disk_initialize()
已经搞定了
disk_status()目前不清楚要什么,查看源代码可发现函数声明如下:
<span style="font-size:10px;">DSTATUS disk_status (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
DSTATUS stat;
int result;
switch (pdrv) {
case ATA :
result = ATA_disk_status();
// translate the reslut code here
return stat;
case MMC :
result = MMC_disk_status();
// translate the reslut code here
return stat;
case USB :
result = USB_disk_status();
// translate the reslut code here
return stat;
}
return STA_NOINIT;
}</span>
由此可见,该系统适用于ATA、MMC、USB接口的情况,此处只关心MMC的情况
那么diskstatus的返回值究竟能够取什么值?
/* Disk Status Bits (DSTATUS) */
#define STA_NOINIT 0x01 /* Drive not initialized */
#define STA_NODISK 0x02 /* No medium in the drive */
#define STA_PROTECT 0x04 /* Write protected */
根据定义,这个diskstatus返回值
<span style="font-size:10px;">DSTATUS</span>
是一个byte类型的八位变量,其中的第1,2,3位有意义,置位的话分别代表:
1:存储器未被初始化
2:存储器不存在
3:存储器写保护
那么这个 diskstatus() 需要调查这三个状态!
对应的命令分别为:
1:发送 CMD0 命令查看是否有反应确定是否初始化
2:这一位可以常0,肯定存在,或者和1联动
3:这个确实不知道
在伟大的CSDN上看到了一个良心作者的详细文章:解释了不少问题。
而另外一篇EEworld的帖子则分析了不少高级问题,可以留待以后查看
但是仍然卡在第一个问题之上,于是查了很多博客,发现大家普遍的无良做法如下啊!妹的直接就返回RES_OK啊!
好吧算了也不失为一种测试时的解决方案,先这么办吧
进一步的首先实现写然后实现读,因为所处理项目主要需要完成的就是写入数据存储起来