【发布时间】:2014-02-14 22:34:11
【问题描述】:
我正在尝试使用来自 spark fun 的 SD 卡模块和 Arduino Mega2560 运行一个简单的程序。这是我目前使用的程序:
#include <SD.h>
const int chipSelect = 10;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(53, OUTPUT);
digitalWrite(10, HIGH);
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
}
void loop()
{
String dataString = "";
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ",";
}
}
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
else {
Serial.println("error opening datalog.txt");
}
}
我收到的错误说: 正在初始化 SD 卡...卡失败,或不存在 打开 datalog.txt 时出错
【问题讨论】:
-
您是否有任何独立确认模块到 Arduino 的接线是正确的,并且使用的引脚是软件所期望的(尤其是选择线)?您是否考虑过 mega 和 uno 上的硬件 SPI 引脚之间的差异?
-
如果我更改 pinMode(53, OUTPUT),此代码适用于 Arduino Uno;到 pinMode(8,输出)。但是,当我尝试使用 Mega2560 时,我们遇到了问题。
-
我昨天只看了一眼文档,但我相信两个板之间的 SPI 引脚可能都不同,所以您可能需要检查您是否确实将卡连接到了正确的引脚在一个巨型。
-
所以实际上,我查看了两个板的 SPI 引脚。 MEGA SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS) 和 Uno SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)。我的问题是你将如何连接它?我必须更改代码还是必须更改硬件???问题是 sd 卡模块位于整个 arduino 上,所以如果我必须使用 PIN 53,我怎么知道我必须连接哪个引脚???
-
我对 Arduino Mega 不是很熟悉,但听起来那个盾牌并不是真正的兼容。您的选择是不物理连接它,而只进行电气连接(或切割和修改走线)。 (实际上,如果您确保将屏蔽连接到的引脚设置为输入,您可以简单地添加一个额外的飞线连接到带有您需要的 SPI 信号的引脚)。或者,您可以找到或修改草图以在任意引脚上使用 bit-bang SPI,而不是硬件 SPI 外设的引脚,但这会更慢。