Zyxel p-330w ee и UART

dtvims
Site Admin
Сообщения: 134
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Zyxel p-330w ee и UART

Сообщение dtvims » Сб ноя 03, 2012 4:14 pm

Когда в заначке найдется старое устройство, то хочется его использовать. У меня нашелся роутер от Zyxel, который я решил использовать для удаленного доступа к одному из планируемых мной устройств на микроконтроллерах AVR. Для использования пользователем интерфейс UART понадобится среда, под которой можно использовать свое ПО, а именно linux. В нашем случае в Zyxel установлен чип rtl8186, а на данном чипе нашлась только одна прошивка с linux - это Wive-ng. После всех моих изысканий, я могу утверждать, что Wive-ng - Это полноценное ядро linux с минимально необходимым набором утилит для работы роутера.
1. Устанавливаем Wive-ng на роутер. Тут примеров полно в сети, но отталкиваться необходимо вот от сюда http://wive-ng.sourceforge.net/. Заметим, что Wive-ng собрана именно под rtl8186, а под другие чипы идет другая версия Wive.
2. Пробуем подключиться к UART роутера. Зайдя под ssh необходимо дать команду например "microcom -s 9600 /dev/ttyS0" - открываем консоль UART на скорости 9600. Если физически к UART подключить микроконтроллер на той же скорости (обязательное условие) с простейшей прошивкой "повторять все что принимает", т.е. эхо, то мы получим ... А непонятно что получим, т.к. по умолчанию по UART работает консоль супер пользователя root, который даже разлогинется не сможет. Запуск терминала "microcom" не позволит перехватить управление UART`ом, он будет работать параллельно, т.е. кто первый прочтет буфер, тот и получил данные. Причем консоль Wive-ng работает на скорости 38400, поэтому можно получать вообще что-то непонятное в результате. Более того, в обычной консоле присутсвует "эхо", из-за чего может пойти зацикленный мусор "данных". Я этот момент упустил и неделю потерял, думая "почему работает, но не стабильно?".
3. Подключаем Serial port к UART чтобы понять, а работает ли хоть что-нибудь? Я для этого взял Arduino, а в моем случае это ее разновидность seeeduino, у которой уже есть нужный мне интерфейс USB->UART, правда гребеночку соответствующую пришлось припаять собственноручно. Подходящих проводков с разъемами я меня не было, поэтому я использовал джамперы. На Arduino необходимо записать любую прошивку, которая ничего не должна писать в Serial. Запускаем Putty в режиме Serial на com5 (в моем случае Arduino сидит на com5) со скоростью 38400. Запускаем роутер (подаем питание) и о чудо: видим всю процедуру загрузки роутера, а в конце появляется командная строка. Соединение стабильное мусора нет, т.е. все работает, а Микроконтроллер я как запускал? на скорости 9600? Подключил МК параллельно и увидел всю ерезь с двух сторон, что отправилось и что пришло, как его увидел МК ... В общем на разных скоростях и при наличии более чем рабочей консоли получим много неясностей...
4. Отключаем консоль роутера через UART, а именно отключаем SERIAL CONSOLE. Тут не очень все просто оказалось. SERIAL CONSOLE зашита в ядро. Если внимательно почитать "http://wive-ng.sourceforge.net/?WIVE-NG_8186_%28revA%2FB%29:Dokumentaciya:Istoriya_izmeneniy", то можно понять, что чтобы отключить, то что нам мешает надо, или самим извернуться и перекомпилировать ядро, или заплатить деньги и получить ... Далее будем решать именно эту проблему. Довольно долго искал с чего же начать? Как перекомпилировать ядро? Начнем с того, что проще всего это очевидно сделать из под linux, но какой версии? Дело в том, что в исходниках присутствуют и бинарные файлы программ, что не будут работать под др. версией Linux и придется искать каждую утилиту отдельно. Нашел вот такую ветку обсуждений "http://sfstudio.livejournal.com/11298.html?thread=135970".
Что можно теперь сказать? Автор sfstudio боится тролей, но походу сам является тролем почище. sfstudio предоставляет нам минимум информации и нехочет поделиться практически ни чем, объясняя это тем, что неохото писать документацию, что неумеет, зато развивать данный топик ему не лениво.
Автор говорит "Mandriva cooker. И собираю и вообще я под мандривой скоро как десятилетие работаю =)", но интереснее фраза "Кто хочет - разберётся, кто не хочет - использует бинарные сборки." - вот тут и зарыта главная подстава, но об этом позже.
Итак нам нужна Mandriva 2009. Еще 2 дня пришлось потратить на Mandriva, не потому, что сложно, а просто пока нашел аппаратные ресурсы, чтобы поднять его. Соорудил виртуалку с 1Г оперативкой и 30Гб жесткого диска, а далее дело техники.
Я частично все делал под Kde, используя графические аксессуары, дабы не тратить время на изучение самой Mandriva. Нам необходима менеджер настроек системы, в которой нашелся пункт установки и поиска пакетов ПО, чем удобно я и воспользовался. Сперва нам точно необходимо найти и установить от туда GIT и Make (почему его нет штатно, незнаю).
Открываем консоль и жмем там "git clone git://wive-ng.git.sourceforge.net/gitroot/wive-ng/wive-ng". По умолчанию мы находимся в пользовательской папке, а команда "git" создает скачиваемый пакет в текущей директории, значит у нас появится папка что-то вроде "/home/myuser/wive-ng". У меня первый запуск окончился ошибкой соединения, я запусти повторно и спустя некоторое время все залилось на комп. Теперь у нас есть исходники wive-ng, и мы ими воспользуемся.
На первый взгляд у нас есть теперь все. Но нет, надо вспомнить фразу от sfstudio, что я заметил выше. Можно добавить еще его фразу "Открою страшную тайну - в лоб врятли выйдет... По крайней мере никому ещё в лоб не удалось, ну зато хороший пинок почмотреть что вутри скриптов и разобраться в системе сборки".
Пишу сразу что реально надо сделать, т.к. sfstudio рекомендует для компиляции сделать только "cd /opt/Wive/toolchain && ./make_links.sh && cd .. && ./compile", но в скрипте make_links.sh присутствует только команда "ln -s /opt/Wive/toolchain/* /usr/local". Знаете что делает последняя команда? Просто создаст ссылку в папке "/usr/local" на файл "*", т.е. "ln" не умеет работать с шаблонами. Но данный набор команд нам все же поможет немного пояснит в каком направлении двигаться.
Мы теперь знаем, что все скачанные исходники должны лежать в папке "/opt/Wive" и не рекомендую эту папку менять, т.к. она прописана местами в скриптах. заметим, также что папка "Wive" обязательно должна быть с заглавной буквы.
Копируем все исходники в папку "/opt/Wive" или создаем ссылку, но далее будем работать именно в ней.
Что дальше? Надо все-таки что-то кинуть в папку"/usr/local". Я просто взял и реально скопировал все что было почти во всех папках "/opt/Wive/toolchain/", а именно папки "bin, include, lib, man, sbin, usr" (папку "usr" обязательно не забываем, хотя вроде чтобы она там забыла? Но надо!!!).
И теперь не все готово? Компиляция еще даже не начата! Рано еще жать "./compile". Надо сперва собрать все что в папке "/opt/Wive/toolchain/nonmips-tcb". Заходим в данную папку и жмем команду "make" (Вот зачем ее надо было выше установить). За что люблю "make", что в случае ошибок их можно устранить и, набрав снова "make", продолжить с того места где остановились. У меня сперва вывалились несколько ошибок, что мне нужны еще несколько пакетов или библиотек. В общем читаем внимательно ошибки и если там написано, что не найдено "xxx", то ищем эту библиотеку в репозитории и жмем "Установить". Но это еще не все ошибки. Некоторые нужные библиотеки прям сразу скачиваются из сети, распаковываются и собираются автоматом, но скачиваются с сайта sfstudio. Будем надеяться, что он не специально залил кривой архивчик "gcc-3.3.3.tar.bz2". Почему-то вывалился с ошибкой, что архив битый. Я нашел то что надо в GNU архиве "http://ftp.gnu.org/gnu/gcc/gcc-3.3.3/gcc-3.3.3.tar.bz2", который весил не 14 как у sfstudio, а 22Mb. В одной из под папок "/opt/Wive/toolchain/nonmips-tcb" можно легко найти битый архив и заменить его на правильный. Возвращаемся в папку "/opt/Wive/toolchain/nonmips-tcb" и снова жмем "make", процедура начнется с распаковки данного архива и пойдет далее успешно. Или нет? У меня вывалился с ошибкой на "Makefile" в папке "/opt/Wive/toolchain/nonmips-tcb/linux", а вернее на его отсутсвие, хотя все вроде было. Решается просто: Удаляем нафиг папку "/opt/Wive/toolchain/nonmips-tcb/linux" и снова запускаем "make", вот тут уже все идет до конца.
Все? А вот нет! Надо еще откомпилировать все что находится в папке "/opt/Wive/tools" т.е. заходим в каждую папку/подпапку и жмем там "make", в одном случе нам будет сказано что нужна еще "zlib", идем ее устанавливать и выясняем, что она уже есть. Ой, есть "zlib", а нужно нам "header files", а этого-то и нет, т.е. ставим!
Все!!! Теперь можно идти в папку "/opt/Wive/" и даем там 2 команды "./config" и "./compile". Ждем около 15 минут, идем в появившуюся папку "/opt/Wive/images" и находим там 3 прошивочки. Нам нужна "wive.bin". У меня это файл полностью совпал с файлом, что взял уже готовый у автора, что было признаком, что все сделано правильно.
Теперь избавимся от SERIAL CONSOLE. Для этого нам понадобиться отредактировать пару файлов.
1. Файл "/opt/Wive/config". Ищем и отключаем там опцию "SERIAL_CONSOLE=YES". Делаем так "SERIAL_CONSOLE=NO". Мне это не помогло, поэтому идем в п.2.
2. Файл "/opt/Wive/kernel/config.8186". Находим и просто комментируем строчку "CONFIG_SERIAL_CONSOLE=y". Наверное можно пойти дальше и закомментировать "CONFIG_SERIAL=y", но мне итак хватило.
Жмем "./compile" и получаем через 15 минут уже новую прошивочку. Устанавливаем новую прошивку и тестируем. Подключенный USB->UART нам по прежнему возвращает отладочную информацию, но командной строки уже нету!!! Ставим Микроконтроллер, запускаем под ssh на роутере "microcom -s 9600 /dev/ttyS0" и видим, что все пашет четко, все что отсылаем, возвращается от МК. В USB->UART параллельно валится мусор, но оно и понятно, скорость-то иная.

БОНУС! Прикладываю фото испытательного "стенда" и саму прошивку откомпилированную по алгоритму выше с отключенной "SERIAL CONSOLE", версия "wive-ng-0.3.18".
На фото:
1. UART на роутере. Сверху вниз: gnd, Tx, Rx, Vcc 3,3V.
2. Seeeduino, с припаянной гребенкой UART. Данная гребенка соединяет непосредственно напрямую с чипом "ft232rl", т.е. мы получаем преобразователь USB->UART. Но надо учесть что питание тут 5V.
3. Обеспечивает согласование уровней (на транзисторе) в обе стороны: http://we.easyelectronics.ru/Shematech/soglasovanie-logicheskih-urovney-5v-i-33v-ustroystv.html
4. ATTiny2313a с простейшей прошивкой, для тестирования работы UART.
Вложения
wive-ng-0.3.18_no_serial_console.zip
(1.73 МБ) 1538 скачиваний
IMG_3360_1.jpg

ZlostnyTip
Сообщения: 2
Зарегистрирован: Вт апр 02, 2013 12:16 am

Re: Zyxel p-330w ee и UART

Сообщение ZlostnyTip » Вт апр 02, 2013 11:31 pm

Здравствуйте!
Могу я Вас попросить о помощи?
Сегодня убил свой Zyxel p-330w ee.
Немного предыстории:
Когда-то давно в 10-м году я его купил, чтоб использовать как W-iFi точку доступа. Начал действовать по инструкции с помощью программы НетФренд. Но там не оказалось функции "выбор режима работы", о которой говорилось в инструкции. Причём версия НетФренд прилагаемая на диске вообще не обнаружила устройство!!!
Скачав с сайта последнюю версию НетФренда устройство обнаружилось, но так и не появился выбор режима работы устройства, сразу предлагалось пробросить порты и т.п...
Я, почему-то, подумал что у меня прошивка стоит новее, чем надо и решил "обновиться" до более старой. Где-то её скачал и каким-то образом (вроде через Web-конфигуратор) начал заливать...
В результате у меня загорелась оранжевым цветом лампочка POWER и всё сдохло...
Подумав, что гарантия мне уже не светит, решил найти метод восстановления устройства.
Ребята на форумах предлагали через TFTP залить файлы: webpages-zyxel-rus.bin; root.bin и linux.bin.
Но там, где они предлагали взять эти файлы их не нашлось! Были удалены... Тогда я нашёл нечто подобное на каком-то FTP-шнике (ftp://opensource.zyxel.com/P-330W/). Залил их, и, о чудо!!!, всё заработало!!! Мой путеводитель снова заморгал зелёными лампочками!!!
А тем временем я уже понял, что оказывается новая прога НетФренд не может выбирать режим работы устройства. Что это делается только из Web-конфигуратора.
Я всё сделал и оно долгое время работало в режиме точки доступа (коммутатора).
Недавно ни с того ни с сего дико упала скорость интернета на LAN-портах до 100кбит/с. По Wi-Fi ещё как-то работало. А ещё я сменил провайдера и уже понадобился режим не точки доступа, а маршрутизатора. Взял я путеводителя на работу и перепаял в нём все электролитические конденсаторы. А ещё радиатор небольшой на чипсет прилепил. Думал что всё без толку... А нет!!! Путеводитель снова заработал!!!
Но этого оказалось мало! Новый провайдер стал предоставлять услугу IPTV. Я попытался настроить данную функцию. Весь народ в интернете пишет, что с новыми прошивками прекрасно работает! И у меня всё дико стало дурковать! То интернет не работает, то IPTV... В тех-поддержке Зухеля сказали, что это аппаратная проблема и без сдачи устройства в сервисный центр не обойтись. А такового у нас в городе нету. А по почте накладно будет.
Вспомнив свою предысторию прошивок, я подумал что дело в том, что я когда-то всё же не те файлы в него залил. И решил попробовать заново перепрошить. И нужные файлы вроде нашёл.
Начал перепрошивать и что-то сделал видимо не так... В результате у меня теперь даже оранжевым светодиод питания не светится! Молчит и всё! Втыкаешь в LAN или WAN сетевой шнурок - соответствующий порт зелёным загорается. А питание молчит! Пытаюсь снова что-нибудь по TFTP отправить - полная тишина... "Превышено время ожидания"...
Теперь я остался без путеводителя. А у Вас я у единственного увидел более-менее понятное описание как можно общаться с этим устройством не через сетевую карту, а через COM-порт.
Можно Вас попросить помочь поднять мне это устройство? Я хочу вернуть его к заводским установкам с последней прошивкой. Могу я его ещё как-нибудь запустить?
В программировании я не силён, по этому прошу помощи с подробным описанием, как чего и какими программами делать...
COM-порт на компе я найду. Если нужен кабель, то спаяю, дайте только схему. Разъёмчик "+3.3V, Tx, Rx, Gnd" в путеводителе я нашёл.
Жду помощи!
Спасибо!

dtvims
Site Admin
Сообщения: 134
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Re: Zyxel p-330w ee и UART

Сообщение dtvims » Чт май 16, 2013 5:26 pm

Прошу прощения, не видел вопроса ибо сюда редко пишет, кроме спамеров, потому еще и жесткая модерация сообщений.
Может с ответом уже поздно и Вы как-то решили свои проблемы, все-таки прошло более месяца, но тем не менее...
Итак все-таки я бы попробовал добить TFTP, может что-то сделано не так, роутер не вошел в нужный режим, забыли поменять IP на компутере и т.п. типовые ошибки почему банально вы не можете подключиться к роутеру. Мигающий индикатор питания явный признак, что в данный режим роутер входит, если индикатор молчит, значит это обычный режим, вернее даже это режим свича (простого концентратора). Вообще похожие проблемы описываются у ASUS`а, когда не загорается индикатор питания или еле тлеет - это признак сломавшегося блока питания, но c Zyxel я не уверен ибо чипы используются кардинально разные, но попробовать использовать др. БП тоже можно.
Идеально, конечно посмотреть что нам UART дает. Что для этого нужно:
1. Со стороны компа, разумеется COM порт. Необходимо за ранее выяснить его номер, например COM3.
2. Нужен преобразователь уровней TTL (обычно на базе ft232 или cp232 или max232), т.е. если у Вас есть именно COM-порт, то на нем 9В и много лишних контактов, а нам нужно 3.3В и всего 4 контакта для интерфейса UART.
Можно найти сразу USB UART модуль (на базе все тех же чипов, см. выше), который вы подключите по USB, он определится как COM-порт, а на самом модуле уже будут нужные 4 контакта, где уже учтено, что питание может быть от 3.3В до 5В или даже выше (надо смотреть описание).
3. На компе нужна прога терминала COM-порта, например putty последней версии, где необходимо выбрать тип подключения Serial и в поле подключения указать имя порта COM3, а в поле speed указать 38400 и нажать Open. Должно открыться окно терминала или выскочить ошибка (если что-то сделали не так). Чтобы проверить работу сего чуда, необходимо на конверторе замкнуть контакты RX и TX перемычкой. Если все хорошо, то все что вводите в терминал, будет отображаться обратно, а без перемычки пропадать безвести...
4. Соединить роутер и преобразователь уровней крест на крест, т.е. RX с TX и наоборот, питание с питанием, а землю с землей. Собственно схем правильного соединения по UART в сети полно.
Теперь можно врубать роутер и смотреть, что он выводит. Если ничего не отображается, значит соединили RX с RX. Если отображается мусор, значит выбрана неверная скорость порта.

