USB програматор за AVR микроконтролери с конвертор на USB интерфейс
Продължавам цикъла от бележки „бебешки проекти“
Онзи ден събрах друга версия на USB програмист за AVR микроконтролери, базирани на чипа FT232RL (нарекох този програмист APU-2MM):

Това устройство съчетава функциите на програматор и USB-UART конвертор. Тоест, когато използвате въпросния модул чрез същия интерфейсен кабел (в този случай, очевидно, USB A - Mini USB B), можете:
- за комуникация на компютъра с изпълнително устройство, направено по-специално на базата на микроконтролера AVR (т.е. преобразуване на данните от USB шината в данни от UART "шината"),
- флаш микроконтролера AVR, на базата на който е направено изпълнителното устройство.
Искам веднага да направя резервация, че „оригиналния“ фърмуер се излива в камъка, т.е. шестнадесетичен файл, генериран (обикновено) от средата за разработка. Не се подразбира криптиране или други украшения. Мигането на микроконтролера през USB протича точно по същия начин, както ако просто поставим програматора в конектора „ISP“ на целевата платка.
Важна забележка: Следва лиричното отклонение на сив фон. Няма нищо общо с реалната работа на въпросния програмист/конвертор и може спокойно да се пропусне. Това отклонение е написано само с една цел - да обясня защо, по дяволите, изобщо имах нужда от такова устройство.
Идеята за създаване на модул от този вид е в главата ми от дълго време и твърдо. Същността на идеята е да се изпращат устройства до клиентите, които могат да бъдат флашнати директно през интерфейсния конектор (т.е. през който устройството комуникира с компютъра). Обикновено ми се случва така - сглобиха определена система, която включва моя занаят.Системата отиде някъде далеч, далеч (например в Ленинград или Германия). И след няколко години клиентът се обажда и казва - всичко работи добре, но ще е необходимо леко да се коригира / подобри това и това. И това не изглежда да е въпрос - промяната на фърмуера на камък, за да отговаря на тези нови изисквания, обикновено не е трудна (и не отнема много време). Но как да попълня този код в микроконтролера?
Знаещите хора веднага ще кажат - тъй като устройството комуникира с компютъра, тогава 99 от 100 за това, че UART линиите на микроконтролера се използват за това. И ако е така - използвайте буутлоудъра, няма да сгрешите. Но, първо, доколкото разбирам, багажникът не може да се завинти към всяка AVR тухла. И второ (и най-важното) - толкова съм мързелив, че повече от пет години така и не си направих труда да разбера как работи буутлоудъра и как да го използвам. Защото винаги съм имал / имам програматор под ръка и аз лично никога не съм имал проблем с мигащи камъни. Е, клиентът ... А какво да кажем за клиента? Клиентът, в допълнение към моите занаяти, просто получи отделен LPT-програматор на купчината. Така измамих мързела си. Вярно е, че използването на отделен програмист от клиента доведе до цяла поредица от стандартни въпроси: къде да го пъхна и дали е поставен неправилно, и как да разглобите устройството и т.н. Но за няколко години се научих да им отговарям толкова сръчно, че тези въпроси не бяха проблем.
И трето (обикновено не много важно) - буутлоудърът все още изяжда малка част от флаш микроконтролера.
Между другото, още тогава започнах да мисля - трябва ли да вграждам програмисти директно в устройства? По това време обаче все още използвах само LPT и COM портове за фърмуер. Но, както знаете, програмистите на COM порта са твърде уморени, а конекторът за LPT портаболезнено огромен. Беше възможно, разбира се, да се реши проблемът, като се постави някакъв хитър малък конектор на предния панел на устройството. Но това би довело до производството на адаптер като "LPT-хитър конектор" или "COM-хитър конектор", който ще трябва да направя отново и тази концепция не получи по-нататъшно развитие (вижте вродена мързел).
Въпреки това, както знаете, сега USB интерфейсът е здраво навлязъл в живота ни. Да, толкова е силен, че дънни платки (особено евтини) с LPT или COM портове могат да бъдат намерени далеч не навсякъде и не винаги. Гориво в огъня добавят най-коварните лаптопи, които по принцип нямат тези портове (всичко заради глобалната миниатюризация). И затова въпросът как клиентът ще мига микроконтролери, усърдно работейки в моите занаяти, беше особено остър за мен. Защото, заедно с програмиста, изпращането на отделна системна единица на клиента до купчината за изливане на кода в камък е някак си твърде готино.
Трябваше да премина към USB програмисти. Събрах AVR910 и USBasp. Но някак си нямах късмет с тях - често се заблуждаваха не като дете. Едва по-късно разбрах, че грешката, по пътя, беше кривият фърмуер (или фърмуерът на изпълняващите се камъни на програмистите, не го разбрах наистина). И по това време изпращането на програмист на клиента, който с 60-70% вероятност няма да работи наистина, беше някак безполезно. И още малко - и щях да се принудя да седна за задълбочено проучване на буутлоудърите, но тогава се случи чудо.
Изведнъж разбрах, че прост USB програмист за AVR микроконтролери може да бъде сглобен на базата на чипа FT232RL. И той ще бъде без бъги и умен. Веднага сглобих един за себе си (връзката също така показва причините, поради които изобщо трябваше да се интересувам от този въпрос). И вървеше и вървеше щастлив катослон, докато мега-мисъл не удари главата: „Е, вече използвахте FT232RL за USB-UART адаптери (все още следвах модата, да). И в новия програмист линиите RXD и TXD не се използват за мигащи камъни. Вземете осцилоскоп и вижте какво се случва на "мигащите" линии в момента на прехвърляне на "полезна" информация през USB. И след това вижте какво се случва на RXD и TXD по време на фърмуера. Обикновено слушам главата си, така че послушно следвах осцилоскопа. И се оказа, че по време на фърмуера на линиите "интерфейс" - тишина. И в момента на прехвърляне на „полезна“ информация през USB, има и мълчание на „мигащите“ линии. Тоест работата на устройството по линиите „мигане“ и „интерфейс“ протича независимо и тези линии не си пречат една на друга. И тук отначало онемях, а после се усмихнах лукаво - по пътя ще се сбъдне старата ми мечта. И аз мечтаех, нека ви напомня, за малък (за предпочитане вграден в основната платка на устройството) модул, чрез който би било възможно както да обменяте информация с компютър в „нормален“ режим, така и да флашвате AVR микроконтролери, на базата на които е направено устройството.
В резултат на това схемата на разглеждания програмист / конвертор започна да изглежда така:

Ако го сравните със схемата на програмиста APU-2, ще забележите, че от гледна точка на самата схема тези две устройства са почти идентични. Ето защо, за да опиша работата на веригата, ще си позволя просто да копирам парче от стара бележка:
Тук не е измислено нищо ново, не е открита Америка. Описанието на работата на веригата е многократно цитирано в Интернет. По принцип няма какво специално да описвам тук. Тази схема просто насочва сигналите MOSI, MISO, SCK и RESET, които се генерират съответно в RTS, DCD, DTR и RI щифтовете на чипа DD1 (FT232RL) до желанияизходите на микроконтролера, които трябва да бъдат флашнати. Освен това той прави това само в момента на програмиране на камък, в други моменти програмистът е изключен от платката, която се флашва поради 4 буферни елемента на микросхемата DD2 (74HC125D). Състоянието на линиите MOSI, MISO, SCK и RESET се задава / чете от специален фърмуер на компютъра. Прехвърлянето на данни за фърмуера на микроконтролера между компютъра и чипа FT232RL се осъществява чрез USB шина. През останалото време (когато камъкът не е пробит), m/s DD1 работи в "нормален" режим, т.е. като USB-UART конвертор.
И читателят може да има логичен въпрос - каква е разликата между тези два програмиста? Разликата им е в дизайна. Ако програмистът APU-2 е замислен и направен като отделно устройство, тогава разглежданият преобразувател APU-2MM е проектиран като модул, вграден в основната платка. Като малък бонус, APU-2MM може да се инсталира в стандартни типове макетни платки.
Специално внимание заслужава схемата на свързване на разглеждания модул към основната платка на микроконтролера. Ако по принцип всичко е ясно със сигналните линии („мига“ - според стандартния ISP, „интерфейс“ - според стандартния UART), тогава бих искал да се спра по-подробно на захранващите вериги.
Факт е, че когато устройството работи, трябва постоянно да се подава захранване към щифт 20 (Vcc е захранващото напрежение на ядрото) на микросхемата DD1. В противен случай, ако микроконтролерът е захранен (Vdd), буферът на програмиста и изходният драйвер FT232RL са заредени (Vccio) и ядрото е изключено (Vcc), всички пинове на UART интерфейса (RXD, TXD, RTS, CTS и т.н.) ще наблюдават логически нули (а не трето състояние). Съответно буферът на програмиста (DD2) ще се „отвори“ и RST сигналът ще се отворисе поддържа в състояние на логическа нула (поради състоянието на щифта RI), което ще предотврати стартирането на микроконтролера. Така че ще чака край морето времето, докато някой добър подаде напрежение на ядрото FT232RL.
В случай, че устройството, в което е вграден програмист APU-2MM, няма собствен източник на захранване и се захранва от USB шината, всичко е просто - веригата за захранване на напрежението за чипа FT232RL е стандартна:

