Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 插入特定SD卡时,w5100屏蔽无法初始化以太网_Arduino_Arduino C++ - Fatal编程技术网

Arduino 插入特定SD卡时,w5100屏蔽无法初始化以太网

Arduino 插入特定SD卡时,w5100屏蔽无法初始化以太网,arduino,arduino-c++,Arduino,Arduino C++,Arduino IDE 1.8.9 macOS, 以太网lib 2.0.0, SD lib 1.2.4 Atmega2560+以太网屏蔽w5100 有个奇怪的问题。如果插入部分SD卡,则我的w5100屏蔽无法设置网络,而其他SD卡不会导致问题。所有SD卡均为256mb,并由SDFormatter格式化SD卡本身在这两种情况下都能正常工作。 该问题可通过简单草图重现: #include <SPI.h> #include <SD.h> #include <Etherne

Arduino IDE 1.8.9 macOS, 以太网lib 2.0.0, SD lib 1.2.4

Atmega2560+以太网屏蔽w5100

有个奇怪的问题。如果插入部分SD卡,则我的w5100屏蔽无法设置网络,而其他SD卡不会导致问题。所有SD卡均为256mb,并由SDFormatter格式化SD卡本身在这两种情况下都能正常工作。

该问题可通过简单草图重现:

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

#define PIN_SD 4

void setup() {
  
  Serial.begin(115200);

  if (!SD.begin(PIN_SD)) {
    Serial.println("SD fail");
  }

  pinMode(PIN_SD, OUTPUT);
  digitalWrite(PIN_SD, HIGH);

  byte mac[6] = {0x52, 0xa0, 0xe9, 0x90, 0x47, 0x28};
  if (Ethernet.begin(mac)) {
    Serial.println(Ethernet.localIP());
  }
  else
  {
    Serial.println("Net Fail");
  }
  
}

void loop() {
  // put your main code here, to run repeatedly:

}
以下是具有良好SD卡的串行输出

w5100 init
Wiznet soft reset
0
mr=0
Wiznet soft reset
0
mr=0
w5100.cpp: detect W5100 chip
Wiznet soft reset
0
mr=0
chip is W5100
w5100 found
172.10.0.70
以下是有问题的SD卡的串行输出

w5100 init
Wiznet soft reset
FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
Wiznet soft reset
FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
w5100.cpp: detect W5100 chip
Wiznet soft reset
FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
mr=FF
Net Fail
在异常情况下,
MR
在软复位前后保持
0xff

有什么想法吗

SD卡初始化似乎会导致内存中的某个地方损坏/溢出。我试图找出两组SD卡之间的区别。目前:

  • 如果用同一个适配器将文件从mac复制到SD卡,写坏卡的速度会快得多
  • 通过SD库中的额外输出,我发现好的卡是
    SD\u-CARD\u-TYPE\u-SD2
    ,坏的卡是
    SD\u-CARD\u-TYPE\u-SD1
    。由于没有足够的样本(实际的-3,2差,1好),我不能说这是关键点
Sd2Card.h

/** Standard capacity V1 SD card */
uint8_t const SD_CARD_TYPE_SD1 = 1;
/** Standard capacity V2 SD card */
uint8_t const SD_CARD_TYPE_SD2 = 2;
/** High Capacity SD card */
uint8_t const SD_CARD_TYPE_SDHC = 3;
更新20200701:

我有更多的SD卡要测试。结果证明SD卡类型SD1是不相关的,因为一些好的卡是SD卡类型SD1

看起来问题只发生在具有相同芯片/批次的卡上。文件系统参数完全相同。所以可能是SD芯片的问题

Card type:         SD1
Clusters:          15608
Blocks x Cluster:  32
Total Blocks:      499456

Volume type is:    FAT16
Volume size (Kb):  249728
Volume size (Mb):  243
Volume size (Gb):  0.24
更新20200703

问题实际上来自文件
Sd2Card.cpp

  while ((status_ = cardCommand(CMD0, 0)) != R1_IDLE_STATE) {
    unsigned int d = millis() - t0;
    if (d > SD_INIT_TIMEOUT) {
      error(SD_CARD_ERROR_CMD0);
      goto fail;
    }
  }

只要用坏SD卡调用
cardCommand(CMD0,0)
,以太网就会失败。

您好,这个问题有进展吗?您好,这个问题有进展吗?
  while ((status_ = cardCommand(CMD0, 0)) != R1_IDLE_STATE) {
    unsigned int d = millis() - t0;
    if (d > SD_INIT_TIMEOUT) {
      error(SD_CARD_ERROR_CMD0);
      goto fail;
    }
  }