Продолжаем цикл слёзных историй про китайские Arduino-модули.
На этот раз речь пойдёт про китайскую копию Arduino Ethernet Shield, на базе чипа W5100, которая чуть не стала причиной запоя сотрудников двух отделов.
В общем, есть такая штуковина:

которая втыкается в Ардуйню и позволяет получить доступ к локальной сети.
В сердце модуля чип W5100 — достаточно неплохой, аппаратно поддерживает TCP, обмен с микроконотроллером по SPI на частоте до 15МГц, позволяет несложными телодвижениями организовать как TCP-клиент, так и TCP-сервер, и при этом стоит недорого.
Всё это собрано китайцами по схеме оригинального итальянского модуля. Конечно, к схеме тоже есть вопросы, например, зачем на плате размещается 74LVC14D — 6 инвертирующих буферов. Из которых 5 висят в воздухе, а один зачем-то подаёт низкий уровень на вход SEN (т.е. отключает режим SPI), когда линия на линии CE высокий уровень. На кой ляд это нужно — не понятно, ведь входы выходы SPI и так переходят в третье состояние, когда на CE высокий уровень. Ну да ладно. UPD: Как подсказали в комментариях, согласно аппноту, W5100 не отпускает линию MISO, когда на CS высокий уровень. Поэтому и нужен инвертор, который будет выставлять низкий уровень на входе SEN, полностью отключая SPI и позволяя использовать иные устройства, в частности, карту памяти, слот для которой есть на этой же плате
Модуль, конечно, не без проблем. Особенно проблемы связаны с инициализацией при медленно нарастающем напряжении питания, из-за чего, если использовать стандартные ардуино-библиотеки, модуль не инициализируется. Кроме того, известны проблемы этих библиотек, которые приводят к увеличенному времени отклика и неправильной работе сокетов. Но поскольку я готовыми библиотечками не пользуюсь, для меня всё это не проблема, соединения стабильные, а нюансы легко обойти.
Но вот одна проблема заставила поломать голову.
Выражалось это в следующем: собранное устройство отлично работает, если подключено кроссовером к компьютеру, или подключено к сети через роутер. Но как только подключается через свитч, пинги не ходят, соединение не устанавливаются, а иногда даже лампочки мигают. Пробовали разные кабели, разные свичи. Результат один — через роутер или напрямую — нормально, через свич — никак.
Технические специалисты уже готовы были уйти в запой, я уже было подумал, а не забухать ли и мне? Но, к счастью, проблема оказалось не новой. Немного гугления привели меня к ответу.
Дело оказалось вооот в этой резисторной сборке:

Порт подключения HR911105A содержит в себе согласующие резисторы со стороны линии, и трансформаторы для гальванической развязки.
То, что обведёно кружочком — это согласующие резисторы, которые находятся со стороны чипа.
Если посмотреть на схему шилда, то это сборка RN1 — 4ре резистора по 49,9 Ом.
Можно посмотреть, например, reference schematic на w5100 и увидеть то же самое: R6, R7, R14, R15 — по 49,9 Ом.
Однако китайцы решили, что резистор большой роли не играет и решили впаять 510 Ом, в 10 раз больше чем положено. Разумеется, это привело к рассогласованию, и сигнал стал очень кудрявой формы. Видимо, контроллеры в роутерах и компьютерах ещё могут с этим жить, а вот в свичах — уже не очень.
По хорошему, эту резисторную сборку хорошо бы заменить на хотя бы 51-Омную. Но у меня под рукой такой не оказалось. Зато были резисторы 110 Ом размером 0805 и 1206. Их то я и напаял параллельно линиям RX и TX (ножки 1-2 и 3-6, соответствено. Поскольку тут поддерживается автоматическое определение типа кабеля, то нельзя сказать наверняка, кто из них будет передатчиком, а кто приёмником)

В итоге, схема прекрасно заработала через свитч, и через роутер связь стала более стабильной, а технические специалисты были спасены от внезапного алкоголизма.
Хотя так и осталось мне не понятным: почему же с неправильным резистором работает через роутер, но не работает через свитч? В чём разница? Хотя, возможно дело в том, что свичи были в основном D-Link'и, а роутеры в основном TP-Link'и, но суть различий всё равно не ясна.