Този факт се дължи на факта, че захранването на модула m / s DD1 се подава постоянно (ако USB кабелът бъде изваден от устройството, той ще спре да работи). Между другото - ако програмистът не се заблуди (което обикновено може да се случи, когато USB кабелът е достатъчно дълъг), дроселът MI0805K400R-10 може да бъде заменен с обикновен джъмпер.
Но когато устройството, в което работи програмистът APU-2MM, има собствено захранване, схемата на свързване на модула очевидно ще приеме следната форма:

Тъй като модулът не трябва да пречи на работата на микроконтролера (т.е. трябва да се подава захранване към ядрото FT232RL), дори ако USB кабелът е изваден от устройството. При такава схема на свързване на модула могат да се използват както "обикновени" диоди, така и диоди на Шотки. Необходимо е само да запомните, че напрежението на пин 20 (Vcc) на чипа FT232RL трябва да бъде най-малко +4.0V и не повече от +5.25V.
Това са всички нюанси на връзката. Съгласно горната програмна схема, той веднага беше разведен


печатна платка (PP). На фигурите по-горе ГОРНАТА страна на дъската е показана отляво, а ДОЛНАТА страна отдясно. Поради факта, че модулът APU-2MM е вграден, беше желателно размерите му да бъдат намалени до максимум. Този фактор определя използването на двустранен монтаж спроизводството на печатна платка и съответно броят на проводящите слоеве на печатната платка, равен на две.
Габаритните и присъединителните размери на модула APU-2MM са показани на фигурата по-долу:

След сглобяването модулът не изисква никаква конфигурация. Можете да поставите дърва за огрев, да шиете камъни (този въпрос е разгледан повече или по-малко подробно в описанието на програмиста APU-2) и да комуникирате с микроконтролери чрез, например, терминална програма. Фърмуерът на микроконтролерите се извършва с помощта на графичната обвивка SinaProg (версия, коригирана за APU-2MM) за програмата AVRDUDE. В списъка с програмисти изберете APU_2MM.
Това всъщност е всичко. Успех с микроконтролерите!
APU-2MM_Hardware.zip (архивът също е приложен към бележката): APU-2MM.pdf - електрическа схема на програматора; APU-2MM_LUT.LAY – файл с печатна платка за гладачни машини; APU-2MM_FR.LAY - файл с печатна платка за "шаблони"
Печатната платка е изчертана в програмата "Sprint Layout 5.0"