Pull to refresh

Удалённая отладка железа

Circuit design *

Отладочная демоборда, установленная в WishBoard

Помню счастливые студенческие годы, когда было море свободного времени. Золотые времена, когда на скучной паре можно было писать программу или читать полезную книгу. Или сидеть с паяльником или в глубокой отладке сутки на пролёт, без сна.
Эти прекрасные времена безумного творчества закончились тогда, когда я получил диплом и устроился на работу на полный рабочий день. Тогда закончился славный фриланс и начались суровые будни. У меня возникло стойкое ощущение, что у меня кто-то украл из жизни 11 часов ( два часа дороги, час обед и 8 часов работы). Самое печальное было в том, что на работе я выматывался на столько, что ни о каких ночных бдениях даже мыслить не приходилось: пришёл, поужинал и лёг спать, иначе завтра овощ. В конце, концов, такое положение вещей меня перестало устраивать, и я начал думать, что же делать.
В своём хобби – занятиях электроникой, я в основном делаю устройства на микроконтроллерах. Сборка отладочной схемы, как правило, идёт достаточно быстро, львиную долю времени занимает написание и отладка программы для контроллера. А на работе у меня присутствует такой ресурс как время (например обед) и быстрый Интернет. По сему родилась гениальная по своей простоте идея удалённой отладки, и не только программ, но и железа.


Концепция



В качестве основной операционной системы, дома у меня установлен линукс. Это и громадное достоинство и так же и недостаток.
За что я люблю Linux, так это за его полную универсальность. Система из коробки, есть сразу всё что надо для полного счастья: компилятор, офис, некая среда разработки и пакет необходимых драйверов. Громадный плюс – удобная работа из консоли, с быстрым пробрасыванием отдельных окошек.
К основным недостаткам надо отнести его относительно малую распространённость, и программ для контроллеров написанных на gcc много меньше, чем на том же Keil. Так же долгое время у меня не было нормального программатора AVR под Linux. Хорошие программаторы работали только в Windows, а под Вайном работали как-то криво и косо. Всё радикально поменялось, когда я отказался от AVR и переключился на АРМы с бутлоадерами.
Итак, что же нам нужно:
1. Удалённый доступ, с возможностью посмотреть в графическом режиме различные программы.
2. Возможность копирования фалов и изменение их в режиме реального времени.
3. Визуальный контроль.
4. Возможность удалённой прошивки
5. Удалённая эмуляция нажимания клавиш или других внешних событий.

Плюс у меня была дополнительная опция:

6. Возможность удалённого включения компа.

Реализация



Для второго пункта я использую достаточно очевидное, но не самое лучшее решение – Dropbox. Не лучшее, потому что он не позволяет контролировать версии программ, которые ты пишешь. Мои рекомендации тем, кто будет повторять и себе – использовать для софта SVN. Это много удобнее, и избавить от головной боли в будущем.
Для третьего пункта был выбрал микроконтроллер LPC2103 (см. первую картинку), который позволяет прошивать себя через UART. И есть уже готовые консольные программы в Linux, которые просто прописаны в Make-файле, и прошивается он одной простой командой

make program

Удалённое включение


image
Верный боевой роутер

Однако самым важным и первичным для меня и моих близких было то, что в моё отсутствие по умолчанию комп должен быть выключен. По сему реализация Wake-on-lan была приоритетной задачей. Компьютер у меня находится за роутером Asus WL-520 GU. Я уже писал в статье habrahabr.ru/blogs/easyelectronics/109395 про этот роутер. В Олеговской прошивке есть по умолчанию программа, которая называется ether-wake. В качестве параметров подставляется МАК-адрес сетевой карты и компьютер включается. Я написал небольшой скриптик, который после включения начинает пинговать компьютер, чтобы установить момент загрузки и то время, когда можно будет подключиться по SSH к моему компу. Скрипт выглядит так

ether-wake 00:1f:d0:0b:0b:75
ping 192.168.1.109


Теперь, чтобы включить компьютер мне достаточно подсоединится, например с помощью Putty к моему роутеру, запустить скрипт и дождаться, когда пойдут пинги:

[dlinyj@WL-001E8C505364 root]$ ./wakeup.sh
PING 192.168.1.109 (192.168.1.109): 56 data bytes
84 bytes from 192.168.1.109: icmp_seq=0 ttl=64 time=1.0 ms
84 bytes from 192.168.1.109: icmp_seq=1 ttl=64 time=0.8 ms


