Ethernet.begin() работает только с удаленной SD-картой - почему?

Когда я запускаю этот код на своем W5100 Ethernet Shield :

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  

void setup() {
  Ethernet.begin(mac);
}

это работает только тогда, когда SD-карта была удалена из щита!


Мне потребовались дни, чтобы найти эту ошибку. С установленной SD-картой работает только полная начальная установка :

Ethernet.begin(mac, ip, dns, gateway, subnet); 

Официальная документацияEthernet.begin() ничего не говорит об этой проблеме. Почему он полностью работает только при удаленной SD-карте? Это "ошибка документации"?

Какая у тебя версия щита?
Если вы нашли ответ, вы должны опубликовать его @powtac, а не указывать в своем вопросе. Вместо этого ответьте на свой вопрос.
@Kortuk Он ищет, где это задокументировано / почему это происходит, а не обходной путь.
Какую операционную систему ты используешь, @powtac?
@taco Я использую Win7 64 с Arduino IDE 1.0.4.

Ответы (3)

Согласно странице Arduino Ethernet Shield :

Обратите внимание, что, поскольку W5100 и SD-карта совместно используют шину SPI, одновременно может быть активна только одна из них. Если вы используете оба периферийных устройства в своей программе, об этом должны позаботиться соответствующие библиотеки. Однако, если вы не используете одно из периферийных устройств в своей программе, вам нужно явно отменить его выбор. Для этого с SD-картой установите контакт 4 как выход и напишите на него высокий уровень. Для W5100 установите цифровой контакт 10 как высокий выход.

И если вы используете первую версию платы:

Первоначальная версия шилда содержала полноразмерный слот для SD-карты; это не поддерживается.

Итак, чтобы использовать оба, вам нужно менять состояние контактов 4 и 10 каждый раз, когда вы переключаетесь?
Оказывается так. Хотя «об этом должны позаботиться соответствующие библиотеки», я считаю, что это должно делаться автоматически с помощью встроенных библиотек.

Вы можете сообщать об ошибках с кодовой базой здесь (похоже, они переместились из кода Google в Github).

Судя по этому отчету , похоже, что третья сторона добавила поддержку DHCP, поэтому я бы сообщил о проблеме, чтобы убедиться, что это не ошибка.

Судя по этому отчету , похоже, что вы используете плохую документацию .

Возможно связано: github.com/arduino/Arduino/pull/1334

Кевин Марк дал очень хороший ответ, почему ваш сетевой экран не работает с SD. Вот ответ, что сделать, чтобы заставить его работать.

Как избежать путаницы SD-карты и W1500 SPI на Ethernet Shield?

Это больше похоже на комментарий и ответ только по ссылке, который здесь не одобряется. Если вы хотите внести свой вклад, разместите больше информации и, конечно же, укажите авторство.