Андрей Смирнов
Время чтения: ~17 мин.
Просмотров: 56

Программатор AVR910: перезагрузка! Ускорение работы + «превращение» в STK500

AndroidApacheAtmelcanvasChromeCSSdemoeffectsFirefoxJavaScriptMySQLold schoolPgSQLPHPpluginsPythonQR-codeSQLwindowswwskxiaomiадминистрированиеалгоритмыбазы данныхбраузерыграфикадевчонкидизайнжелезоза жизньзвукигрыинструментыконтролмикроконтроллерыпараллакспрограммырабочее месторазборкаскриптыутилитыфонариюморНа aliexpress был куплен USB ISP программатор коих там — пруд-пруди.Будем переделывать его в аналог атмеловского STK500, известный как AVRDOPER.usbisp.pngСтоит он в где-то 3-4$ (около 200 рублей на момент покупки), ищется на aliexpress / ebay по фразе USB ISP programmer. Если в хозяйстве нет программаторов для ATMEL — рекомендую брать там же USBASP программатор (только платка) по цене 2-3$ — она позволит не только программировать микропроцессоры ATMEGA, но и вот такие программаторы. Правда не из среды разработки, а только из AVRDUDE и подобных спец. программ.Открываете у программатора колпачок, затем стягиваете алюминиевый корпус в сторону USB-разъема и все — получаете плату программатора. Смотрите внимательно — нам нужно, чтобы программатор был собран на ATMEGA88 (предположительно, версия платы > 3.0).Если Вы там увидели простую ATMEGA8 — не страшно, люди ставили AVRDOPER и туда:здесь, здесь и здесь. Ну либо сделать аналогично тому, что написано ниже, только для ATMEGA8.Ну а если у Вас там — ATMEGA88 — продолжаем — переворачиваем плату, видим там два контакта для перемычки (с надписью UP). Закорачиваем их проводком:usbispBoard.pngПосле этого программатор перейдет в режим самопрограммирования. Программировать его можно любым другим программатором с аналогичным разъемом — например USBASP-ом.Т.е. берем второй программатор, его втыкаем в компьютер, а хвостик с разъемом — в нашего подопытного.Я программировал с помощью AVRDUDE + AVRDUDEPROG и китайского USBASP программатора. Выбираем в AVRDUDE USBASP и ATMEGA88. Считываем сигнатуру — если считалась — значит все сделали правильно и можно шить.Если хотите сохранить текущую прошивку программатора, что я рекомендую (чтобы была возможность откатиться), то:

  1. считать текущие FUSE — биты и записать их значение
  2. считать прошивку в отдельный файл
  3. считать EEPROM в отдельный файл

Далее:

  1. полностью стереть микроконтроллер
  2. записать новые FUSE битыдля ATMEGA88 FUSE LOW BYTE = 0xDF и FUSE HIGH BYTE = 0xDD, если FUSE не инвертированные — это означает включеные SUT1, SPIEN и BODLEVEL1
  3. скачать и прошить прошивку AVRDOPER
  4. EEPROM не трогать

Ну вот и все, теперь надо отпаять нашу перемычку, чтобы программатор вошел в штатный режим работы и установить драйверы AVRDOPER.Теперь, когда Вы подключите новый программатор в USB, он найдет два устройства. Одно из которых будет виртуальный COM-порт. Находите его в диспетчере устройств, смотрите какой у него номер. Если номер > 4, то советую принудительно переопределить там же на какой-либо от 1 до 4 (т.к. в средах разработки COM-порты с бОльшими номерами не показываются).Все — теперь что из CodeVision, что из AtmelStudio можно настроить, что программатор у Вас — STK500 на соответствующем COM-порту — и все — можно шить прямо из среды разработки.По скорости мне показалось, что AVRDOPER медленнее прямого USBASP, зато удобней из-за работы непосредственно из среды, где код пишешь.

Что касается FUSE битов и других контроллеров ATMEL