Далее надо смотреть детали.

А по хорошему, чтобы работало IPTV лучше пойти и купить новый роутер, что я и сделал, когда мой накрылся. Ждать пока отремонтирую старый не готов, покупать дорогой тоже, потому хороший выбор RT-N12 C1/D1 - самая надежная и шустрая моделька из бюджетных, только сразу после покупки надо перезалить на новую родную прошивку.
Для IPTV есть пара маленьких секретиков.
1. его знают все - это Разрешить (в разделе маршрутизация или в разделе IPTV) "многоадресная маршрутизация" (multicast routing).
2. В расширенных настройках wifi установить параметр "Скорость многоадресной передачи" (Multicast Rate) в значение 11 (можно поиграться с данным параметром). Значение может быть из списка еще и с буковками, главное быть настойчивым и выбирать там где есть 11.
Последнее необходимо чтобы включенное ТВ не забивало wifi, а как побочный эффект у меня и по wifi запахало без тормозов. Тут как раз и есть тот самый момент, когда то инет работает, а то TV, не если выставить указанную опцию, то работает все.

ZlostnyTip
Сообщения: 2
Зарегистрирован: Вт апр 02, 2013 12:16 am

Re: Zyxel p-330w ee и UART

Сообщение ZlostnyTip » Чт май 16, 2013 7:11 pm

