W5100 + SD-модуль - не взлетают вместе

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Приветствую!

Что есть в наличии:

http://ru.aliexpress.com/item/TOP-Mini-W5100-LAN-Ethernet-Shield-Network...

http://ru.aliexpress.com/item/New-Arrival-Mciro-SD-TF-Card-Memory-Shield...

Юзаю Arduino mega, оба девайса сидят на SPI, CS для W5100 - пин 10, CS для SD-модуля - пин 53. Проблема в том, что W5100 не взлетает, если SD-модуль физически воткнут в макетку. Скетч - простейший:

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

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 0, 40);
EthernetServer server(80);

void setup() {

Serial.begin(57600);

 if(!SD.begin(53))
 {
  Serial.println("Unable to init SD card!");
 }
 else
  Serial.println("SD card inited!");

 Serial.println("Try using DHCP...");
  if(!Ethernet.begin(mac))
  {
    Serial.println("DHCP failed, start with local IP...");
    Ethernet.begin(mac, ip);
  }
    
  server.begin();
  
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  Serial.print("dnsServerIP: ");
  Serial.println(Ethernet.dnsServerIP());
  Serial.print("subnetMask: ");
  Serial.println(Ethernet.subnetMask());
  Serial.print("gatewayIP: ");
  Serial.println(Ethernet.gatewayIP());

}

void loop() {}

Поведение:

1. Если закомментировать код инициализации SD-модуля, то всё виснет на первом Ethernet.begin. Если инициализировать SD-модуль, то по DHCP вызов неуспешен, также второй вызов Ethernet.begin не проходит - всё, кроме Ethernet.localIP(), соскакивает на 255.255.255.255.

Если SD-модуль физически выдрать с макетки и нажать reset на дуне, то W5100 успешно получает настройки по DHCP.

Подозреваю, что кто-то (скорее всего SD-модуль) просаживает линии MOSI и MISO так, что дальнейшая работа W5100 становится невозможна. Однако, этот же SD-модуль уже несколько месяцев успешно крутится вместе с LCD-экраном ST7920 (там, правда, к экрану только MOSI подключено, т.к. читать с него без надобности) - всё работает чётко: экран кажет, на SD пишутся логи.

Проблему проверял на выхолощенном тесте: только arduino mega и два упомянутых модуля на макетке. Пробовал принудительно рулить пинами CS каждого модуля - без шансов на успех, помогает только выдёргивание SD-модуля с макетки. Осциллографа не имею, к сожалению.

Подскажите плз, как это добро подружить? Подсказали статейку http://we.easyelectronics.ru/Shematech/upravlenie-w5100-i-at25160a-po-odnoy-shine-spi-nepredvidennye-grabli.html - такой вариант в моём случае в принципе подходит? На что можно обратить внимание (потыкать мультиметром куда, кроме жопы?) чтобы понять - где порылся песец?

Заранее благодарен за конструктив.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Проблема скорее всего в преобразователе SD модуля. Попробуйте другой модуль. Использовал только Ethernet Sheild - там нет никаких преобразователей и все работало.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Нашёл вот что: http://newscentral.exsees.com/item/077af00eb5cfbb09daee20a21712195d-433c3f81925f2f0ac8aa78965dd46b01