В принципе, FUSE биты можно посмотреть в makefile от AVRDOPER (в том числе и для ATMEGA8). По-умолчанию AVRDOPER собран для ATMEGA8 и кварцев от 12 MHz с соотвествующим makefile-ом, однако в моем архиве он изменен под ATMEGA88 (однако hex для ATMEGA8 там присутствует, да и makefile можно всегда исправить).Для нашего случая я перекомпилил AVRDOPER для ATMEGA88.Перекомпилить просто в любом линуксе (я использовал Ubuntu server):

  1. ставим компиллер GCC с поддержкой ATMELsudo apt-get install gcc-avr binutils-avr avr-libc
  2. ставим утилиту make sudo apt-get install make
  3. копируем в некую директорию разархивированный AVRDOPER
  4. изменяем там makefile, выставляя там DEVICE, F_CPU и FUSE_L и FUSE_H
  5. make usbasp
  6. получаем в той же директории нужный нам hex-файл прошивки

Этот же программатор можно переделать в нормальный USB ASP

Вот переделанные исходники, их можно скомпилить хоть под ATMEGA8 хоть под ATMEGA88 и авторская статья.Для ATMEGA88 FUSE LOW BYTE = 0xFF и FUSE HIGH BYTE = 0xDF и прошивка.pencil.png09.08.2016, Protocoder

Всем привет! Давненько ничего не писал, даже чувствую себя немного виноватым перед подписчиками, оправдываться не буду, так получилось 🙂

Вернуться решил с небольшой серией программаторов, из которых у меня готово 2 из 3, и потом планирую забабахать сравнение всех, что у меня есть. Начну сегодня с самого последнего, который я собрал буквально на днях и дожидался разрешения автора на размещение. И да, кстати, про паяльную станцию (если кто-то её еще до сих пор ждет) я не забыл, просто с деталями выходит уже несколько месяцев косяк за косяком. Ну да ладно, об этом я расскажу уже в посте о ней, если все наконец-то сложится.

Вернемся теперь к нашим баранам — программатору STK500. Обычный человек, мало знакомый с микроконтроллерами (дальше буду писать для сокращения м/к), может спросить — а на кой ляд мне ентот ваш высоковольтный программатор сдался? Я вообще своим USBasp программирую и в ус не дую! Все так, читатель, да не так. Приведу небольшую выдержку из документа, великолепно написанного некоим _abk_ c форума radiokot, очень доступно объясняющего, почему такая вещь в хозяйстве всегда пригодится (далее — прямая цитата из документа, который я для интересующихся приложу в архив со всем нужным для сборки, немного длинно, но стоит прочтения):

Что такое В«параллельныйВ» программатор, и зачем он нужен.

Следует напомнить, что в целом МК AVR поддерживают 3 режима программирования:

1. режим последовательного программирования по интерфейсу SPI (LVSP) – всем известный и применяемый в подавляющем количестве случаев, и позволяющий программировать впаянный чип прямо в плате (in system, ISP). Режим поддерживают, пожалуй, все существующие программаторы, начиная от В«пяти проводковВ» до фирменного AVR ISP и самых В«навороченныхВ».

2. режим последовательного программирования при высоком напряжении (HVSP);

3. режим параллельного программирования при высоком напряжении, в котором (режиме) данные записываются и читаются побайтно по параллельной шине (HVPP).

Переключение МК во второй и третий режимы требует подачи управляющего В«высокогоВ» (+12В) напряжения на вывод Reset МК. Понятно, что в этих режимах программирование МК, уже впаянных в плату, требует принятия дополнительных мер для непопадания напряжения +12В в цепи на плате, присоединенные к выводу сброса. В случае параллельного режима понадобилось бы предусмотреть также подключение относительно большого числа выводов.

Какие режимы поддерживает конкретный МК, можно узнать из даташитов на них. Понятно, например, что МК с небольшим числом выводов (большинство AVR Tiny) не позволяют реализовать режим параллельного программирования.

Когда же нельзя обойтись самым простым и удобным режимом последовательного программирования по интерфейсу SPI ?

Вообще говоря, таких случаев – два.

Первый: модель МК не поддерживает режим. Например, Tiny11 программируется только в режиме 2, а Tiny28 допускает исключительно параллельное программирование (режим 3).

Нас больше интересует случай