Добрый день!
Спасибо большое за помощь!
Она ещё актуальна!
Только немного не своевременна. Я на старости лет решил всё-таки закончить институт и сейчас пишу диплом... Времени катастрофически нет! Но потом я обязательно попытаюсь восстановить своё устройство! Оно хоть и неказистое, но работать может вполне сносно!!! В качестве его замены я уже успел купит КИНЕТИКа. Только через него ИПТВ почему-то постоянно дёргалось! Раз в несколько секунд картинка рассыпалась... А сейчас вообще пропало. Но это уже глюк конторы нашей... А через 330-го если оно показывало, то показывало нормально!
Насчёт восстановления через ТФТП думаю - дохлый номер. Индикатор питания на нём вообще не светится. Никак... А порты при подключении загораются, и как коммутатор он работает. Длительное нажатие на резет и нажатие на него при включении никак себя не проявляют...
Я потом, как диплом защищу, найду (или спаяю) УАРТ-шнурок и займусь изделием. Тогда, если вопросы возникнут, то напишу, ОК?
А пока спасибо, что откликнулись!

dtvims
Site Admin
Сообщения: 134
Зарегистрирован: Пн авг 02, 2010 2:43 pm

Re: Zyxel p-330w ee и UART

Сообщение dtvims » Пт май 17, 2013 8:47 am

Обращайтесь!
Я уже жалею, поставил именно эту версию форума - никаких уведомлений, что есть новые сообщения и не понятно как и где включить, а дорабатывать неохото...
Если долго не реагирую даже чтобы пропустить через модерацию, можно дополнительно в личку свиснуть - там уведомление на почту грохнется.
Когда нет времени, можно переходник заказать в китае, например на dx.com, там можно еще кучу всего полезного для дому сразу набрать. А ждать благодаря оперативности нашей почты и таможне - как раз диплом допишите :)


Вернуться в «Микроконтроллеры и автоматизация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей