【发布时间】:2020-10-08 16:03:50
【问题描述】:
我试图找出我的代码的问题,而不是简单的,它不起作用。接线似乎都是正确的,我怀疑是软件问题,但我自己找不到任何运气。我还验证了该卡是否良好且可写。
#include <SPI.h>
#include <SD.h>
// HSPI
#define HSPI_SCLK 14
#define HSPI_MISO 4
#define HSPI_MOSI 13
#define HSPI_CS 2
SPIClass * hspi = NULL;
String dataString =""; // holds the data to be written to the SD card
File sensorData;
void setup() {
hspi = new SPIClass(HSPI);
hspi->begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_CS); //SCLK, MISO, MOSI, SS
pinMode(HSPI_CS, OUTPUT); //HSPI SS
Serial.begin(115200);
// see if the card is present and can be initialized:
if (!SD.begin(HSPI_CS)) {
Serial.println("Card failed, or not present");
}
if (SD.exists("data.csv")) {
Serial.println("data.csv exists.");
}
else {
Serial.println("data.csv doesn't exist.");
}
// open a new file and immediately close it:
Serial.println("Creating data.csv...");
sensorData = SD.open("data.csv", FILE_WRITE);
sensorData.close();
// Check to see if the file exists:
if (SD.exists("data.csv")) {
Serial.println("data.csv exists.");
}
else {
Serial.println("data.csv doesn't exist.");
}
while(1);
}
void loop() {
}
这是在 TTGO T-Beam 上运行的。我正在为 SPI 指定引脚,因为默认引脚不可用,因为它们与 LoRa 芯片集成。我对使用 SPI 不是很熟悉,这种方法对我来说是新的,但我在网上看到了很多关于它的文档。
我怎样才能弄清楚为什么我没有读/写到我的 SD 卡?
【问题讨论】:
-
“我正在为 SPI 指定引脚,因为默认引脚” - 你是什么意思?您不能只使用任意引脚,除非这是 SPI 主机的 bitbanged 实现。你也没有告诉任何关于失败的方式。我猜它编译,它是一个运行时错误?串口上是否打印了任何调试消息?
-
正如我从文档和其他代码库中了解到的那样,您可以为 SPI 分配自己的引脚。如果这不正确,那么它会让我回到第 1 方,只是弄清楚我可以/应该使用哪些引脚。代码确实可以编译,但我没有运气与我的 microsd 读/写器交互。我检查了卡和接线。我认为问题与代码有关。
-
已经多次告知 SPI MMC ab使用 SPI 协议。您确实必须为此模式提供适当的硬件和软件支持。 SPI 总线物理上允许您并行连接设备。 CS(芯片选择)是对它们的序列化访问。当然,在以足够高的频率添加许多设备之前,您必须考虑线路的阻抗。