Arduino 插入特定SD卡时,w5100屏蔽无法初始化以太网
Arduino IDE 1.8.9 macOS, 以太网lib 2.0.0, SD lib 1.2.4 Atmega2560+以太网屏蔽w5100 有个奇怪的问题。如果插入部分SD卡,则我的w5100屏蔽无法设置网络,而其他SD卡不会导致问题。所有SD卡均为256mb,并由SDFormatter格式化SD卡本身在这两种情况下都能正常工作。 该问题可通过简单草图重现: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
#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
。由于没有足够的样本(实际的-3,2差,1好),我不能说这是关键点SD\u-CARD\u-TYPE\u-SD1
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;
}
}