NeiroN - спс, я бы попробовал другой модуль SD, если бы он был под рукой :( К тому же этих модулей уже есть несколько штук, и они планируются к дальнейшему использованию. Проблема вырисовалась только при попытке добавить в проект W5100, юзая указанную плату.

Думаю, что проблема может быть и в самом W5100, забыл упомянуть одну интересную особенность - когда SD-модуль на макетке и W5100 не инициализируется как надо, модуль всё равно пингуется по адресу 192.168.0.40, пингуется точно он, т.к. если выдернуть сетевой шнурок - пинг затыкается.

В чём проблема? В том, что SEN всегда подтянут к питанию, как написано по ссылке выше? И как может вмешиваться в работу шины SPI преобразователь на SD-модуле, учитывая тот факт, что SD и LCD сидят на одной шине месяцами и я ни разу не заметил, чтобы какое-нибудь из этих двух устройств отказалось работать?

Хотелось бы разобраться в этом вопросе, прежде чем кидаться сломя голову заказывать у китайцев другие модули. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Решение, предложенное http://newscentral.exsees.com/item/077af00eb5cfbb09daee20a21712195d-433c3f81925f2f0ac8aa78965dd46b01 - не помогло: пробовал с CS SD-модуля проводочком тыкать в указанные выводы резистора: если на левый контакт резистора - не инициализируется SD-модуль, если на правый - то всё как и прежде - W5100 не получает данные по DHCP. Уровнями на CS модулей рулю вручную уже, выставляе в низкий CS для SD-модуля и в высокий - для W5100: на момент инициализации SD-модуля, и наоборот - перед первым вызовом Ethernet.begin.

Видимо, надо заказывать 74HC125 и пробовать с ним.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Проблема обрисовалась более чётко: если отключить контакт MISO SD-модуля (идёт на пин 50 меги), то W5100 нормально взлетает. Шо це такэ?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

В общем, порыв эти ваши интернеты, плюс с помощью верных товарищей с другого форума  пришёл к выводу, что проблема таки в SD-модуле - эта зараза не отпускает MISO, т.к. на плате и MOSI, и MISO подтянуты резисторами к питанию. Отсюда, кстати - и 255.255.255.255 в получаемых данных - мега честно читает по SPI с W5100, а там одни единички - SD-модуль коварно тянет линию вверх.

Думаю, придётся выпаивать эти самые резисторы, и не факт, что после этого SD-модуль будет работать нормально :) Параллельно буду искать другие модули, т.к. считаю, что некошерно и эгоистически со стороны SD-модуля - подтягивать линии данных к питанию по умолчанию: такое ощущение, что он там собрался в одиночку окопаться и наплевать на всех остальных.

И ведь если бы с дисплея надо было читать - эту фичу я обнаружил бы раньше на пару месяцев.

Такие дела, в общем. На днях буду издеваться над SD-модулем - он, во-первых, дешевле W5100, во-вторых - их ещё есть в запасе, в третьих - даже если причина не в нём (ну а вдруг?) - хоть душу отведу :)))

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Дак выпаяй эти конверторы - подключи напрямую. Или контроллеры должны отключаться от линий данных когда CS не активен - видимо в LCD другой контроллер который может перебороть эту подтяжку. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

NeiroN пишет:

Дак выпаяй эти конверторы - подключи напрямую. Или контроллеры должны отключаться от линий данных когда CS не активен - видимо в LCD другой контроллер который может перебороть эту подтяжку. 

Конверторы - в смысле резисторы подтяжки? Или я не понял чего? Вот думаю - выпаяю я их, и кто будет линию MISO к единице тянуть, если вдруг SD-модуль настолько прост, что ничегошеньки для единички не делает, а только для нолика кладёт линию на землю? Впрочем, надо проверять, конечно.

Ещё, конечно, второй вариант есть, как вы и предложили - отключение от линии данных, надо будет попробовать что-то типа 74HC125.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Sd модуль с резисторами пытался юзать я, делители гадят spi, отказался поэтому.

Продавец вернуд деньги за кривые модули, с конвертером на микросхеме купил после этого .

счастье :)

зы. Не забываем про явную инициализацию CS линий для зернета и сд , и установку их в неактивное состояние до всех модуль.бегин

Datak
Offline
Зарегистрирован: 09.10.2014

DIYMan пишет:
В общем, порыв эти ваши интернеты, плюс с помощью верных товарищей с другого форума  пришёл к выводу, что проблема таки в SD-модуле - эта зараза не отпускает MISO
.......

Такие дела, в общем. На днях буду издеваться над SD-модулем - он, во-первых, дешевле W5100, во-вторых - их ещё есть в запасе, в третьих - даже если причина не в нём (ну а вдруг?) - хоть душу отведу :)))

Да, всё правильно выяснили. Был у меня такой SD-модуль - немного отличается форма платы, но расположение деталек похожее - думаю, и схема та же.

Решается небольшой доработкой модуля, если не боитесь паять тонкие ноги микросхем.