Второй, когда в результате ошибочного или умышленного конфигурирования контроллера при установке фьюзов отключается SPI или вывод Reset конфигурируется как вывод порта. После этого последовательное программирование по SPI становится невозможным и микроконтроллер В«умираетВ». Теперь что-то изменить можно только в режимах 2 или 3 в зависимости от модели МК.

Теперь вернемся к самому программатору 🙂

Если вкратце, то таким программатором можно оживлять некоторые м/к, которые неправильно запрограммированы, и при этом еще и обычный режим он поддерживает на ура. Вот тут, если честно, я не уверен, может ли он починить все неправильно выставленные фьюзы или только те, что указаны в статье, но мои два с отключенным ISP он поднял, так что оставлю этот вопрос более знающим людям.

Тут — принципиальная схема доработанного программатора HVProg от Sema с форума radiokot. Вот именно ее, немного доработанную и измененную MakSVs’ом оттуда же, я и буду собирать. Некоторые доработки по сравнению с оригинальной схемой:

1. Добавлен 10-пиновый ISP разъем для большего удобства и совместимости с обычными качельками, например, или какой-нибудь ардуиной.

2. Добавлена внешняя EEPROM для FT232BL. В целом, ее можно было бы и убрать из схемы, так как она только запоминает различные настройки фт-шки, но стоит она и обвязка на нее копейки, а перелопачивать аккуратно разведенную и готовую схему не хотелось — проще было купить 10 штук за 78 рублей 🙂

3. Добавлен внешний разъем питания для 5V линии ISP 10 pin. В том варианте, что был представлен на печатной плате, это показалось мне спорным добавлением (особенно на фоне некоторых допилов, которые мне все-таки пришлось провести), но после общения с автором я понял, что сакральный смысл в этом все-таки есть — при большом потреблении тока есть возможность включить питание по внешней линии и спокойно прошивать что-то ресурсоемкое внутрисхемно.

Таким вот переходником и качелькой я пользовался для прошивки сердца этого программатора — ATMEga8535 в корпусе TQFP44. Гуглится переходничок легко, но я все равно добавлю его в архив в конце для тех, кому лень искать/неохота разбираться в засвеченных на фото надписях. Лукавый красный проводок — это одна перебитая моей тяжелой рукой дорожка, вместо которой я напаял прямо к ноге контроллера это чудо 🙂

Теперь к самой печатной плате! Сейчас я покажу вам, как нарисовать сову что получилось в результате и что мне пришлось допилить.

На фото видно несколько моих колхозов из-за отсутствия некоторых деталей — вместо катушки на 200 мкФ я поставил на 220 мкФ, да еще и смд, припаяв откушенные ножки от светодиодов. Bc857 у меня тоже не оказалось — заменил его на bc557, те же яйца, только в профиль в другом корпусе, ну и вот это махонькое чудо сразу после мини-юсб — это опять же смдшный предохранитель на 0.5А с ножками от тех же самых побитых жизнью светодиодов. Для межслойных переходов я использовал ножки от всего подряд, припаивая ее с одной стороны и придерживая снизу пинцетом, потом переворачивая и запаивая сверху, таких перемычек вышло около 20.

Посмотрим теперь на другую сторону, там тоже есть интересности:

Здоровый красный провод — это решение сразу двух проблем здесь — отсутствие внешнего разъема питания (я банально не узнаю, какой это разъем). А вторая проблема, которую я упоминал ранее, это то, что в данной схеме отсутствует выбор питания извне/с самой схемы. Эту проблему уже на готовой плате я решил такой вот перемычкой, в архиве же, который я упоминаю уже в третий раз, я приложил свой вариант схемы, который я сам пока еще не проверял (не хватает несколько деталей, а с рабочего программатора я доставать не хочу), в котором я решил это проблему, добавив 3 штырька, один межслойный переход и один джампер.

Покажу вам теперь доказательства работы данного чуда:

Шьет он довольно быстро, программа на кое-что, что я постараюсь либо до сессии, либо сразу после нее показать (для самых внимательных любителей читать кучу текста!) зашилась примерно секунды за 3, считая секунду, пока он тупил. Восстанавливал битый чип он чуть дольше, секунд 10, но все равно это не лпт-порты, где можно спокойно сидеть по минуте и в конце получить ошибку. Как настроить и подключить — будет написано в файле. Я лично со всеми программаторами работаю из-под виртуальной машины, что упрощает установку драйверов и работу со старыми программами — из-под моей основной 10 винды столько геморроя, что даже не стоит пробовать. Под семеркой я устанавливать не пробовал, но думаю, что после отключения проверки драйвера должно заработать. По поводу виртуальной машины стоит почитать отдельно, процесс настойки/установки ее очень прост, а этот пост и так выходит слишком длинным.

