直接显示
Initializing SD card...Card failed, or not present
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt
error opening datalog.txt
。。。
这种情况是什么意思?已经按照要求格式化卡了
弘版,有FAT32的SD库可用,http://code.google.com/p/sdfatlib/downloads/list
MicroCao 发表于 2012-9-23 10:46 static/image/common/back.gif
弘版,有FAT32的SD库可用,http://code.google.com/p/sdfatlib/downloads/list
好东东~
弘毅 发表于 2012-9-23 10:52 static/image/common/back.gif
好东东~
那劳烦您更新一下教程啦,:lol
MicroCao 发表于 2012-9-23 10:58 static/image/common/back.gif
那劳烦您更新一下教程啦,
{:soso_e154:} 抽空玩玩更新进去
学习学习~~~
本帖最后由 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库第二次初始化就出错了。
也希望有熟悉的朋友帮忙回答一下,谢谢各位了
shenhaiyu 发表于 2012-9-28 14:15 static/image/common/back.gif
弘版,想问个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-28 19:28 static/image/common/back.gif
SD库使用了13,12,11,4这四个引脚
13是SCLK
谢谢~~~~
我用exists()测试SD卡是否拔出不管用,即使卡拔出了,依然能检测到拔出前存在的文件,而且能正常写入……还没测试能否读出,真是奇怪……
shenhaiyu 发表于 2012-9-29 11:14 static/image/common/back.gif
谢谢~~~~
我用exists()测试SD卡是否拔出不管用,即使卡拔出了,依然能检测到拔出前存在的文件,而且能正 ...
囧。。。。。。
弘毅 发表于 2012-9-29 18:44 static/image/common/back.gif
囧。。。。。。
弘版,你这样试试:
#include <SD.h>
const int chipSelect = 4;//设定CS接口
void setup()
{
Serial.begin(9600);//设置串口通信波特率为9600
Serial.print("Initializing SD card...");//串口输出数据Initializing SD card...
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {//如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");//与SD卡通信成功,串口输出信息card initialized.
}
void loop()
{
delay(10000);
if(SD.exists("datalog.txt")) {
Serial.println("exists test ok");
}
else{
Serial.println("exists test err");
}
}
运行后在串口监视器会每隔10秒钟看到一行“exists test ok”,但是如果这时把SD卡拔出,依然会“exists test ok”,而不是err,所以我就不知道初始化之后如何检测SD卡了……
我还发现,如果初始化之后没有文件读写操作,exists就不起作用,如果有读写操作,SD卡被拔出后会有提示:#include <SD.h>
const int chipSelect = 10;//设定CS接口
void setup()
{
Serial.begin(9600);//设置串口通信波特率为9600
Serial.print("Initializing SD card...");//串口输出数据Initializing SD card...
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {//如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");//与SD卡通信成功,串口输出信息card initialized.
}
void loop()
{
delay(10000);
if(SD.exists("datalog.txt")) {
Serial.println("exitst test ok");
File dataFile = SD.open("datalog.txt");
if (dataFile) {//打开datalog.txt文件
while (dataFile.available()) {//检查是否dataFile是否有数据
Serial.write(dataFile.read());//如果有数据则把数据发送到串口
}
dataFile.close();//关闭dataFile
}
else {
Serial.println("error opening datalog.txt");//如果文件无法打开串口发送信息error opening datalog.txt
}
}
else
{
Serial.println("exitst test err");
}
}
比如这个程序,插好卡初始化之后,至少读过一次卡之后,中途拔掉SD卡,exist会false……
但是此时再插入卡也不会认出来,而且无法再次初始化,只能重启……
为什么我的编译器显示SD未被定义呀...
请各位帮忙解答呀
楼主,为嘛我的1G,FAT格式的SD卡,初始化不成功:Q:Q
无趣 发表于 2012-12-13 08:40 static/image/common/back.gif
楼主,为嘛我的1G,FAT格式的SD卡,初始化不成功
额。。。传说中的挑卡?