Wi-Fi модуль WizFi210. Часть 1. Железо

Содержание

Подумал тут написать несколько статей посвященных wi-fi модулю WizFi210. Делает его корейская контора WizNet. Просто переводить DataSheet я смысла не вижу, постараюсь сделать упор на моменты, которые не прописаны в документация, либо прописаны скудно и неявно.
Первая часть традиционно по железу. Если будет интерес — то продолжу.


Почему WizFi210
Задача была разработать устройство, которое бы подключалось к роутеру, и по TCP/IP управлялось с компьютера или смартфона.
На тот момент я совсем был далек от сетевых технологий и поэтому сумел выставить к искомому решению только следующие требования:
1) Встроенный TCP/IP стек
2) Возможность подключения к роутеру по WPS
Для выбора среди найденных решений, удовлетворяющих требованиям использовал критерии «цена + достоваемость». Выбор на самом деле был не велик, ну и как-то вот упал взгляд на WizFi210.
С другими я дела не имел, поэтому сравнивать не могу. Хотя все поставленные задачи были решены, есть у меня стойкое ощущение что модуль мог бы быть и лучше… но это уже лирика.

Краткий обзор WizFi210
1) Управляется модуль посредством АТ-команд по UARTу с базовой прошивкой, либо по SPI с альтернативной прошивкой. SPI имеет смысл использовать если необходимо передавать большие потоки данных, потому что максимальная поддерживаемая скорость UART в модуле 921600 бод. Есть еще специальная прошивка с поддержкой дополнительных фич (HHTP, SSL шифрование, GPIO и пр), но её нужно заказывать через дистрибьютора, так что для простых радиогубителей достать её трудно. Описание АТ-команд в доках весьма скудное. Немного скрашивает жизнь некоторое количество аппнотов (советую их скачать с сайта). Зато неплохо работает техподдержка на сайте: только нужно задавать четкие, конкретные вопросы иначе можно получить ответ «на отъ… бись».
2) Встроенный TCP/IP стек. Стек спрятан внутри модуля и пользователю доступны далеко не все его (стека) параметры и настройки. Поддерживает всякие TCP/UDP (и клиент и сервер и мультиконнект), DHCP, современные типы шифрования (WEP, WPA, WPA2) и прочее.
3) Умеет создавать собственную точку доступа к которой может быть подключено до 4-х устройств (LimitAP).
4) Есть у модуля брат-близнец — WizFi220, который отличается только мощностью приемопередатчика и ценой. Они pin-to-pin и почти полностью программно совместимы, кроме одной команды, отвечающей как раз за мощность.
5) Дорогой как и все аналогичные модули. Если повезет — можно найти рублей за 900-1000. Для контор при объемах в несколько тысяч штук можно за 600-700 рублей купить. Это если попробовать заказать у дистрибьютора… это сложно но можно. Цена в розничных магазинах в 1,5-2 раза выше.
6) Вскрытие (см. фото в комментариях) показало, что внутри стоит SoC от GainSpan GS1011.

Антенна
Есть три реализации антенны модуля. Подробно об этом расписано в аппноте AP340.
С чип-антенной. Я этот вариант в живую не видел, а показания свидетелей расходятся на счет того, установлена ли сама антенна на модуле или только разведены посадочные места под неё. Из аппноты следует, что установлена.
С UFL розеткой. Я использовал именно этот вариант. В качестве антенны использовал зачищенный на четверть длины волны ВЧ кабель с UFL вилкой на конце.
Под внешнюю антенну. Линия антенны выведена на внешний пин модуля. Например, для подключения антенны, разведенной прямо на плате, ну или для внешней штырьковой антенны.

