Месечни архиви: февруари 2008

В борбата за сериен порт

Историята по-долу се разви преди доста време, но скоро ми се наложи да си я припомня. Реших, да си запиша нещата тук, пък може и на някой друг да свърши работа.

Напоследък серийните портове взеха напълно да изчезват от компютрите – осбено от преносимите. Дори и моят, който не е първа младост няма такъв (сигурно и защото е евтин модел).

RS232 интерфейсът може да е бавен, с обемист конектор и да работи на малки разстояния, но той има и едно предимство – изклютително прост е. Ако се занимавате с разни малки контролери ще знаете, че той е в порядъци по-удобен, достъпен, евтин и прост за реализация от USB или ETHERNET например.

И така, за да се сдобия с тази незаменима екстра се запътих към близкия магазин за конвертор от USB към сериен порт. Взех си и компютъра, защото за мен е важно чудото да работи под Линукс, а обикновено по опаковките това не го рекламират много. Преди да го купя включих USB конверторът и ядрото веднага го разпозна и се появи нов сериен порт. Купих го.

За съжаление радостта ми беше кратка, защото след като се прибрах установих, че въпросният конвертор не може да си комуникира с никакво серийно устройство – макар, че се разпознава. Може да е бил дефектен моя, но по-сокоро предположението ми е, че има проблеми с драйвера – cypres_m8. След това съм пробвал с други конвертори с чипове на FTDI и Prolific 2303 и при тях нямаше такъв проблем със серийната комуникация. Въпреки това при ситуации в които използвате серийния порт не съвсем по предназначение, а примерно превключвате контролните линии много бързо (bit banging) за да говорите някакъв друг протокол тези конвертори може и да не работят.

В крайна сметка реших да си взема „истински“ RS232 под формата на PCMCIA карта. След търсене с Гугъл попаднах на блога на Данчо, където той беше обявил за продажба точно такава карта поради несъвместимост с неговия компютър. Видяхме се. Пъхнах картата в моя компютър – ядрото я разпозна веднага – взех я.

Прибрах се. Първата ми работа беше да тествам новата придобивка – отново нищо! Никаква комуникация, нито с мобилния ми телефон, нито със стар външен модем, който успях да изровя.

Самата платка получих в картонена кутия, на която имаше йероглифи и единствено се разбираше, че пристига от Хонг Конг. Имаше и диск с драйвери – само за Унидоус. Всички отличителни белези по картата се свеждаха до надпис „BBL PCMCIA RS-232 CARD“. Търсенето за информация по тези ключови думи не даде полезен резултат.

Решен да не се предавам толкова лесно направих следния експеримент. Стартирах minicom и настроих порта на скорост 9600 бита в секунда. Пуснах да се изпраща файл съдържащ единствено буквата „а“. След това закачих изходящата линия (TX) към осцилоскоп и видях следното:

oscilloscope screen

Ура! Картата все пак работи и дори предава данни. Единствената малка подробност е, че ги предава доста по-бързо от колкото се очаква. На картинката по-горе осцилоскопът е настроен на 50 микросекуни за деление по оста Х. Грубо в едно деление се предават 3 бита, значи скоростта е над 62500 бита/секунда – доста над очакваните 9600.

След още малко търсене, проблемът напълно се изясни. Основният компомент осигуряващ серийната връзка e чип от вида UART (Universal Asynchronous Receiver-Transmitter). По-конкретно в моята платка има 16c950. Ядрото го разпознава правилно и драйверът успешно си говори с него. Скоростта обаче се определя чрез делене на тактовата честота получена от външен кварцов резонатор. Оказва се, че няма начин драйверът да разбере каква е честотата на този резонатор. До преди време най-масово се е използвал резонатор с честота 1.8432 MHz, която разделена на 16 дава базова скорост от 115200 бита/сек. Това е записано и в кода на драйвера като стойност по подразбиране.

В момента често се използват резонатори с по-високи честоти за да се постигнат по-големи скорости. Имайки предвид, че при мен получената скорост е около 7-8 пъти по-голяма от очакваната и стандартните стойности дадени в спецификацията на чипа установих, че в моята платка резонаторър най-вероятно е с честота 14.7456MHz, което разделено на 16 дава базова скорост от 921600 бита/сек. За щастие има лесен начин тази скорост да бъде указана с помощта на програмата setserial:


setserial /dev/ttyS0 baud_base 921600

Повтарям теста с осцилоскопа и този път резултатът е доста обнадеждаващ:

oscilloscope screen

Предаването на един бит отнема малко над 2 деления или 100 микросекунди. При зададена скорост от 9600 това е точно колкото се очаква – 1/9600=0,000104167 сек или около 104 микросекунди.

Комуникацията с мобилния телефон, стария външен модем и всичко друго което закача вече работи!

Остана само да добявя едно udev правило, за да не пиша горната команда всеки път когато пъхам картата. Аз си създадох нов файл – /etc/udev/rules.d/10-serial.rules и в него добавих само един ред:

KERNEL=="ttyS0", RUN+="/bin/setserial /dev/ttyS0 baud_base 921600"

Вече всички инструменти са на лице и мога да се заема с работата по проекта за монтаж на вентилатор в банята :).

Линукс курсът приключи

Миналата седмица беше последната лекция от Линукс курса.

В началото дойдоха повече от 25 човека и дори не стигнаха столовете в залата. Към края редовните поситетили останаха 4-5.

Предполагам, че целевата група към която бяхме насочили рекламата е била погрешна. Със Свилен си мислехме, че ще се заинтересуват най-много ученици, затова разлепихме плакати по всички училища. В крайна сметка обаче, нито един от останалите към края не беше ученик. Повечето от тях бяха разбрали за курса напълно случайно – от приятели, колеги. Не знам, ако правим пак нещо подобно кои хора да очакваме като потенциална аудитория и къде да обявим нещата, че да ги видят.

Надявам се на тези които избраха да слушат какви ги говорим да им е било интересно и да са научили ползени неща. Благодаря им за сериозното отношение и постоянството! Също така специални благодарнисти на Васко за любезното домакинство!

За който се интересува дали и какво ще има за в бъдеще – не мога да кажа, зависи от всички нас. Ще се опитаме да не оставим нещата до тук, но кога и под каква форма ще продължат все още нямам идея.

Може би вие имате?

Мартеници онлайн

Независимо дали вече сте изтрезняли след вчерашният празник на виното, или сте още опиянени от любовта ви предлагам да разгледате сайта http://martendom.com. Ако искате да зарадвате приятелите си с красиви и качествени мартенички, а нямате време да обикаляте сергиите със сигурност ще ви е от полза.

Хората от Мартендом изработват всички техни продукти ръчно, с желание и внимание към детайлите. Ако разгледате снимките ще разберете какво имам предвид. А ако решите и си поръчате някои от тях ще видите, че на живо изглеждат още по-добре.

Аз имам скромен принос в направата на сайта. Разбира се, като почти всеки сайт и този не е завършен, но вече е напълно функционален. Имаше няколко интересни идеи за които не остана време. Живот и здраве – догодина!

Друпал 6.0

Днес излезна финалната версия на свободната уеб платформа за управление на съдържание Друпал 6.0! Както винаги има чудесни нововъведения в ядрото, като многоезиковата поддръжка, OpenID, следене за налични обновявания и куп други балгинки.

Всеки който е имал вземане-даване с Друпал знае, че тук освен ядрото от огромно значение са допълнителните модули разработвани от общността. Статус на работата по пренасяне към версия 6 за някои от тях можете да видите тук.

Да ни е честит!