Подключение символьного ЖК индикатора к DIR-320 через USB (LCD HD44780 for Dlink DIR-320)
Сегодня я расскажу как подключить к роутеру Dlink DIR-320 символьный индикатор без особых трудностей.
Выбор индикатора
Большинство символьных индикаторов которые доступны у нас в продаже построены на чипе HD44780, либо являются полностью совместимыми с ним. Поэтому обычно вопрос выбора индикатора можно свести к выбору его размеров.
Из доступных у нас, я выбрал индикатор Winstar WH2004D-YGH-CT. Этот индикатор размера 4х20 и является полностью HD44780 совместимым. Datasheet на него.
Подключение ЖК индикатора к USB
Думаю не секрет что эта задача без особых проблем решаема с помощью микроконтроллера. Поскольку с AVR у меня опыта не много, я решил использовать PIC. Для разработки прошивки к PIC контроллеру удобно использовать среду программирования MicroC, поскольку в ней уже содержится набор библиотек для большинства задач. В частности имеются библиотеки для работы с HD44780 совместимым индикатором и с USB портом. Потратив денек я поигрался просто выводя различные надписи при нажатии на кнопки на микроконтроллере PIC16F628A и индикаторе 2х20.
Безусловно этот контроллер слабоват к тому же не умеет работать с USB, поэтому я решил поэкспериментировать с PIC18F2550. Этот контроллер легче всего найти в магазинах.
Немного погуглив я нашел страничку где человек занимается практически той же задачей именно с этим контроллером! Больше того, разработанная им прошивка полностью эмулирует MatrixOrbital драйвер индикатора, что позволяет без проблем использовать lcd4linux под Linux и LCD Smartie под Windows. Само же устройство система определяет как последовательный порт /dev/ttyUSB0. Прошивка и все драйвера доступны к загрузке в виде исходных кодов и скомпиленых бинарей со страницы автора. Разработанная автором схема имеет еще ряд плюсов - это наличие 5 входов для подключения кнопок, 3-х выходов для подключения устройств потребляющих большой (относительно) ток (например кулеров, или других устройств), и 2-х выходов для устройств потребляющих низкий ток (например светодиодов).
Продолжение под катом.
Отладочная консоль DIR-320. Распиновка внутреннего UART. (DIR-320 internal UART pinout)
Внутри роутера DIR-320 разведен один UART порт (3.3 вольта). Он предназначен для подключения консоли отладки. Этот порт является низковольтным и для того чтобы подключиться к нему необходимо иметь преобразователь уровней UART->RS232.
Самый простейший вариант такого преобразователя может быть собран на микросхеме MAX232. Эта микросхема имеет кучу аналогов, и иногда в зависимости от аналогов - немного разную обвязку. Имеет смысл смотреть datasheet на предмет базовой схемы включения (такие схемы обычно идут в конце даташитов).
Описание и схему в общем случае можно посмотреть здесь.
Если заглянуть в /proc/tty/driver/serial видно что UART портов в роутере два:
root@OpenWrt:~# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A mmio:0xB8000300 irq:3 tx:7035 rx:0 RTS|CTS|DTR|DSR|CD 1: uart:16550A mmio:0xB8000400 irq:3 tx:0 rx:0 CTS|DSR|CD
Но реально разведен только один /dev/ttyS0, второй (хендл /dev/ttyS1) мне не удалось найти. Если кто ни будь смог его найти пожалуйста отпишите в комментариях.
К сожалению мой ноутбук не имеет разъема RS232 и использовать преобразователь на max232 не получится. По этому я решил посмотреть в сторону USB to COM переходников. Оказалось что почти все доступные у нас переходники собраны на микросхеме PL2303 и куча китайских data кабелей к мобилкам собраны на этой же микросхеме. Причем USB to COM коверторы оказались в несколько раз дороже чем data кабели.
В общем посетив радиорынок я за 5 украинских рублей прикупил пару таких data кабелей в разобраном состоянии у мужиков которые торгуют всяким хламом. Один оказался собран на pl2303, это было видно на микросхеме, а на втором была "микросхема - капля", честно сказать не знаю как называется такой тип исполеннеия микросхем (Нашел - эта черная штука называется компаунд). Подключив его к своему ноутбуку выяснилось что это микросхема ark3116 (Ark Micro). Согласно datasheet обе эти микросхемы имеют низковольтный вход и их можно подключать к UART порту роутера напрямую без преобразователей (!)
Оба кабеля подхватываются linux без проблем, в системе должно появится устройство /dev/ttyUSB0.
Под WinXP нужны драйвера, может кому то пригодится: драйвер pl2303, драйвер ark3116
Если необходимо использовать этот uart порт для других целей (наиболее часто используют для шаринга с ресиверами без lan порта, подключения GPS, можно также подключить микроконтроллер и взаимодействовать с ним через uart) необходимо отключить отладочную консоль от /dev/ttyS0. Необходимо ввести команды:
nvram set kernel_args="root=/dev/mtdblock2 rootfstype=squashfs,ext3 noinitrd init=/linuxrc console=null" nvram commit
И перезагрузиться. Вернуть все назад можно командой:
nvram set kernel_args="root=/dev/mtdblock2 rootfstype=squashfs,ext3 noinitrd init=/linuxrc console=/dev/ttyS0" nvram commit
Параметры порта по умолчанию 115200 8N1. Для изменения параметров порта под OpenWrt можно использовать утилитку stty. Установить ее можно следующей командой:
opkg install coreutils-stty
Отладочная консоль позволяет работать напрямую с роутером, ввода логина и пароля не требуется, это позволяет, например, задать пароль для root, если вы забыли или не захотели устанавливать веб. интерфейс в OpenWrt, или поиграться с параметрами загрузчика. В качестве клиента под windows можно использовать стандартный hyperterminal, но я предпочитаю putty. Под linux можно использовать утилитку picocom:
# picocom /dev/ttyUSB0
USB накопитель в качестве корня файловой системы используя block-extroot для OpenWRT Backfire (Openwrt external storage device as the root filesystem. block-extroot)
Недавно я описывал как реализовать загрузку системы с внешнего накопителя. Товарищ uvi в своем комментарии к этой статье отметил что для этого можно использовать готовый пакет из OpenWrt block-extroot. Сегодня у меня выдался абсолютно свободный день, поэтому я решил посмотреть что же это такое и попробовать реализовать загрузку используя этот пакет.
Практически всю информацию я взял из странички с документацией к этому пакету.
Итак начнем. (Первые несколько шагов абсолютно идентичны уже описанным).
Подготовка USB накопителя.
Для этого этапа я использую линукс (ubuntu). Подключаем накопитель к линукс-машине и разбиваем накопитель с помощью утилиты fdisk так как вам будет удобно. Я разбил так 1 - своп 128Мб, 2 раздел под корень 150Мб, 3 раздел под home все остальное пространство:
Command (m for help): p Disk /dev/sda: 2063 MB, 2063597568 bytes 16 heads, 32 sectors/track, 7872 cylinders Units = cylinders of 512 * 512 = 262144 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sda1 1 513 131312 82 Linux swap / Solaris /dev/sda2 514 1114 153856 83 Linux /dev/sda3 1115 7872 1730048 83 Linux
Далее необходимо отформатировать разделы в выбранную фс (а точнее ту под которую у вас есть модули в прошивке), я использовал ext3:
mkfs.ext3 /dev/sdX2 mkfs.ext3 /dev/sdX3
!!! Здесь не спутайте - sdX это устройство для вашего USB накопителя. Если бездумно вводить эти команды можно отформатировать свой жесткий диск
Установка block-extroot
Необходимо собрать эти пакеты вместе с прошивкой. На этапе конфигурации (make menuconfig) необходимо дополнительно отметить:
Base system ---> <*> block-mount Utilities ---> Filesystem ---> <*> e2fsprogs Utilities ---> disc ---> <*> block-extroot
Продолжение под катом.
Internal HID device in USB Sound Card (sku.22475) + OpenWrt (HW Modding)
Сегодня я расскажу как я добавил в свой роутер Dlink DIR-320 6 дополнительных кнопок, не прибегая к большим затратам. Думаю приведенный способ подойдет для любой OpenWrt системы.
Характеристики USB sound card и даташиты
Некоторое время назад я писал про подключение USB звуковой карты (sku.22475) к OpenWRT. Эта звуковая карта использует чип TP6911, повторюсь с кратким описанием ее возможностей:
- Compliance with the Universal Serial Bus specification V2.0 Full-Speed
- Built-in USB Transceiver and 3.3V regulator
- Isochronous transfer with adaptive synchronization
- High performance 48KHz sampling rate for audio playback
- 24KHz sampling rate for voice recording
- Two channel audio Class-D Amplify for speaker driving
- 64-level volume control , VR adjustment available
- Embedded 10 bits ADC input
- USB Keyboard interface
- Support USB Suspend function
- 12 MHz crystal oscillation
- 28 / 48 pin package
Согласно data sheet микросхема кроме поддержки звука содержит еще и 2 HID устройства. Также эта микросхема может использоваться в так называемых USB скайп-телефонах и имеет несколько типовых схем включения. (Даташиты всех типовых исполнении я смотрел тут) 2 HID устройства физически реализуются в виде скан-клавиатуры на 24 клавиши и резистивной клавиатуры на 6 кнопок. Я решил что для роутера 24 кнопки это многовато
, а вот 6 вполне.
Продолжение под катом.
Сборка собственных приложений (пакетов) для OpenWrt (Build a new application for OpenWrt by using OpenWrt Build System)
Существует способ очень удобной и быстрой сборки или портирования приложений для OpenWRT. В качестве примера создадим небольшое приложение под названием simple которое выводит числа от 1 до 99.
Получение исходников OpenWrt
Поскольку для сборки мы будем использовать OpenWrt Build System то первое что необходимо сделать это получить исходный код OpenWRT. Если он у вас уже есть можно переходить к следующему пункту. Я использую OpenWrt 10.03, codename Backfire.
svn co svn://svn.openwrt.org/openwrt/branches/backfire openwrt
Должен появится каталог openwrt. Перейдем в него:
cd openwrt
В этом каталоге есть 3 ключевые директории:
- toolchain
- target
- package
Вкратце по этим директориям:
toolchain - В этой директории содержится компилятор, библиотеки а также основные утилиты необходимые для построения и сборки образа прошивки. После выполнения команды make toolchain/install появляется директория staging_dir которая и содержит скомпилированный и установленный toolchain.
target - имеет отношение к "встроенной" embedded платформе. Содержит файлы и патчи относящиеся к различным embedded платформам. Например каталог target/linux содержит патчи и конфиги ядра специфичные для каждой платформы, а в каталоге target/image описано как именно собирать образ прошивки для той или иной платформы.
package - каталог в котором содержатся исходники, патчи и конфиги всех пакетов которые можно собрать для OpenWRT. Собственно этот каталог и нужен нам для сборки собственных приложений.
Также стоит отметить что все необходимые исходники и дополнительные файлы в процессе сборки OpenWRT загружаемые из интернета и ложатся в каталог dl, а каталог build_dir это временный каталог для сборки.
Для дальнейших шагов необходимо выполнить:
Получим исходники всех необходимях для сборки пакетов
./scripts/feeds update -a && ./scripts/feeds install -a
Соберем tools и toolchain
make prereq && make tools/install && make toolchain/install
Больше под катом.
OpenWRT 10.03 Backfire + USB Sound card (sku.22475)
Приобрел я себе USB звуковую карточку (sku.22475) в довольно известном китайском магазине www.dealextreme.com за целых $2.23
. Решил состыковать ее с моим роутером D-Link DIR-320. Я уже описывал, что в роутер у меня установлена OpenWRT 10.03, codename Backfire с ядром 2.6.32 и все это дело грузится и работает с флешки. Поскольку usb host в DIR-320 один, я решил заказать еще и супер дорогой 4 port usb hub (sku.24372) за $4.07 в этом же магазине.
Через пару недель после заказа получил устройства, проверил - оба устройства работают в usb2.0 (high-speed). Хаб подхватился системой без проблем и загрузка с флешки прошла тоже без проблем, ну а звук конечно не определился.
Вскрытие звуковой карты показало что построена она на чипе TP6911, согласно data sheet это:
8-bit micro-controller embedded device tailored to the USB audio and USB Keyboard application. It’s able to play two channels PC Audio and record one channel voice through Full-Speed USB bus.
С таким функционалом:
-
Compliance with the Universal Serial Bus specification V2.0 Full-Speed
-
Built-in USB Transceiver and 3.3V regulator
-
Isochronous transfer with adaptive synchronization
-
High performance 48KHz sampling rate for audio playback
-
24KHz sampling rate for voice recording
-
Two channel audio Class-D Amplify for speaker driving
-
64-level volume control , VR adjustment available
-
Embedded 10 bits ADC input
-
USB Keyboard interface
-
Support USB Suspend function
-
12 MHz crystal oscillation
-
28 / 48 pin package
Итог - запись в моно и не очень хорошего качества, а воспроизведение в стерео и по качеству приемлемо.
Пробуем прикрутить этот звук к OpenWRT 10.03 Backfire.
Ошибка “PHY for wifi device wlan0 not found” в OpenWRT
Иногда после перепрошивки возникает небольшая проблема с вайфай. При старте вайфайки выводится ошибка:
root@OpenWrt:~# wifi up PHY for wifi device wlan0 not found PHY for wifi device wlan0 not found
Решение этой проблемы простое, необходимо получить мак адрес карты:
root@OpenWrt:~# cat /sys/class/ieee80211/phy0/macaddress XX:XX:XX:XX:XX:XX
Полученный мак вида XX:XX:XX:XX:XX:XX нужно прописать в файл /etc/config/wireless в секцию wifi-device в виде
option 'macaddr' 'XX:XX:XX:XX:XX:XX'
Например у меня этот файл выглядит так:
config 'wifi-device' 'wlan0'
option 'type' 'mac80211'
option 'channel' '06'
option 'macaddr' 'XX:XX:XX:XX:XX:XX'
option 'disabled' '0'
config 'wifi-iface'
option 'device' 'wlan0'
option 'network' 'lan'
option 'mode' 'ap'
option 'ssid' 'OpenWrt'
option 'encryption' 'none'
option 'macpolicy' 'none'
option 'macfilter' 'none'
Все. Можно запускать вайфай через web интерфейс или из консоли командой wifi up
OpenWRT Backfire Загрузка с USB накопителя (Openwrt USB Boot)
Итак прошивка собрана и работает. Перейдем к этапу переноса системы на внешний накопитель. Я решил использовать обычную USB флешку на 2Гб (можно любую другую), однако если вы планируете использовать роутер как торент-качалку имеет смысл в качестве накопителя использовать внешний USB жесткий диск. Все написанное ниже справедливо и для внешнего жесткого диска.
Подготовка USB накопителя
Первое что нужно сделать это подготовить USB накопитель. Как я уже писал, практически все операции я выполняю под linux (ubuntu). С помощью утилиты fdisk разбиваем флешку на 3 раздела. Первый как своп - размером 128Мб (классическое правило - своп в 2 раза больше оперативки), вторая партиция под корень системы - я выделил 150Мб, и третья партиция под /home - все оставшееся пространство. Последний раздел и будет пользовательским, куда будет ложится вся "крупногабаритная" информация.
Затем необходимо отформатировать 2-й и 3-й раздел утилитой mkfs.ext3 (или в ту файловую систему под которую вы собрали прошивку) . Вот то что получилось у меня:
Command (m for help): p Disk /dev/sda: 2063 MB, 2063597568 bytes 16 heads, 32 sectors/track, 7872 cylinders Units = cylinders of 512 * 512 = 262144 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sda1 1 513 131312 82 Linux swap / Solaris /dev/sda2 514 1114 153856 83 Linux /dev/sda3 1115 7872 1730048 83 Linux
Все накопитель готов, можно переходить к следующему этапу. (Продолжение как водится под катом)
Сборка прошивки OpenWrt Backfire для D-Link DIR-320
Итак небольшой железный моддинг роутера у нас есть, перейдем к софту. Сборка прошивки.
В качестве прошивки я выбрал OpenWrt, ее релиз Backfire 10.03 и ядро в этой сборке 2.6.32. Сборка производится под linux, я использовал ubuntu. Цель сборки - собрать образ минимального размера, содержащий все необходимые модули для реализации режима работы с флешки (usb boot). Однако этот метод подойдет для сборки любой кастомной прошивки, единственное ограничение - ее размер, который ограничен размером флеш памяти установленной в роутере (4Mb).
Первый шаг - получение свежих исходников с офф. сайта разработчиков:
svn co svn://svn.openwrt.org/openwrt/branches/backfire dir320
У вас появится каталог dir320 в котором собственно и будут исходники. Все последующие команды нужно запускать из этого каталога, для этого перейдем в него:
cd dir320
Далее нужно получить исходники всех необходимях для сборки пакетов:
./scripts/feeds update -a && ./scripts/feeds install -a
Следующие команды собирают tools и toolchain необходимой архитектуры:
make prereq && make tools/install && make toolchain/install
Теперь переходим к интересному, а именно к конфигурированию прошивки, запускаем:
make menuconfig
Я сконфигурировал прошивку следующим образом:
(продолжение читаем под катом)
D-link DIR-320 hardware modding. (DIR-320 64 Mb RAM Upgrade)
Итак приобрел я себе роутер D-link DIR-320. Про эту модель в интернете написано достаточно много, лично для меня при выборе главными плюсами была его низкая цена и хорошая поддержка openwrt, ddwrt и т.д. С родной прошивкой роутер у меня не проработал и дня, прошивка была удалена и собрана другая, более удовлетворяющая моим требованиям. Но сейчас не об этом. Сейчас я расскажу о замене (увеличении) оперативной памяти (RAM) в роутере D-Link DIR-320.
Не посмотреть что внутри я не мог
и на следующий же день роутер был вскрыт. Внутри я обратил внимание на микросхему памяти, микросхема похожа на обычную ddr.
Погуглив сразу нашел море информации по этой теме - в роутере установлена память K4H561638H-UCCC По даташиту это DDR-400, 256Mbits x 16 bits (32Mb), 66pin TSOPII. Из доступных замен без проблем можно найти чипы по 64Мб (512Mbits x 16 bits), это обычные планки памяти DDR-400 265Mb (4 чипа) или DDR-400 512Mb (8 чипов). На многих сайтах ребята ставят себе Hynix (маркировка чипа HY5DU121622CTP-D43). Также по описаниям успешно установлена и работает память Infineon (маркировка чипа HYB25D512160BE-5).
Продолжение под катом.