Удалённая работа


Надо отметить, что дома я использую Linux, но на работе, что логично, в силу ряда обстоятельств я использую ОС Windows XP. И если для проброски окошек в Линуксе достаточно подключится следующей командой к удалённой машине:

ssh user@host –X

То в винде это не такое простое решение, и одним Putty тут не обойтись. Есть несколько вариантов, которые я так или иначе использую. Вариант первый, и самый брутальный – установить на рабочей машине тоже Linux, что я в общем-то и сделал. Но в силу того, что у нас очень развиты сетевые сервисы, а так же сильный документооборот именно в формате MS Office, мне пришлось таки пересесть именно на Windows обратно. Второе решение, аналогично первому, но требует много места на жёском диске – это установка Linux на виртуальной машине.
Самое простое – это использование программы Xming, и этот вариант я использую прямо сейчас. Описание, как это сделать, можно прочитать тут www.openkazan.info/Linux_Desktop_from_Microsoft_Windows-Xming-SSH

Теперь есть возможность по быстрому запустить графическом режиме например gedit, который хорошо подсвечивает синтаксис (консольные приложения не очень люблю использовать, т.к. они занимают консоль). Или например можно посмотреть последние открытые вкладки в браузере, самое частое и необходимое явление. Обычно на ночь, я ищу необходимый мне материал по программированию, и утром с работы на свежую голову его хорошо обрабатывать. Но оказывается, это тоже на самое главное. Теперь появляется возможность визуального контроля!

Визуальный контроль


Согласитесь, особый интерес появляется тогда, когда есть возможность, как же твоя железяка мигает светодиодами и вытворяет всё, что ты хочешь. И такая возможность есть в удалённом режиме. Логично, что если ты можешь пробрасывать окна программ, то ты можешь пробросить и окно, выводящее изображение с вебкамеры. Для передачи изображения, я использовал программу cheese. Чтобы было удобно размещать вебкамеру над платой, я просто её закрепил на настольной лампе

image
Вебкамера

Видео конечно сильно тормозит, и далеко передача идёт не в реальном времени, однако мигание светодиодов увидеть можно

image
Результат работы программы cheese

Хочу отметить один нюанс, что в свете солнечного света – свечение диодов совершенно не видно. По сему я ставлю перед платой либо большой лист картона, либо книги, чтобы они создавали тень.

Нажимаем кнопочки


Кто занимается электроникой, знает, что одна из основных функций контроллера – это обработка событий внешней среды. И для отладки этих событий – их надо создавать. Есть много вариантов реализации – повесить второй контроллер, или аналоговый датчик и т.п. Мне же надо было обрабатывать короткий импульс, для отработки программы-обработчика внешнего прерывания. Для этого я взял старый блок внешних реле.

image
Блок реле

Эта штука осталась с моей первой работы. Там стоит микросхема FT232BM, которая определяется как виртуальный СОМ-порт, контроллер Attiny2313 и блок из трёх реле. Это всё управляется через терминальную программу. Большая буква «A» включает первое реле, «B» второе и т.д., малые соответственно выключают. В качестве альтернативы можно найти какие-нибудь мастеркитовские наборы, или вообще сделать самому.

Вывод



Мой пост – концепция. Не стоит его рассматривать как истину последней инстанции. Вместо Linux вполне можно использовать Windows; вместо Dropbox можно, да и нужно, использовать SVN; вместо могучего блока реле, можно использовать второй микроконтроллер, который и будет эмулировать нажатия. Ещё умные люди подсказывают, что роутеры с олеговской прошивкой могут тоже подцеплять камеру. В общем, не бойтесь экспериментировать и помните, что если вы офисная крыса и вы не можете принести на работу свой шайтан-девайс и травить канифолью всех сотрудников, то это не значит, что на работе вы не можете заниматься программированием и электроникой.

P.S. На GCC мне так и не удалось отладить обработку внешних прерываний у контроллера LPC2103. Если кто писал на gcc для контролеров lpc21**, то я буду признателен за посильную помощь, ибо мне так и не удалось найти рабочих примеров и нет того, кто может мне помочь.
Tags: ARMrdpотладкаgcc
Hubs: Circuit design
Total votes 75: ↑75 and ↓0 +75
Comments 48
Comments Comments 48

Popular right now