数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2102|回复: 14

[Arduino] 求助: ESP8266 SD卡操作失败

[复制链接]
发表于 2022-10-3 17:31:44 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
接线和程序如下,
初始化   SD.begin(15)    返回就显示失败。  后面的也是返回失败。
TF卡在电脑上正常,现在不确定使用的SD模块是否正常,另一个SD模块正在快递中。

谁有成功的案例,求助解决。





  1. /*
  2. * 接线
  3.   Micro SD ---- ESP8266
  4. MOSI -  D7 ---GPIO 13
  5. ** MISO - D6 ---GPIO 12
  6. ** CLK - D5---GPIO 14
  7. ** CS - D8---GPIO 15

  8. */

  9. #include <SPI.h>
  10. #include <SD.h>


  11. void setup() {

  12.   pinMode(15,OUTPUT);
  13.       Serial.begin(115200);

  14. if( SD.begin(15))  //初始化SD,指定IO 15 是CS使能引脚   

  15. {
  16.   Serial.println("SD,OK1");  //初始化成功就显示成功
  17.   // return;
  18. }
  19.      else  Serial.println( "SD,ERR1" );   //初始化失败
  20.    
  21. }

  22. void loop() {

  23.       delay(3000);     //每延时3秒测试一次
  24.       if(SD.exists("123"))
  25.       {
  26.         Serial.println("SD,OK2");
  27.         
  28.       }

  29.      else Serial.println("SD,ERR2");
  30. }
复制代码



发表于 2022-10-3 18:06:55 | 显示全部楼层
单步跟踪下呗,另外既然用了库就把库的内容也发上来啊,你这发的和没发一样
回复 支持 反对

使用道具 举报

发表于 2022-10-3 19:56:42 | 显示全部楼层
用的哪个SD.h?我是esp32,默认的编译不通过,提示说什么有几个版本,版本不对什么的,后来改成esp32库中的那个才行。
然后我觉得还是MicroPython用着方便,虽然不知怎么用自带的machine.SDCard库也不成功,还得找个单独sdcard.py驱动才能用

回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-3 20:18:44 | 显示全部楼层
本帖最后由 广东梁百万 于 2022-10-3 20:19 编辑
ccy0921 发表于 2022-10-3 19:56
用的哪个SD.h?我是esp32,默认的编译不通过,提示说什么有几个版本,版本不对什么的,后来改成esp32库中的 ...

我用ESP32开发板试过也不行, 方便的话发你的程序上来看看,我再用ESP32试试,
还有那个ESP32,你的引脚是怎样接的?


回复 支持 反对

使用道具 举报

发表于 2022-10-3 20:27:53 | 显示全部楼层
广东梁百万 发表于 2022-10-3 20:18
我用ESP32开发板试过也不行, 方便的话发你的程序上来看看,我再用ESP32试试还有那个ESP32,你的引脚是怎样 ...

就是有两个SD.h库,我把自带的那个改名了,默认就用esp32的库了,至于程序就是用的示例程序SD(esp32)/SD_test那个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-3 20:39:12 | 显示全部楼层
ccy0921 发表于 2022-10-3 20:27
就是有两个SD.h库,我把自带的那个改名了,默认就用esp32的库了,至于程序就是用的示例程序SD(esp32)/SD_ ...

示例程序SD(esp32)/ 的文件头是  
#include "FS.h"
#include "SD.h"
#include "SPI.h"

我现在再试试这个示例程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-3 20:52:33 | 显示全部楼层
再次用ESP32开发板和 SD(ESP32) 例程试过,  能读出SD卡的大小信息了。
接线与之前网上搜索的有不同,
这次接线是  

SD卡----------ESP32开发板
MOSI----------GPIO23
MISO----------GPIO19
CLK------------GPIO18
CS-------------GPIO5
回复 支持 反对

使用道具 举报

发表于 2022-10-3 22:33:25 | 显示全部楼层
本帖最后由 devcang 于 2022-10-3 22:36 编辑

可以试试把8266中 GPIO15  换别的。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +12 收起 理由
广东梁百万 + 12 感谢回复

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2022-10-4 19:49:39 | 显示全部楼层
最近我也偶尔在玩esp8266,读写SD卡的简单操作应该是容易实现的,感觉楼主代码中的问题应该是在第34条: if(SD.exists("123")),如果你事先在SD卡中添加了文件123的话,那势必应该是带有尾缀的,如果是文本文件的话应该是123.txt,可以将第34条改成if(SD.exists("123.txt")),再试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-4 20:48:19 | 显示全部楼层
慕名而来 发表于 2022-10-4 19:49
最近我也偶尔在玩esp8266,读写SD卡的简单操作应该是容易实现的,感觉楼主代码中的问题应该是在第34条: if ...

这条改过成123.txt,也按8楼的接法改过CS脚到GPIO5,都不行,程序到跑第21行就转到第27行返回失败。
ESP8266目前的SD卡试验还是失败的。

我换了ESP32开发板,用6楼的文件头和7楼的接线法,使用Arduino-  SD(ESP32) 例程测试成功。
回复 支持 反对

使用道具 举报

发表于 2022-10-4 21:04:47 | 显示全部楼层
广东梁百万 发表于 2022-10-4 20:48
这条改过成123.txt,也按8楼的接法改过CS脚到GPIO5,都不行,程序到跑第21行就转到第27行返回失败。
ESP8 ...

用我的代码试试看,而后再找找毛病。
回复 支持 反对

使用道具 举报

发表于 2022-10-4 21:25:19 | 显示全部楼层
本帖最后由 慕名而来 于 2022-10-4 21:50 编辑

实验系统为:NODEMCU+SD卡模块(含三态缓冲器LVC125A)+1G的CF卡。
采用IDE自带示例程序测试,示例如下:



通讯接口为:
MOSI=PIN13=D7
MISO=PIN12=D6
CLK=PIN14=D5
CS=PIN4=D2
需要注意的是不能采用示例中定义的接口,因为那是对应AVR模块的你,对于ESP8266应该按照SPI.ccp中的定义。
下面粘贴这段示例代码:

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {//等待串口打开后才执行下面的操作
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");//正在初始化SD卡

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");//初始化失败
    while (1);
  }
  Serial.println("initialization done.");//初始化已完成

  if (SD.exists("example.txt")) {//示例.txt
    Serial.println("example.txt exists.");//示例txt存在
  } else {
    Serial.println("example.txt doesn't exist.");//示例txt不存在
  }

  // open a new file and immediately close it:打开新文件并立即关闭
  Serial.println("Creating example.txt...");//创建example.txt
  myFile = SD.open("example.txt", FILE_WRITE);//示例txt“,文件_写入//打开某文件,mode:FILE_READ/FILE_WRITE,返回true/false
  myFile.close();

  // Check to see if the file exists:
  if (SD.exists("example.txt")) {//示例.txt//判断某文件夹是否存在函数
    Serial.println("example.txt exists.");//示例txt存在
  } else {
    Serial.println("example.txt doesn't exist.");//示例txt不存在
  }

  // delete the file:
  Serial.println("Removing example.txt...");//删除example.txt
  SD.remove("example.txt");//删除操作

  if (SD.exists("example.txt")) {//exists=存在
    Serial.println("example.txt exists.");//示例txt存在
  } else {
    Serial.println("example.txt doesn't exist.");//示例txt不存在
  }
}

void loop() {
  // nothing happens after setup finishes.
}

操作过程是先来读取文件example.txt,如果没有就建立这个文件而后再删除这个文件。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +18 收起 理由
广东梁百万 + 18

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-5 21:37:47 | 显示全部楼层
本帖最后由 广东梁百万 于 2022-10-5 22:07 编辑
慕名而来 发表于 2022-10-4 21:25
实验系统为:NODEMCU+SD卡模块(含三态缓冲器LVC125A)+1G的CF卡。
采用IDE自带示例程序测试,示例如下:

按你例程下载,还是失败。
暂时放弃这个ESP8266的SD卡学习, 转向ESP32的SD卡操作,今晚能用ESP32对SD卡的创建和删除文件。
下一目标是学习wifi功能的使用
回复 支持 反对

使用道具 举报

发表于 2022-10-6 19:26:56 | 显示全部楼层
广东梁百万 发表于 2022-10-5 21:37
按你例程下载,还是失败。
暂时放弃这个ESP8266的SD卡学习, 转向ESP32的SD卡操作,今晚能用ESP32对SD卡的 ...

改用ESP32也可以,但8266这边还是要检查8266的与SD卡的连线是否有问题,8266和SD卡的工作状态是否正常,另外有经验表明上述测试所用的CF卡不要大于2G,其他我就不知道了,因为我的8266的SPI接口已经驱动过LCD12864和TFT彩屏了,所以我的SD卡测试是一次性就成功了,此后还实验了读出SD卡根目录的文件在串口中显示出来并标注文件大小,在SD卡中打开一个文件并串口输出显示文件内容,这些都是没有问题的,接下来的测试就是读取SD卡中的bmp图片数据并在TFT彩屏上显示图片。

打赏

参与人数 1家元 +12 收起 理由
广东梁百万 + 12 感谢回复

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2022-10-7 21:41:23 | 显示全部楼层
SD卡还是用文件系统fatfs之类的驱动试过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-26 02:54 , Processed in 0.124801 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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