Подключение
В мануале есть пара стандартных подключений, думаю они подойдут в большинстве случаев. Там же есть описание для пинов. Опишу только пару моментов. Действительно для стандартной прошивки, в альтернативных могут быть и отличия.
Схема подключения из мануала
UART В стандартной прошивке доступен только UART0. Вообще для работы достаточно линий RxD и TxD, однако линии CTS, RTS могут очень пригодиться, если требуется приостановить поток данных из сети что бы дать хостовому МК время их переварить. В этом случае модуль будет буферить данные до 4 Кб у себя.
GPIO28 OUT Садится на землю когда модуль подключен к какой-либо Wi-Fi сети, либо создал собственную точку доступа. Можно подключить на вход хостового МК для контроля состояния подключения.
GPIO29 IN Переключает модуль между вводом АТ-команд и вводом данных по TCP/IP в «прозрачном» режиме обмена данными. В обычном режиме обмена эффекта не вызывает. Советую подключить к выходу МК.
GPIO30 OUT Садится на землю когда модуль обменивается данными по UART. Никакой практической необходимости в нем не вижу… разве что для визуализации процесса обмена.
GPIO31 OUT Садится на землю когда модуль открывает/подключается TCP/UDP сервер в «прозрачном режиме» и при этом GPIO29 находится в состоянии ввода данных по TCP (низкий уровень). Если на GPIO29 подан высокий уровень — на GPIO31 будет тоже высокий. В обычном (непрозрачном режиме) на GPIO31 всегда высокий уровень. Подробнее в следующих статьях.
GPIO27 IN Пин модуля №37. Переключает модуль между режимами обычной работы (RUN MODE) и обновления прошивки (PROGRAMM MODE). Для обычной работы нужно этот вывод посадить на землю, если этого не сделать модуль не заведется.
EXT_nRESET Вывод для внешнего сброса модуля. Для того что бы осуществить сброс — нужно посадить этот пин на землю. Для нормальной работы пин нужно подтянуть к питанию, либо можно оставить висеть в воздухе.
Назначение остальных пинов вполне явно расписано в мануале, так что переводить не его стану. Есть и альтернативный способ сделать модулю reset с помощью специальной АТ-команды.

Режимы работы
Это уже несколько выходит за рамки «железа» но все-таки напишу тут.
Как и большинство подобных модулей (не только Wi-Fi) WizFi имеет 2 режима обмена данными (не знаю как они называются официально, поэтому приведу свои версии названий):
Прозрачный режим. После установки соединения, все приходящие из сети данные просто сваливаются в UART, если нужно данные отправить — соответственно, просто шлем их в UART. Если необходимо послать AT-команду — нужно предварительно посадить GPIO29 на землю. Этот режим использует автоматический коннект к сети, т.е. модуль будет сам отслеживать состояние соединения и при необходимости пытаться его восстановить. Настройки так же сохраняются при отключении питания, так что можно один раз прописать в модуль параметры подключения (имя сети, пароль) и всё. В нагрузку к автоматическому подключению к сети, модуль автоматически становится или клиентом или сервером (зависит от настроек) одного из протоколов (TCP или UDP, опять же зависит от настроек). На этом малина заканчивается и начинается западло данного режима. Нельзя «поднять» несколько серверов или клиентов. Если модуль стал сервером, а к нему подключилось несколько клиентов, то нельзя понять какой именно из клиентов прислал данные, а так же нельзя отправить данные адресно (конкретному клиенту). В общем, режим менее гибкий и покатит не для всех задач. Однако, уверен что найдется очень много задач в которых режим будет мега-полезен.
Стандартный режим. Подключение к сети нужно всегда осуществлять вручную, если подключение отвалилось — переподключаться нужно так же вручную. Отслеживать состояние подключения можно по состоянию пина GPIO28. Если отвалилась сеть — все серверы и клиенты так же отваливаются и сами не восстанавливаются. Для отправки АТ-команды нужно просто её послать в модуль по UART. А вот для отправки данных в сеть нужно их обрамить в заголовки специального формата. Входящие данные из сети также обрамляются модулем в похожие заголовки. Теперь о приятном. Поддерживается любой мультиконнект, т.е. модуль может становиться и UDP сервером/клиентом и TCP сервером/клиентом и все это одновременно и в любом порядке. При передачи данных в заголовке мы указываем адресата, при получении данных в заголовке модуль сообщает от кого эти данные пришли. Короче достигается довольно высокая гибкость так что любая задача становится по плечу.

Подробнее об особенностях каждого из режимов напишу уже в следующих статьях… ну если интерес со стороны сообщества будет))

P.S.:
Пока я собирался с силами на написание статьи и писал её, корейцы хорошенько переработали документацию, разделили её на 2 части (даташит и мануал для програмера), так что некоторые из тех моментов что я описывал сейчас уже вполне присутствуют в доках и у корейцев. Но я уже написал, так что, как говорится «Взяли, так взяли… не обратно же им отдавать»))
  • +8
  • 19 августа 2013, 17:55
  • Den1s

Комментарии (57)

RSS свернуть / развернуть
Цена вопроса?
0
если штучно — то при желании можно рублей за 900 найти. но мне контора покупала, у снабжения выходы есть какие-то. Да, удовольствие не дешевое, но они все дорогие. Добавлю в статью, инфу по цене.
0
В смысле доставабельная цена — я вижу в местных магазинах хотят за неё 60 баксов, и хотелось бы знать что значит «цена + достоваемость» в вашем понимании?
0
В магазинах совсем дорого. Можно достать через дистрибьюторов, тогда, конечно, встает вопрос безналичной оплаты и нужно договориться на штучную покупку. Но по опыту знаю что договориться с менеджером можно… а на счет оплаты можно попросить знакомого ИП. Геморройно, но это цена за приемлемую цену.
«цена + достоваемость» — самый дешевый из тех у которых разумные сроки поставки (1-2 недели на штучные образцы и 2-3 месяца на крупную партию)
Согласен, что не совсем честно с моей стороны, так как я заказывал через контору, обещая золотые горы дистрибьютору, для себя выйдет дороже.
0
На ebay есть предложения этого модуля с платой переходником с разъемами и антенной по 1939руб free shipping
Your text to link...
0
Есть и родная отладка для этого модуля. Сейчас уже цену не помню. Но отладка это побаловатьсч, в разработке ее использовать проблемно. Кстати, в ардуино этот модуль активно используется
0
Есть три реализации антенны модуля.
В mt-system покупал модуль с запаянной чип -антенной.
0
Вот оно как… я заказывал с UFL разъемом, а об отсутствии чип-антенны мне менеджер говорил, сам я не видел в этом варианте. А ты брал как частное лицо? Какое количество и почем? Может инфу о цене в статье поправлю
0
Не, не как частное лицо. Но физ.лицу наверное тоже продадут.
Что то около 1000-1100р, 3шт брали. В апнотах даже описаны 3 варианта модуля (AP340)Antenna Type Description.pdf
0
Цены через efind.ru видно было в магазине мт-систем, а на самом сайте нет цены.
0
Цена конечно невкусная. В то-же время usb-wifi адаптеры по 5$ продают. Никто не пробовал их использовать?
0
  • avatar
  • m0xf
  • 20 августа 2013, 09:42
Можно еще использовать ноутбучные wifi-адаптеры наверное, которые внутри в слот вставляются. А драйвера попробовать взять для linux. Но это наверное очень трудоемко.
Еще продаются долларов по $15 китайские подобные модули.
0
Я рассматривал вариант взять радиомодуль, контроллер по-мощнее, реализацию TCP\IP стека и делать все по-честному. Но это очень долго и трудоемко вышло бы. А так я месяцев за 5 все поднял с нуля до серийного производства. Кстати, решение на радиомодуле тоже в копеечку влетит. До сих пор не понимаю как умудряются роутеры такими дешевыми делать.
Еще продаются долларов по $15 китайские подобные модули.
А ссылку можешь кинуть, для общего развития мне.
0
у нас тут много красноглазых товарищей, создайте прожект и общими силами одолейте тот стак, его одному можно родить за месяц, а уж групой вообще не проблема. вот будете иметь свой любимый «опенсоус»
0
До сих пор не понимаю как умудряются роутеры такими дешевыми делать.
А что тут понимать? Массовое производство же. В роутере том и начинки-то всего ничего — специализированный SoC с набортным WiFi. Да и стоит не так уж дешево — примерно как модуль в статье (впрочем, он и по устройству не так уж сильно отличается).
0
Можно еще использовать ноутбучные wifi-адаптеры наверное, которые внутри в слот вставляются.
PCI-Express-то? Ой врядли, я думаю, USB-шный проще завести — МК с аппаратным USB Host не такая уж редкость. Правда, на нем придется весь стек поднимать, но обычно хост на достаточно мощных МК вроде STM32F4.
0
реквестирую фото внутренностей под шилдом
0
+1
www.gainspan.com/gs1011soc1 он чтоли? так можна скинутся и взять тот сампл-пак
0
угу, соорудить стек и бырыжить таким ленивым как я)))
0
ха-ха, модуль корейский, а чип индийский. Я почему-то не догадался модуль вскрыть, что б глянуть кто там у него внутри. Я кстати, думал что там не SoC, а отдельно радиомодуль и МК. Добавлю инфу в статью.
Efind.ru рисует страшные цифры от 1000 рублей за него, да и в России им никто не торгует как дистрибьютор.
0
да и в России им никто не торгует как дистрибьютор
В России ими торгуют ЭФО и MT-System. Или они не дистрибьюторы?
0
я GS1011 имел в виду. У них на сайтах я упоминания об этом чипе не нашел. Да и на сайте GainSpan я не нашел отечественных представителей.
0
я GS1011 имел в виду.
А, понял…
0
Я кстати, думал что там не SoC, а отдельно радиомодуль и МК.
Это, как раз, маловероятно — сейчас подобные девайсы (WiFi, BT) практически всегда представляют собой SoC с прошивкой. Интересно скорее то, что SoC одночиповый, а не как вариант за 15 баксов с DX, где в модуле смонтирован полновесный роутер.
P.S. Интересно, зачем там внешний усилитель мощности? Насколько я вижу, у SoC'а есть свой собственный.
0
Судя по плотности компоновки модуля, я в габаритах не особо и проиграл.
0
Я этот вариант в живую не видел, а показания свидетелей расходятся на счет того, установлена ли сама антенна на модуле или только разведены посадочные места под неё. Из аппноты следует, что установлена.

0
Родная антенна что ли, пришла запаенная уже?
0
Ага. Таким он и приехал
0
себе брал или по работе?
0
По работе.
0
Если не секрет, какая-то частная задача или под серийное производство? Удалось задачу решить?
0
Под серийное производство слишком дорогим оказался. Для отработки подошел нормально.
0
Сделайте обзор на этот модуль
dx.com/p/hi-link-hlk-rm04-serial-port-ethernet-wi-fi-adapter-module-blue-black-214540
0
странное предложение… я же его не юзал и не видел никогда в жизни)))
0
Ой не знаю. Не понимаю я таких вещей. Если уже нужен Wifi, да и вообще TCP, нужно брать его полноценную реализацию.
Какой-нибудь Beagleboard с полноценным Linux-ом на борту и копеечный USB WiFi донгл.
По цене получается почти так же, но у нас полноценная OS на борту и все удобства разработки.

TCP, при всей его кажущейся простоте, имеет огромное количество подводных камней. WiFi же стек на порядок сложнее.
0
Несколько разные вещи. Beagleboard это для какой-нить частной единичной задачи. А если это серийное что-то — то тут либо готовый модуль либо SoC… другого я не знаю
0
Beagleboard я просто для примера привел. Не верю я в жизнеспособную реализацию TCP стека в такой железке. По моему опыту работы с сетями лучше что бы на девайсе был полноценный стек в виде того же Linux-а. А тут какая-то непонятная реализация в железе.

Вот возьмем пример. Есть у нас некая станция мониторинга. PC с виндой или линуксом. Есть жменя датчиков с wifi которые мы хотим мониторить. Датчики по какому-то своему событию посылают нам данные. По UDP — будут потери, чего мы не хотим. По этому посылаем по TCP. Датчик работает по следующему алгоритму:
1. Включился
2. Приконектился к заранее известной сети.
3. Получил адрес по DHCP.
4. Приконектился к порту на станции мониторинга.
5. Зарегистрировался там (рассказал кто он).
6. Курит пока у него не появились данные.

На станции мониторинга мы хотим видеть какие датчики у нас активны. В случае TCP, если датчик молча отвалился, соединение с ним по дефолту пропадет через несколько часов. Для того что бы этого избежать мы выставляем на сокете на станции мониторига SO_KEEPALIVE с вразумительными таймингами.

Вопрос, эта железка умеет отвечать на SO_KEEPALIVE? ;-)
А посылать OOB пакеты? Какой у нее размер буфера для ожидания ACK? Реагирует ли она на ICMP redirect?

Погуглив пару минут, я нашел вот такой вариант, который меня устроил бы на порядок больше
WiFi модуль www.acmesystems.it/WIFI-1
и какой нибудь Linux SoM:
microcontrollershop.com/product_info.php?products_id=5840

можно еще посмотреть в сторону чипов на которых работает ucLinux. Но у нас не будет MMU.
0
Вопрос, эта железка умеет отвечать на SO_KEEPALIVE? ;-)
А посылать OOB пакеты? Какой у нее размер буфера для ожидания ACK? Реагирует ли она на ICMP redirect?<о/blockquote>
SO_KEEPALIVE есть, я его юзал примерно для той же цели что ты описал выше. Остальное не знаю т.к. не знаю что это значит)).
Я же ничего не пропагандирую и не рекламирую, это просто обзор решения. Проблема «спрятанного» стека в обзоре озвучена.
0
Датчики по какому-то своему событию посылают нам данные. По UDP — будут потери, чего мы не хотим. По этому посылаем по TCP.
Подтверждения по UDP слать никто не запрещает. Тогда и потерь не будет. И реализация UDP на порядок проще TCP.
0
Кроме подтверждения, в TCP, на сколько мне известно, есть еще ряд фишек, например, проверка целостности сообщения, проверка с помощью контрольной суммы и автоматическая повторная отправка при необходимости и пр.
Но сейчас речь идет об уже реализованных стеках в обоих предлагаемых решениях. А использование готового TCP я думаю ничуть не сложнее использования готового UDP (я говорю именно об использовании, а не реализации). UDP поддерживает широковещательные посылки, что удобно использовать для определения IP-адреса нужного устройства, если он (адрес) заранее неизвестен.
0
Это как раз не фишки. Это отличие UDP и TCP.
TCP это поток. UDP это датаграмма. Которую может никто не услышать.
При этом внутри TCP можно посылать внепоточные данные — OOB пакеты.

Но все это уже прошлый век. ;-) Сейчас уже все понимают SCTP. А там много вкусностей.
0
Вот как раз тогда бардак и начнется. ;-) Представь себе ситуацию когда у тебя модуль шлет данные а подтверждения не получает. Или получает через одно. Что делать? Буферизировать? Выбрасывать?
0
NFS до версий 2 и 3 работал через UDP, и не жужжал.
0
Ха! Еще как жужал! По количеству костылей его разве что винда превосходит!

Он отлично работает когда у тебя небольшая нагрузка, все в одной физической сети, и очень желательно что в каждый конкретный файл пишет-читает только один персонаж. Но как только… ;-)
0
Или получает через одно. Что делать? Буферизировать? Выбрасывать?
Естественно. И TCP тут не причём: а вдруг связи нет на несколько минут-часов-суток? Сильно вам TCP поможет?
Выбрасывать?
Когда может и выбрасывать, зависит от важности и актуальности информации.