У преобразователя уровней нужно аккуратно поднять 13-ю ногу - т.е. отключить от контактной площадки - а потом проводком присоединить её к ... 10-й, что ли, или 9-й. Никак не найду исправленный вариант, а снова разбираться по схеме сейчас лениво.

Только обратите внимание - нужно именно поднять ножку. Вариант с разрезанием дорожки не подойдёт, т.к. дорожка уходит ещё и под корпус микросхемы. У меня из-за этого всё получилось только со второй попытки. :)

-------

Вот, всё же нашёл. Не 9-я и не 10-я, а наоборот, 8-я нога. То есть, 13-ю ножку отсоединить от платы, и присоединить проводком к 8-й. И всё получится.

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

inspiritus пишет:

Sd модуль с резисторами пытался юзать я, делители гадят spi, отказался поэтому.

Продавец вернуд деньги за кривые модули, с конвертером на микросхеме купил после этого .

счастье :)

зы. Не забываем про явную инициализацию CS линий для зернета и сд , и установку их в неактивное состояние до всех модуль.бегин

Я не очень хорош в схемотехнике, точнее - совсем не хорош :) По ссылке на али, что я привёл - какая плата - с конвертером на микрухе или нет? Там помимо конвертера ещё и резисторы есть - они имхо и тянут к питанию.

Насчёт явной инициализации CS - обижаете, пробовал, поднимая CS SD-модуля и опуская CS W5100 перед Ethernet.begin - не помогает, MISO в высоком уровне из-а SD-модуля, и мега оттуда читает только единички. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Datak пишет:

 

Вот, всё же нашёл. Не 9-я и не 10-я, а наоборот, 8-я нога. То есть, 13-ю ножку отсоединить от платы, и присоединить проводком к 8-й. И всё получится.

 

Спасибо за подробный ответ! К сожалению, этого я точно не потяну - нет такого опыта, мелочёвку паять. В общем, как я понял - простым удалением резисторов проблему не решить. Печально.

Ок, тогда такой вопрос к сочувствующим: киньте ссылкой на кошерную плату для microSD на али? Чтобы опять не вступить в г.
 

И да: если всё-же поюзать 74HC125, как указано здесь: http://we.easyelectronics.ru/Shematech/upravlenie-w5100-i-at25160a-po-odnoy-shine-spi-nepredvidennye-grabli.html - то поможет без перепайки SD-модуля? Вроде по первым прикидкам то, что нужно - буфер на 4 канала с Z-состоянием и раздельным управлением каналами. Как я понимаю, надо будет втыкаться в SPI через него, и пины CS завести тоже на микруху. Тогда при отключении канала на выходе будет High-Z-состояние, следовательно, уже будет пофиг на подтяжку MISO к питанию от SD-модуля.

Я всё правильно понимаю?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Странно плата вроде кошерная, на буфере.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

inspiritus пишет:

Странно плата вроде кошерная, на буфере.

Да в том-то и дело, что по виду вроде кошерная, однако MISO, цука, не отпускает, из-за этого вся работа с W5100 встала колом (хорошо хоть пока на ESP всё крутится). И это именно она, иначе чем объяснить, что когда снимаю проводок MISO с неё - то W5100 тут же нормально настраивается и получает адреса по DHCP?

А паять мелочёвку - не могу: зрение, собака, опыта - ноль, запорю, как пить дать. И не жалко вроде, но когда заранее знаешь, что в какашку превратишь деталь - становится уныло на душе. Уж лучше дождаться 74HC125, мне кажется.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Померял напряжение между MISO SD-модуля и землёй - 3,27В, логическая единица. ЧТД, мне кажется. Мерял, когда CS для SD-модуля в высоком уровне, т.е. SD должна быть неактивна. При этом CS для W5100 - в LOW, т.е. сетевуха выбрана.

Померял, опустив CS в LOW - 0В между MISO и GND. Зашибись, правда? Нафига такие пляски, я чо-то не понимаю?

Если оба CS в высоком уровне (имею в виду CS для W5100 и CS для SD-модуля) - между MISO и GND - 3,27В.

Тянет вверх, ооох тянет. Слушайте, тупейший вопрос, возможно - резистор не вылечит какой? Чтобы на нём падало хотя бы полвольта? Или быстродействия не хватит? Простите, если спрашиваю чушь - хочется хоть как-то пощупать W5100 в рабочем режиме.

 

