Све је почело тако што је аутор купио занимљив уређај на секундарном тржишту - Смарт Респонсе КСЕ (
Ови уређаји су укинути пре неколико година, а оно што су школе купиле по цени од 100-200 долара сада се појављује на еБаиу за 10 долара или мање. Тамошњи хардвер је веома погодан за штреберске експерименте:
- Тастатура са 60 тастера
- екран резолуције 384×136, 2 бита по пикселу - сличан БЦ, ЦГА, али 4 не боје, већ градације осветљености
- микроконтролер АТмега128РФА1 (128 кБ флеш меморија, 4 кБ РОМ, 16 кБ РАМ, 802.15.4 примопредајник)
- екстерна (у односу на микроконтролер, а не цео уређај) флеш меморија од 1 мегабита (128 килобајта) са СПИ интерфејсом
- одељак за 4 ААА елемента.
Из назива микроконтролера јасно је да припада АВР породици, што значи да је Ардуино компатибилан задатак више него тривијалан...
Од вести па надаље
Али аутора више занима могућност да се не игра на уређају, већ да проучава:
- флеш меморија са серијским СПИ интерфејсом
- покретачи за АВР
- стандард 802.15.4
Аутор је почео писањем
Ово је довољно да отпремите Ардуино боотлоадер, али не и скицу - серијски порт тамо није повезан, тако да и даље не можете без отварања кућишта. Такође, ТКС0 и РКС0 линије првог серијског порта су комбиноване са линијама за прозивање матрице тастатуре, односно онима које прозивају функцијске тастере на бочним странама екрана. Али шта можете - аутор је направио ово:
Тамо је донео ЈТАГ линије и сада нема потребе да отварате одељак за батерије. А да би се скице могле учитати, спојио сам оба серијска порта на исти конектор, додајући и прекидач, јер је са уграђеним батеријама физички немогуће искључити уређај на било који други начин.
Било је потребно доста времена за рад са лемилом, помоћним ножем и пиштољем за лепљење. Уопштено говорећи, учитавање скица „преко ваздуха“ је много згодније, хитно морамо да измислимо нешто за ово.
Ардуино ИДЕ користи програм за отпремање скица
Након што је покушао на различите начине да превазиђе овај проблем, аутор је дошао до следећег. Уређај има флеш меморију од 128 КБ са СПИ интерфејсом - податке примамо преко жица (запамтите да аутор већ има један уређај са конектором са стране), користимо ову меморију као бафер и шаљемо податке преко радија канал на други уређај. Поздрав из Цибико-а.
Након писања кода за рад са радио каналом, као и фонта, лоадер је постао дужи од 4 килобајта. Стога је вредност ХФУСЕ морала да се промени са 0кДА на 0кД8. Сада покретач може бити дугачак до 8 килобајта, а почетна адреса је сада 0к1Е000. Ово се одражава у Макефиле-у, али такође треба узети у обзир приликом попуњавања
802.15.4 примопредајник у АТмега128РФА1 је првобитно дизајниран да ради користећи протокол
Испоставило се да су канали 15 и 26 најмање подложни сметњама од ВиФи-а. Дисцлаимер: преводилац не зна да ли је дозвољено да поједностави ЗигБее на овај начин. Можда би требало мало више програмирати и имплементирати га у потпуности?
На првом уређају је потребно имплементирати машину коначног стања која преноси податке путем СТК500 протокола. Углавном, поруке које се преносе и примају су самодовољне, али неке су везане за оне које су раније прошле кроз канал. Дат је опис дијалога
Важна компонента овог дијалога је пренос пакета намењених за упис у флеш меморију одредишног уређаја. За једноставне микроконтролере породице АВР, величина странице је 128 бајтова, али за АТмега128РФА1 је 256. И за флеш меморију која је повезана преко СПИ протокола је иста. Програм у првом уређају, приликом постављања скице, не преноси је одмах на други, већ је уписује у ову меморију. Када Ардуино ИДЕ провери исправност уноса, шаље се оно што је тамо написано. Сада треба да пренесемо примљене податке преко радио канала на други уређај. Истовремено, прелазак са пријема на пренос и назад се дешава прилично често. Протокол СТК500 је индиферентан према кашњењима, али не толерише губитак података (чудно, али је горе речено да кашњења утичу и на пренос података). А губици током бежичног преноса су неизбежни. АТмега128РФА1 има уграђену хардверску имплементацију поновљених захтева када постоје сумње у исправност преноса, али је аутор одлучио да исто имплементира у софтвер. Развио је протокол у коме много више података тече на један начин него на други.
Није савршено, али ради. Страница од 256 бајтова подељена је на четири сегмента, од којих се сваки преноси ваздушним путем као пакет. Пакет може да садржи до 125 бајтова података плус један бајт за дужину и два бајта за ЦРЦ. Дакле, фрагменти дужине 64 бајта заједно са бројевима страница и сегмената (од 0 до 3) се постављају тамо. Пријемни уређај има променљиву која му омогућава да прати колико је сегмената примљено, а када сва четири стигну, уређај који шаље добија потврду да је цела страница примљена. Нема потврде (ЦРЦ се не подудара) - поново пошаљите целу страницу. Брзина је чак и већа него при преносу преко кабла. види:
Али генерално, било би неопходно обезбедити згодан начин повезивања кабла са уређајима за учитавање скица и преко њега. На пример, поставите такав претварач интерфејса на ЦП2102, као на фотографији, и залепите га на плочу тако да може да издржи силу приликом повезивања и одспајања Мицро УСБ кабла.
Такође има стабилизатор од 3,3 волта (и како га користити у уређају са напајањем од 6 волти - само ако има исти стабилизатор, а можете додати две диоде да аутоматски изаберете која од њих ће напајати уређај) . Све три ЛЕД диоде морају бити одлемљене са конверторске плоче интерфејса, иначе ће додатно напунити батерије када раде на њима, а такође ће ометати прозивање тастатуре и рад са флеш меморијом са СПИ интерфејсом.
Испоставило се да је постизање циља још интересантније од постизања (и није ми потребна та шала о аутобусу). Аутор је научио много о АВР боотлоадерима, СПИ флеш меморији, СТК500 протоколу и стандарду 802.15.4.
Сав други код поред библиотеке описане изнад је −
Извор: ввв.хабр.цом