Comments 23
Спасибо огромное. Статья очень выручила!
Drive2 ЗБС сайт =) Не только по автомобилям, но еще и по электронике =) Только, что напаяли, все стабильно подымается =)
Супер инструкция! SMD подходящих не нашел, применил обычные резисторы на 100 Ом, все заработало. Спасибо автору за подробные фото!
Накупил таких же шилдов. Линк поднимается через раз. Часто помогает нажатие ресета.
Есть в наличии сборки на 47 Ом и на 62. Что лучше? 47 не маловато?
тут экспериментально только смотреть. Думаю, 47 нормально будет
Спасибо. Работает. Раньше линк с 3го раза поднимался — думал так должно быть. Сейчас с первого.
О как. 511 на всех модулях.
Не работал по умолчанию только на каких то взрослых свитчах от HP, но запускался, если переключить порт в 10Mb (видимо меньше заваливался сигнал). На всяких дешманских длинках и даже на десктопной циске — нет проблем.
Низкий поклон, однако, в жизнь бы не догадался. Все модули на допайку :)
Спасибо за статью! С такой же проблемой столкнулся, думал что проблемы с настройкой локальной сети, а тут вот что. Впаял резисторы, устройство в работе.
Привет.
Ты писал: — "Их то я и напаял параллельно линиям RX и TX (ножки 1-2 и 3-6, соответствено.)"
Почему 3-6 ? RХ ведь на ножках 7-8…
Имею такую же проблему, и хочу от нее избавиться :)
В общем, как на фотке выше.
Вот распиновка разъёма
www.kosmodrom.com.ua/pdf/HR911105A.pdf
Как видно, пары 1-2 и 3-6
В аппноте по W5100 другой разъём (RD1-125BAG1A).
leic.co.kr/board/product/…tool/RD1-125BAG1A(XA).pdf
Как видно, там наружные контакты не соответствуют эзернетовским и действительно одна пара на 7-8
Спасибо, буду пробовать.
Как говорится — ставили то что было в наличии)
> На кой ляд это нужно — не понятно, ведь входы выходы SPI и так переходят в третье состояние, когда на CE высокий уровень. Ну да ладно.
Посмотрите на схему чуть внимательнее. Этот же сигнал ДО инвертора идёт на пин SE — SPI Enable, а ПОСЛЕ — на /CS.
Если оставить активным /CS — сломаете передачу.
Если оставить высоким SE — чип не отпустит SPI линию. Это не баг, это фича. Не нравится инвертор — сделайте, как я — на n7002.
Пруф из AppNote:
Multiple SPI Slave Usage
Basically, multiple SPI slave usage is the same as single SPI slave usage. One difference between other SPI slave devices compared to the W5100 is that the MISO output is continuously driven in the W5100 whether the /SCS is asserted as high or as low. As well, when the 5100 /SCS is asserted as high when using multiple slaves, other SPI devices cannot be read or written by the SPI master on the SPI BUS simultaneously. These problems will continue unless the recommendations listed below are followed.
Кому не лень — может перевести. Основная мысль та же — пока активен пин SE, MISO будет управляться кристаллом.
> Модуль, конечно, не без проблем. Особенно проблемы связаны с инициализацией при медленно нарастающим напряжение питания, из-за чего, если использовать стандартные ардуино-библиотеки, модуль не инициализируется.
Так же, не использую *ino библиотеки. Они зачастую работают в каком-то сферическом вакууме и порой даже не делают сброс чипа при включении, который рекомендует производитель. Приходится самому.
> через свич — никак
У меня работает через свитч, через хаб, напрямую к ПК. Во всех случаях кабель прямой.
> Однако китайцы решили, что резистор большой роли не играет и решили впаять 510 Ом, в 10 раз больше чем положено.
Правильно читается 51 0. То есть, резистор на 51 * 10^0 = 51*1 = 51 Ом.Был неправ.
Кстати, у меня на такой же плате — тоже сборка на 510 Ом. Но каким-то образом всё работает.
так там русским по белому 511
AlanDrakes
> На кой ляд это нужно — не понятно, ведь входы выходы SPI и так переходят в третье состояние, когда на CE высокий уровень. Ну да ладно.
Посмотрите на схему чуть внимательнее. Этот же сигнал ДО инвертора идёт на пин SE — SPI Enable, а ПОСЛЕ — на /CS.
Если оставить активным /CS — сломаете передачу.
Если оставить высоким SE — чип не отпустит SPI линию. Это не баг, это фича. Не нравится инвертор — сделайте, как я — на n7002.
Пруф из AppNote:
Multiple SPI Slave Usage
Basically, multiple SPI slave usage is the same as single SPI slave usage. One difference between other SPI slave devices compared to the W5100 is that the MISO output is continuously driven in the W5100 whether the /SCS is asserted as high or as low. As well, when the 5100 /SCS is asserted as high when using multiple slaves, other SPI devices cannot be read or written by the SPI master on the SPI BUS simultaneously. These problems will continue unless the recommendations listed below are followed.
Кому не лень — может перевести. Основная мысль та же — пока активен пин SE, MISO будет управляться кристаллом.
> Модуль, конечно, не без проблем. Особенно проблемы связаны с инициализацией при медленно нарастающим напряжение питания, из-за чего, если использовать стандартные ардуино-библиотеки, модуль не инициализируется.
Так же, не использую *ino библиотеки. Они зачастую работают в каком-то сферическом вакууме и порой даже не делают сброс чипа при включении, который рекомендует производитель. Приходится самому.
> через свич — никак
У меня работает через свитч, через хаб, напрямую к ПК. Во всех случаях кабель прямой.
> Однако китайцы решили, что резистор большой роли не играет и решили впаять 510 Ом, в 10 раз больше чем положено.
Правильно читается 51 0. То есть, резистор на 51 * 10^0 = 51*1 = 51 Ом.Был неправ.
Кстати, у меня на такой же плате — тоже сборка на 510 Ом. Но каким-то образом всё работает.
Разные они кЕтайцы! Два таких брал и один снорм резюками, другой тоже на 511… Да и кое в чем тоже отличались… Уже не вспомню, пол года назад было… Кстать обе свич курили на УРА! Как ни странно… Но спасибо что напомнили! Скоро прийдется снова столкнуться с этой хренью… Надо резервное питание поставить на предприятии… Управление и контроль по сети… Там БИРП мощный у компа, так что можно, закзчик платит…
Вот именно по этому крайне не люблю использовать модули, предпочитая разводить свои
Хотя это и требует значительных дополнительных усилий
Дмитрий, меня пугает ваше повышенное внимание к Адурине … :-)))
Это не я такой. Жизнь такая.
Что дали с тем и вожусь ;) В оправдание себе скажу, что среду разработки я не использую, а загрузчик ардуиновский заменил на свой, для обновления прошивки прямо по сети.
Ладно, тогда положу валидол на полочку обратно )))
AterLux
Это не я такой. Жизнь такая.
Что дали с тем и вожусь ;) В оправдание себе скажу, что среду разработки я не использую, а загрузчик ардуиновский заменил на свой, для обновления прошивки прямо по сети.
Здравствуйте дорогой Дмитрий Погребняк! У меня есть w5100 и Arduino mega. Они работает. В брузере страниса скоро появиться, если я захожу через WiFi. Но через мобилный данный не могу. Пожалюста помагите?
Не могу сказать, в чём может быть дело. Если через компьютер открывается, то и через мобильный должно бы.
Если на компьютере страница отображается, но продолжает висеть индикатор, что страница всё ещё грузится, тогда, вероятно, дело в том, что сервер не закрывает соединение, и браузер ждёт что от сервера вот вот придёт очередная порция данных страницы. Тогда нужно просто написать прошивку, чтобы она принудительно закрывала соединение, когда все данные со страницы переданы.
Но скетч стандартный
IsakovM
Здравствуйте дорогой Дмитрий Погребняк! У меня есть w5100 и Arduino mega. Они работает. В брузере страниса скоро появиться, если я захожу через WiFi. Но через мобилный данный не могу. Пожалюста помагите?
так на мобилке надо внешний ип писать и проброс портов на роутере настраивать не?