Решил показать последнюю картинку программатора поближе, но до перемычки, чтобы последний абзац не загромождал страничку 🙂 Вот ссылка на множество уже раз упомянутый архив — https://yadi.sk/d/1LcSzgli3J2DVr. Там вы сможете найти все нужное для сборки — драйвера, мануал по HVProg, который я цитировал в начале поста, переходник для прошивки в макетке/качельке, .hex или .ebn файл для прошивки программатора, картинки с нужными фьюзами для некоторых программ (если у вас другая, ориентируйтесь по spien) и даже набросанный мною список нужных вам для сборки деталей 🙂

Чуть подробнее по поводу .ebn и .hex.

Дело в том, что файлы формата .ebn может зашивать только AVR Studio и, соотвественно, совместимые с ним программаторы. Но чтобы собрать такой программатор нужно его сначала запрограммировать. Перед пользователем встает проблема курицы и яйца, и из нее есть несколько выходов:

1. Купить самый простой программатор (USBasp, цена около 60 рублей, я брал за 90 со шнурком сразу), который не работает с AVR Studio, прошить файл .hex и получить программатор, умеющий прошивать .ebn. В таком раскладе нужно быть очень аккуратным с фьюзами, потому что если они будут неправильно прошиты, то м/к, скорее всего, не заработает или заработает неправильно

2. Собрать/купить программатор, работающий с AVR Studio. С покупкой все понятно — берешь то, на что хватает денег, а вот со сборкой опять же проблемы — м/к для такого программатора опять же чем-то нужно прошивать. Тут опять приходит на помощь USBasp, как самый дешевый и распространенный программатор, но вариантов множество — начиная от простейшего программатора Громова и заканчивая всякими AVR2353467574 отладочными платами с кучей свистоперделок.

Пару заключительных слов: высоковольтный программатор, возможно, и не самая простая вещь для первоначальной сборки, но крайне полезная. Цена всех деталей для одного программатора по отдельности равняется, наверное, не более 500 рублей, другое дело, что все детали продаются пачками, а не по одной 🙂 Если никаких особых изысков в прошивании не требуется, возможно, стоит обратить внимание на более простой программатор, например AVR910 в usb варианте. Как раз про него я и попробую рассказать в следующий раз, надеюсь, что не через четыре месяца 🙂 Всем удачи в сборке и успехов!

P.S. Надеюсь увидеть у кого-нибудь собранную мою версию печатки программатора до того, как до нее доберусь я 🙂

42 22.11.11   Datagor   82 314   27   1320958154_avr910-009.jpgСегодня ночью я не лег спать. Включил фоном какую-то киношку с Джеки Чаном и быстренько спаял второй USB-программатор AVR-ок из датагорского кита Project-5 D-AVR910.Теперь у меня на столе лежит два одинаковых программатора. А всё для того, чтобы попробовать новую прошивку. Эти близняшки буду шить друг друга. Все опыты проводятся под MS Windows XP SP3.Цель — увеличение скорости работы и расширение совместимости программатора.

Содержание / Contents

↑ Альтернативные прошивки

Михаил (dust112) оставил интересную ссылочку в теме техподдержки нашего кита. Проследовав по ней я нашел тему об альтернативных прошивках для AVR910, над созданием которых потрудился уважаемый Inc. Ему удалось без потерь портировать на AVR910 программу от другого известного проекта AVR-Doper.С новой прошивкой при подключении программатора появляется COM-порт, перемычка ‘low sck’ так же работает для понижения частоты, красный светодиод мигает при записи/стирании чипа, зеленый горит при «подключении к девайсу», на выходе «LED» генерируется 1 МГц.Я исследовал все страницы, накачал прошивок и решил обязательно пробовать. Ведь всем хорош AVR910 — начинающим самое оно, однако огорчала невысокая скорость его работы с современным софтом. Все рекорды «черепашести» бил популярный пакет CodeVisionAVR: он не умеет шить в т. н. блочном режиме, что приводит к резкому замедлению работы.Так вот! Уважаемый Inc, автор новых прошивок, обещал прирост производительности.Далее опишу, что у меня получилось.