P.S. Во всяких GSM/GPRS-треккерах и других системах сбора данных часто приходится ставить flash-память на несколько мегабайт, но стоит это сейчас от 1$.
0
Судя по даташиту, эта железка у себя внутри имеет полноценный процессор (даже два), где стек и крутится. Разве что он встроенный и его врядли удастся поменять.
Некоторые из упоминавшихся в треде модулей — вообще полновесный комп с линуксом и возможностью поставить OpenWRT.
0
Стек мне кажется в железке вполне достойно реализован, проблема в том, что пользователю доступны (посредством АТ-команд) только те параметры, которые посчитал нужным производитель. Вообще, насколько мне известно, WizNet практикует кастомизированные прошивки… разумеется радиогубителям это не поможет)))
0
Вот с OpenWRT это уже намного интересней!
0
OpenWRT признаюсь для меня сложнова-то. Да и ставить линукс на приборчике, который должен релюшкой щелкать по команде через wi-fi (это я утрирую конечно, но не далек от истины) считаю чудовищным :). К тому же предложенные тобой решения едва ли выдержали бы требования к конструктиву в моем случае (как бы я эту wi-fi платку устанавливал?). К тому же в реальном производстве мне приходится учитывать возможность доставки комплектующих на место сборки, а кто знает сколько будут стоить эти штуки после растаможки и прочей фигни.
Самый тру вариант — это SoC или радиочип (тот же GS1011) + хост. На хост можешь ставить и линукс и стек писать. Но это с «научной» точки зрения клево, а с инженерной и практической очень трудоемко (сложная схемотехника, сложное программирование).
Минусы решения с модулем мне ясны, главный из них — отсутствие гибкости. Но и плюсы не стоит перечеркивать — простая схемотехника, простое управление (в качестве хоста у меня был STM8, и он прекрасно справился :) )
0
В том то и дело что в этом случае ничего писать не надо. И функциоанл может быть реализован хоть на bash-е. ;-)
0
Самый тру вариант — это SoC или радиочип (тот же GS1011) + хост.
Эти — сами себе хост (GS1011 тоже — вполне можно было бы на нем весь девайс сделать, без хоста, если бы был доступ к его программированию). Радиочипы же, такие как RTL8192, требуют достаточно мощного хоста, способного прожевывать криптографию и стек. Но можно попробовать на STM32F4 что-то подобное сделать, благо дрова для линукса открыты и там можно посмотреть, как с ним работать.
Да и ставить линукс на приборчике, который должен релюшкой щелкать по команде через wi-fi (это я утрирую конечно, но не далек от истины) считаю чудовищным :)
Не исключено, что в твоем модуле именно линукс и крутится внутри. Увы, но это практически требование WiFi — чтобы крутить весь стек, нужен достаточно мощный процессор, и все эти модули обычно вычислительно куда мощнее МК, к которому подключаются.
Минусы решения с модулем мне ясны, главный из них — отсутствие гибкости. Но и плюсы не стоит перечеркивать — простая схемотехника, простое управление (в качестве хоста у меня был STM8, и он прекрасно справился :) )
С модулем на роутернои SoC'е от хоста можно было бы вообще отказаться — требуемые задачи можно возложить непосредственно на процессор модуля, ресурсов у него более чем достаточно. С конструктивом тоже никаких проблем — примерно такой же модуль, только чуть больше габаритами.
0
Хочу поблагодарить автора за интересную статью. Теперь wi-fi для своих проектов не кажется столь сложным делом.
Стал читать, что есть вообще на рынке, и вот, друзья, какую интересную железку нашел:
Около 8 баксов, правда за мелкий опт
Чип Atheros AR9331, значит Линукс OpenWRT может стать.
+ все GPIO, SPI, UART и т.д. выведены.
И размер 40х40мм!
+1
Всё здорово, но партия от 200 шт.
Не стоит забывать и таможню.
А так я бы «пощупал». А то самое доступное — это роутеры типа TP-Link TL-WR702N, но там не так густо с GPIO…
0
Поговорил с представителем этой «V-SOLUTION Telecommunication Technology».
Они производят коммуникационное оборудование
Мистер Wisely любезно согласился выслать образцы WiFi-модуля в количестве 2-3 штуки по 13 долларов.
Правда еще не знаю, что там с доставкой.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.