bugmenot
Offline
Зарегистрирован: 30.09.2016

Решение проблемы работы данного модуля совместно с другими SPI-устройствами:

Поднимаем 13-ю ногу LVC125A, управляющую выходом MISO (зачем-то сидит на земле), и паяем проводок к 8-й ноге (CS).

Результат: теперь модуль без проблем работает совместно с другими устройствами (в моем случае это ethernet-модуль на ETH28J60).

 

А что касается W5100, то там тоже свои тараканы: вход SPI_EN (SEN) чипа W5100 должен быть подключен через инвертор к CS (SS) выходу ATMega. Не во всех случаях проектировщики плат соблюдают это правило.

Если рассматривать сетевые модули на W5100 (именно модули, не шилды), то там SPI_EN всегда заведен на 3.3V, помимо наличия всякой управляющей логики (во всяком случае у тех модулей, что продаются на али/ebay и прочих китайских площадках). Очевидно китайцы экономят на деталях. А вот в шилдах (те, что с картой памяти на борту), уже приходится делать как положено, иначе совместно карту памяти и сетевой контроллер просто не завести :)
Отсюда вывод: если хочется использовать W5100, но не хочется проблем в совместной работе на SPI шине, то лучше брать шилд.

И еще одно: более новый W5500 лишен входа SPI_EN, а управление осуществляется напрямую с выхода CS (SS) ATMega на вход SCSn микросхемы. Так что модули на W5500 можно брать без опасений за совместную работу с другими устройствами. Это помимо прочих преимуществ над W5100 :)

alexvs
Offline
Зарегистрирован: 22.07.2014

А я посадил данный модуль на SoftSPI посредством самой библиотеки SD, там это предусмотрено.

Severlock
Offline
Зарегистрирован: 16.03.2016

alexvs пишет:

А я посадил данный модуль на SoftSPI посредством самой библиотеки SD, там это предусмотрено.

Можно поподробнее?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Так то оно так, только я кидал на резистор рядом.

гдетто на этом форуме есть фотки что поднимать и куда кидать....которые я постил.

semen-pro
Offline
Зарегистрирован: 16.02.2014

DIYMan пишет:

Слушайте, тупейший вопрос, возможно - резистор не вылечит какой? Чтобы на нём падало хотя бы полвольта? Или быстродействия не хватит? Простите, если спрашиваю чушь - хочется хоть как-то пощупать W5100 в рабочем режиме.

Я поставил резистор на 1 килоом, последовательно с ногой MISO SD модуля и все заработало. Для другого похожего случая - сделал согласование того же MISO на транзисторе кт3102

Для отладки: если IP  адрес  0.0.0.0 - MISO притянут к земле. Если 255.255.255.255 - лог 1. Должен быть нормальный IP, без глюков.

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А ты любитель мертвечины, как я погляжу :)

Logik
Offline
Зарегистрирован: 05.08.2014

А чего же мертвечинки. Очень разумное ленивое решение. Если млдуль SD не отпускает шину, то пусть выдает на неё сигнал с ограниченым током. При наихудшем ток будет 5мА, все выживут, но при активности второго модуля SD уже никому ничем не помешает. А если второй не активен то SD выведет на шину чего захочет и  все счастливы. Один минус решения - потенциально снижается скорость передачи с модуля SD. Но скорей всего никто ниче и не заметит.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

К слову сказать, давно решил проблему с кривыми китайскими SD-модулями с помощью 74HC125 - рву MISO, и волосы мягкие и шелковистые :)

semen-pro
Offline
Зарегистрирован: 16.02.2014

Можно и диод поставить, анодом к SD модулю, если залипнет высокий уровень - ток через него не пройдет. Наверное, так даже правильнее будет.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Вот нашел свой старый пост на эту тему

dbunak
Offline
Зарегистрирован: 01.07.2022

DIYMan пишет:

К слову сказать, давно решил проблему с кривыми китайскими SD-модулями с помощью 74HC125 - рву MISO, и волосы мягкие и шелковистые :)

Можете описать по подробней процесс?