极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

arduino学习笔记18 - SD卡读写实验

  [复制链接]
发表于 2012-6-5 15:15:25 | 显示全部楼层
直接显示
Initializing SD card...Card failed, or not present
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt
。。。
这种情况是什么意思?已经按照要求格式化卡了
回复 支持 反对

使用道具 举报

发表于 2012-9-23 10:46:48 | 显示全部楼层
弘版,有FAT32的SD库可用,http://code.google.com/p/sdfatlib/downloads/list
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-23 10:52:28 | 显示全部楼层
MicroCao 发表于 2012-9-23 10:46
弘版,有FAT32的SD库可用,http://code.google.com/p/sdfatlib/downloads/list

好东东~
回复 支持 反对

使用道具 举报

发表于 2012-9-23 10:58:28 | 显示全部楼层
弘毅 发表于 2012-9-23 10:52
好东东~

那劳烦您更新一下教程啦,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-24 22:13:32 | 显示全部楼层
MicroCao 发表于 2012-9-23 10:58
那劳烦您更新一下教程啦,

{:soso_e154:} 抽空玩玩更新进去
回复 支持 反对

使用道具 举报

发表于 2012-9-25 15:28:18 | 显示全部楼层
学习学习~~~
回复 支持 反对

使用道具 举报

发表于 2012-9-28 14:15:06 | 显示全部楼层
本帖最后由 shenhaiyu 于 2012-9-28 16:12 编辑

弘版,想问个SD库使用的问题。我在使用中发现三个问题不知道怎么解决:

1.SD库默认使用的端口是不是在库中的 Sd2PinMap.h,修改这个里面的内容就可以改默认端口号吧?还有SD库都使用了哪些端口啊?看说明即使不用10号口也要让10号口HIGH输出,这是为什么?

2. 1.0.1的SD库是不是支持FAT32了?看描述是支持的,我简单测试了一下能用,但是不知道下面一条问题是不是由于FAT32引起的。

3.SD卡初始化之后怎么才能确定卡是否还在插槽里?我成功初始化SD卡之后,程序运行过程中再把卡拔下来,程序居然还能继续读写SD卡,于是很想知道如何检测卡是否在插槽里,以及初始化之后如何再次初始化。我测试WaveHC的库就可以多次初始化SD卡,但只能读,没有写功能。而Arduino自带的SD库第二次初始化就出错了。

也希望有熟悉的朋友帮忙回答一下,谢谢各位了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-28 19:28:54 | 显示全部楼层
shenhaiyu 发表于 2012-9-28 14:15
弘版,想问个SD库使用的问题。我在使用中发现三个问题不知道怎么解决:

1.SD库默认使用的端口是不是在库 ...

SD库使用了13,12,11,4这四个引脚

13是SCLK
12是MISO
11是MOSI
4是CS

不使用10号口也要悬空,这个是指的只用官方W5100带SD卡扩展板的情况下,因为官方W5100板子,默认W5100的CS引脚是10号,如果不悬空就会和SD卡冲突,不过如果你单独用SD模块,就不存在这个问题。

FAT32前两天试了下,确实可以用了。

额。。。运行中把SD拔下来,检查是否在,我觉得可以用SD库下的exists()函数。
回复 支持 反对

使用道具 举报

发表于 2012-9-29 11:14:03 | 显示全部楼层
弘毅 发表于 2012-9-28 19:28
SD库使用了13,12,11,4这四个引脚

13是SCLK

谢谢~~~~
我用exists()测试SD卡是否拔出不管用,即使卡拔出了,依然能检测到拔出前存在的文件,而且能正常写入……还没测试能否读出,真是奇怪……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-29 18:44:55 | 显示全部楼层
shenhaiyu 发表于 2012-9-29 11:14
谢谢~~~~
我用exists()测试SD卡是否拔出不管用,即使卡拔出了,依然能检测到拔出前存在的文件,而且能正 ...

囧。。。。。。
回复 支持 反对

使用道具 举报

发表于 2012-9-30 00:06:36 | 显示全部楼层
弘毅 发表于 2012-9-29 18:44
囧。。。。。。


弘版,你这样试试:

  1. #include <SD.h>

  2. const int chipSelect = 4;  //设定CS接口

  3. void setup()
  4. {
  5.   Serial.begin(9600);  //设置串口通信波特率为9600

  6.     Serial.print("Initializing SD card...");  //串口输出数据Initializing SD card...
  7.   pinMode(10, OUTPUT);

  8.   if (!SD.begin(chipSelect)) {  //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
  9.     Serial.println("Card failed, or not present");
  10.     // don't do anything more:
  11.     return;
  12.   }
  13.   Serial.println("card initialized.");  //与SD卡通信成功,串口输出信息card initialized.

  14. }

  15. void loop()
  16. {
  17.   delay(10000);

  18.   if(SD.exists("datalog.txt")) {
  19. Serial.println("exists test ok");
  20. }
  21. else{
  22. Serial.println("exists test err");
  23. }


  24.   }
复制代码
运行后在串口监视器会每隔10秒钟看到一行“exists test ok”,但是如果这时把SD卡拔出,依然会“exists test ok”,而不是err,所以我就不知道初始化之后如何检测SD卡了……
回复 支持 反对

使用道具 举报

发表于 2012-9-30 00:29:08 | 显示全部楼层
我还发现,如果初始化之后没有文件读写操作,exists就不起作用,如果有读写操作,SD卡被拔出后会有提示:
  1. #include <SD.h>

  2. const int chipSelect = 10;  //设定CS接口

  3. void setup()
  4. {
  5.   Serial.begin(9600);  //设置串口通信波特率为9600
  6.   Serial.print("Initializing SD card...");  //串口输出数据Initializing SD card...
  7.   pinMode(10, OUTPUT);

  8.   if (!SD.begin(chipSelect)) {  //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
  9.     Serial.println("Card failed, or not present");
  10.     // don't do anything more:
  11.     return;
  12.   }
  13.   Serial.println("card initialized.");  //与SD卡通信成功,串口输出信息card initialized.
  14. }

  15. void loop()
  16. {
  17.   delay(10000);
  18.   if(SD.exists("datalog.txt")) {
  19.     Serial.println("exitst test ok");
  20.     File dataFile = SD.open("datalog.txt");
  21.     if (dataFile) {//打开datalog.txt文件
  22.       while (dataFile.available()) {  //检查是否dataFile是否有数据
  23.         Serial.write(dataFile.read());  //如果有数据则把数据发送到串口
  24.       }
  25.       dataFile.close();  //关闭dataFile
  26.     }  
  27.     else {
  28.       Serial.println("error opening datalog.txt");  //如果文件无法打开串口发送信息error opening datalog.txt
  29.     }
  30.   }
  31.   else
  32.   {
  33.     Serial.println("exitst test err");
  34.   }
  35. }

复制代码
比如这个程序,插好卡初始化之后,至少读过一次卡之后,中途拔掉SD卡,exist会false……

但是此时再插入卡也不会认出来,而且无法再次初始化,只能重启……
回复 支持 反对

使用道具 举报

发表于 2012-10-22 15:48:27 | 显示全部楼层
为什么我的编译器显示SD未被定义呀...
请各位帮忙解答呀
回复 支持 反对

使用道具 举报

发表于 2012-12-13 08:40:10 | 显示全部楼层
楼主,为嘛我的1G,FAT格式的SD卡,初始化不成功
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-13 21:50:59 | 显示全部楼层
无趣 发表于 2012-12-13 08:40
楼主,为嘛我的1G,FAT格式的SD卡,初始化不成功

额。。。传说中的挑卡?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 15:23 , Processed in 0.054498 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表