↑ Брюки превращаются…

Зашил я программатор новым хексом с фьюзами, как в оригинале (установлены в «0» биты SPIEN, CKOPT, SUT0 и BODEN), подключил его в порт USB, программатор нашелся в системе и захотел поставить драйвера от Протосса. Я это безобразие отменил и установил новый драйвер, указав на inf из нового комплекта (см. Файлы внизу).1320982629_image004.pngПосле этого в системе появился новый Communications Port, севший на COM4. Номер COM важно знать, что бы указать его далее в программах — прошивальщиках.Далее, открываем CodeVisionAVR и настраиваем соединение с нашим обновленным программатором:Settings > Programmer1320983070_image001.pngВы поняли в чем фикус-пикус? Легким движением руки брюки превращаются… и силой мысли уважаемого Inc мы превратили наш USB-шный AVR910 в STK500. Именно так он отныне будет определяться софтом. Не дурно, правда?

↑ О скорости в CodeVisionAVR

Да, ребяты… Я получил такой ошеломительный прирост скорости, что прежнее значение даже скоростью стыдно называть!Для чистоты эксперимента шьём одинаковый чип Atmega8-16, одинаковым хексом 13,3 КБ (13 647 байт), в одной и тойже софтине с одинаковыми настройками: проверяем сигнатуру чипа (Check Signature), проверяем Flash на чистоту-пустоту (Check Erasure), пишем Flash, пришем EEPROM, все делаем с проверкой (Verify) — т.е. максимально загружаем программатор работой и «тянем время».Программатор с оригинальной прошивкой AVR910 проделывает весь комплекс мероприятий за 11 минут. Т.е. курим, потребляем и сливаем чай, время есть.Программатор с альтернативной прошивкой STK500 проделывает всё это за 30 секунд. М-да, не почаевничаешь! crazy.pngAVR910 конечно спасает программа AVRprog от ATMEL, с ней он тоже шьёт быстро, но сама прога давно не обновляется и многие новые чипы AVRprog не знает.

↑ Работа под AVR Studio 5.0

1320986437_image011.pngСмотрите картинку. Да, да! Перешитый программатор может работать с AVR Studio 5.0. На предложение обновить Firmware следует отказаться. Всё-таки у нас не настоящий STK500.Проверить работу на железе было уже некогда и не начем. Но в Сети народ пишет, что всё ОК.

↑ Выводы

Итого: скорость и совместимость выше, да еще и светодиоды стали работать «по человечески», более четко и ярко. В оригинальной прошивке Протосс сделал попытку яркостью отражать скорость работы, но на деле это оказалась не такая уж хорошая идея. Кто пользовался — понимает.По моему скромному мнению, нужно перешиваться!!! Любым способом, хоть пятью проводками, если нет другого программатора. Оно того стоит.Возможно, за такую хитрость придется чем-то заплатить. Может, имеются некие скрытые проблемы, которые проявятся при попытке работать с другими микроконтроллерами или другим софтом. Но для любительского уровня — хорошо!Кто пожелает пройти моими тропами и получит новые данные по совместимости с чипами — милости прошу в комменты.Использованные мной файлы см. в архивах.

↑ Файлы

Прошивка. Это порт c AVR-Doper для AVR910 от Inc. Стандартная CDC (эмуляция COM-порта), без отладочного интерфейса.avr910-cdc-no_debug.7z 🕗 11/11/11 ⚖️ 4,62 Kb ⇣ 5671504525487_me-100-4.jpgЗдравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.Уже более 10 лет наш журнал существует только на мои средства. Хорош! Халява кончилась. Хочешь файлы и полезные статьи — помоги мне!Пожертвовать на журнал Датагор и др. способы получения доступа. — Спасибо за внимание! Игорь Котов, учредитель журнала «Датагор» Драйвер у меня есть только под Винду Windows 2000/XP/Vista.win-driver.7z 🕗 11/11/11 ⚖️ 931 b ⇣ 5191504525487_me-100-4.jpgЗдравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.Уже более 10 лет наш журнал существует только на мои средства. Хорош! Халява кончилась. Хочешь файлы и полезные статьи — помоги мне!Пожертвовать на журнал Датагор и др. способы получения доступа. — Спасибо за внимание! Игорь Котов, учредитель журнала «Датагор» Вариант драйверов от Osamu Tamura, Recursion Co под Windows 2000/XP/Vista/7 (прислал dimamukhin 11.23.2011)avrcdc_inf.zip 🕗 23/11/11 ⚖️ 39,51 Kb ⇣ 5551504525487_me-100-4.jpgЗдравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.Уже более 10 лет наш журнал существует только на мои средства. Хорош! Халява кончилась. Хочешь файлы и полезные статьи — помоги мне!Пожертвовать на журнал Датагор и др. способы получения доступа. — Спасибо за внимание! Игорь Котов, учредитель журнала «Датагор» Выражаю благодарность Prottoss, HSL, Inc, dust112. Спасибо вам, друзья!Всем здоровья и счастья!

Камрад, смотри полезняхи!

foto_1.jpgИгорь Котов (Datagor)Россия, Сибирь, г.НовокузнецкСписок всех статейПрофиль Datagor

Читательское голосование

like.png

Статью одобрили 49 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.

Поделись с друзьями!

Связанные материалы

1449519960_01.jpgWindows 10 и программаторы на базе AVR910 Prottos… Я он-лайн геймер, поэтому недавно пришлось на моём компьютере обновить ОС с MS Windows 8.1 до MS… 1226936867_atmel_logo.jpgПрограмматор для ATMEL AVR-910 по USB… Представлю Вам мой вариант печатной платы для сборки такого программатора. Детали, кроме самого МК,… Итоги народного голосования по статьям июля 2011… 1 место — гражданин swap, 404 поинта от 84 проголосовавших. Статья «Промдизайн на службе… Итоги голосования по статьям июня 2011… Подведены итоги конкурса читательских симпатий за июнь 2011г. От имени сограждан-датагорцев хочу… Программатор PIC-микроконтроллеров PICkit-2 Сlone… Как я уже упомянул в предыдущей статье «Сделай сам универсальный блок управления для дневных… Миниатюрный полный USB-RS232 адаптер на CP-2102 для подключения микроконтроллера к компьютеру по USB… В продолжение к теме «Программатор AVR910», про маленькое устройство, хочу предоставить вашему… Программирование микроконтроллеров ATmega… Хеллоу ВСЕМ!!! Итак, как я и обещал, расскажу как залить программу в МК. Для этого нам понадобится… Грызем микроконтроллеры. Урок заключительный. Прошивка…. Ну вот, писать программы для микроконтроллеров мы научились. Работоспособность прошивки тоже… Стабилизатор напряжения сети 1,8 кВт на PIC12F675… В последнее время мощности бытовых нагрузок возросли: появились фены, обогреватели, утюги, СВЧ печи… Награды выдающимся датагорцам 2010!… Уважаемые награжденные! Все призы, не востребованные в течении января 2011г, будут отозваны и… Пробник электромонтера и автоэлектрика… Предлагаю вашему вниманию небольшой пробничек, который можно собрать за пол часа. Он позволяет… Программатор для микросхем памяти AT24C02 — AT24C512. Считываем и записываем данные!… Как-то при ремонте откатных ворот итальянской фирмы LIFE понадобилось сделать копию микросхемы…

Общаемся по статье 💬

Программатор AVR910: перезагрузка! Ускорение работы + «превращение» в STK500

Комментарии, вопросы, ответы, дополнения, отзывы

Используемые источники:

  • https://protocoder.ru/hardware/atmel/stk500isp
  • https://pikabu.ru/story/stk500__vyisokovoltnyiy_programmator_dlya_mk_atmel_vozvrashcheniy_post__5040826
  • https://datagor.ru/microcontrollers/1837-project-5-d-avr910-perezagruzka-10h-uskorenie-raboty-prevraschenie-v-stk500.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации