Содержание
MicroTechnics
Решил я написать статью про подключение отладочной платы STM32VLDiscovery (еще одна статья учебного курса по STM32 – весь он тут). Казалось бы это вообще элементарно, воткнул провод и вперед, но на деле можно наступить на огромное количество граблей. Поэтому нельзя оставлять этот вопрос неосвещенным.
Программирование STM32VLDiscovery через Keil.
Подключаем нашу платку к USB, и ждем пока она определится как внешний носитель. Если Windows не увидел вашу плату (как было у меня), то советую проверить в первую очередь кабель и разъем для него на плате. У меня, например, отошел контакт на Discovery и я очень долго пытался понять, почему же плата не работает ?
Но чаще всего подключение проходит без проблем, так что двигаемся дальше. Идем в папку с Keil’ом и находим драйвер для USB. Он лежит вот тут:
- ARMSTLinkUSBDriver (это в папке, куда установлен Keil)
ЗапускаемST-Link_V2_USBdriver.exe и устанавливаем его. Возвращаемся чуть назад – в папку C:KeilARMSTLink и видим там файл STLinkUSBDriver.dll размером около 65 кб. Его надо заменить на файл – STLinkUSBDriver.dll(подменять файл следует только в том случае, если ST-LINK завести не удается (!) ).
Первый этап позади!
Запускаем Keil и открываем там проект, который будем заливать в железку. Открываем меню Flash-Configure Flash Tools. Во вкладке Debug выбираем Use ST-Link Debugger и ставим галочку Run to main():
Теперь открываем вкладку Utilities и тоже выбираем ST-Link Debugger.
Думаете все? А вот нет, танцы с бубном только начинаются! Нажимаем кнопку Settings и в появившемся окне нужно добавить Programming algorithm для нашего девайса:
В этом же окне открываем вкладку Debug, находим поле Port и вместо JTAG ставим SW:
С настройкой закончили, но и это еще не все. Открываем файл stm32f10x.h и находим в районе 45-55 строк такой текст:
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) /* #define STM32F10X_LD */ /* STM32F10X_LD: STM32 Low density devices */ /* #define STM32F10X_LD_VL */ /* STM32F10X_LD_VL: STM32 Low density Value Line devices */ /* #define STM32F10X_MD */ /* STM32F10X_MD: STM32 Medium density devices */ /* #define STM32F10X_MD_VL */ /* STM32F10X_MD_VL: STM32 Medium density Value Line devices */ /* #define STM32F10X_HD */ /* STM32F10X_HD: STM32 High density devices */ #define STM32F10X_XL /* STM32F10X_XL: STM32 XL-density devices */ /* #define STM32F10X_CL */ /* STM32F10X_CL: STM32 Connectivity line devices */ #endif
Надо чтобы тут обязательно была раскомментирована строка #define STM32F10X_MD_VL и закомментированы все остальные, иначе программа зашьется, но не заведется.
Не забываем в настройках проекта попросить компилятор генерировать hex:
Собираем проект и нажимаем кнопку Load. В случае удачной прошивки видим строки:
Load "Здесь путь к файлу прошивки"Erase Done.Programming Done.Verify OK.
Если все-таки почему-то у вас не вышло прошить плату через Keil, то есть второй способ.
Программирование STM32VLDiscovery через STM32 ST-Link Utility.
Ну, здесь все намного проще, чем в Keil’e. Просто скачиваем утилиту, устанавливаем (скачать можно по этой ссылке – ST-Link Utility). Как и в первом случае заменяем файл STLinkUSBDriver.dll. Он лежит здесь:
- STMicroelectronicsSTM32 ST-LINK UtilityST-LINK Utility
Итак, мы рассмотрели два способа прошивки STM32VLDiscovery, выбирайте любой на свой вкус! ?
Поделиться!
© 2013-2021 MicroTechnics.ru
Паяем standalone-версию программатора ST-Link/v2-1
10 сентября 2018
Большое преимущество программатора ST-Link/v2-1 перед ST-Link/v2 заключается в том, что помимо самого программатора в v2-1 также есть встроенный USB-UART. На практике это очень удобно — меньше проводов, меньше занятых USB-портов. Как заливка прошивки, так и передача отладочного вывода происходят через одно устройство вместо двух. Есть только одна маленькая проблема. Если ST-Link/v2 можно без проблем купить на eBay, то ST-Link/v2-1 бывает только встроенным в отладочные платы семейств Discovery и Nucleo. Однако, как выяснилось, плату Nucleo довольно легко разделить на два отдельных устройства — программатор ST-Link/v2-1 и отладочную плату.
Свои безумные эксперименты я проводил над отладочной платой Nucleo-F411RE. Напомню, как она выглядит:
На приведенной фотографии верхняя часть платы содержит программатор, а нижняя — непосредственно отладочную плату. Разработчики заботливо заложили в плату возможность отделения программатора, чем мы и воспользуемся. В процессе нам пригодится схема платы, которая доступна на сайте STMicroelectronics.
Окончательный вид устройства у меня получился таким:
Программатор был отделен от платы при помощи Dremel’я. К нижней части устройства был припаян кусок макетки с штекером USB type A. Соответственно, ставший ненужным разъем MiniUSB был выпаян. На фото в левой верхней части программатора можно заметить чип в корпусе SO-8. Это МОП-транзистор с P-каналом STS7PF30L (даташит [PDF]). Благодаря схеме платы мы знаем, что он больше не понадобится, так что его при желании тоже можно выпаять. Питание, SWD и UART были выведены при помощи тонких проводов на разъем IDC-12. Чтобы провода не болтались, я закрепил их термоклеем. Разъем был сделан совместимым с разъемом IDC-10 в ST-Link/v2 с поправкой на добавленные пины TX и RX. На фото рядом с программатором лежит переходник из IDC-12 в IDC-10. Он просто отрезает UART, тем самым превращая программатор в ST-Link/v2.
Что же касается оставшейся части платы, то на ней предусмотрены пины для внешнего питания и выведены SWDIO и SWCLK (PA13 и PA14 соответственно). Так что, после операции она все еще программируется. Правда, плата разведена таким образом, что после отрезания программатора ломается UART (пины PA2 и PA3), поэтому его придется подпаять. Для удобства я решил вывести все необходимые для программирования и отладки пины на разъем IDC-12. Вот что получилось в итоге:
Нижнюю часть платы вам лучше не видеть 🙂 Таким образом, программатор можно соединить с отладочной платой соответствующим шлейфом, после чего все работает, как раньше. Только программатор теперь можно использовать и с другими платами. В частности, в будущих ревизиях своей LimeSTM32 я собираюсь заменить разъем IDC-10 на IDC-12, выведя на него и UART.
В этом контексте я хотел бы порекомендовать серию статей «Reverse-engineering ST-Link firmware» в блоге lujji.github.io (часть 1, часть 2). Статьи рассказывают о том, как сдампить прошивку ST-Link/v2-1 в обход защиты от чтения, которая есть во всех программаторах. Для клонирования программатора понадобится микроконтроллер STM32F103CBT6 со 128 Кб flash-памяти (не STM32F103C8T6 с 64 КБ памяти). Такого микроконтроллера у меня не было, да и серийное производство я не планирую, поэтому мне было проще получить отдельный ST-Link/v2-1, просто отрезав его от платы Nucleo. Но вам, возможно, больше придется по душе вариант с созданием клона.
Следует однако иметь в виду, что автор не выложил готового дампа прошивки, а значит вам понадобится плата Nucleo или Discovery, и некоторое количество времени на получение дампа. Если вас интересует готовый дамп, то в открытом доступе на момент написания этих строк, похоже, есть только дамп ST-Link/v2. Например, в статье How to program blank STM32F1 with STLINK V2 firmware на сайте e.pavlin.si вы найдете как дамп, так и готовую плату для создания клона ST-Link/v2.
Дополнение: Дамп ST-Link/v2-1 появился в публичном доступе. Подробности ищите в статье Делаем ST-Link V2.1 из китайского ST-Link V2 за авторством User420.
Вот и все, о чем я хотел рассказать. Как всегда, вопросы, дополнения, а также истории о том, как вы клонировали ST-Link/v2 или v2-1, всячески приветствуются!
Дополнение: Вас также может заинтересовать пост Программируем/отлаживаем микроконтроллеры STM32 при помощи OpenOCD и FT2232HL.
Метки: STM32, Электроника.
Поддержи автора, чтобы в блоге было больше полезных статей!
Также подпишись на RSS, ВКонтакте, Twitter или Telegram.
–>
В этой статье объясняется, как запрограммировать ваше приложение на плату с помощью утилиты ST-Link. Этот метод необходим, если вы компилируете с использованием ARM GCC, но рекомендуется для проектов IAR или Keil.
STMicroelectronics предоставляет утилиту на базе Windows, утилиту
ST-Link
, для прошивки внутренней и внешней флэш-памяти плат на основе STM32. Этот раздел относится к следующим платам ST, поддерживаемым TouchGFX:
STM32F429I-DISCO
STM324x9I-EVAL
STM32469I-DISCO
STM32469I-EVAL
STM32F746G-DISCO
STM32756G-EVAL
STM32F769I-EVAL
STM32F769-DISCO
ST-Link Utility также может быть использован для программирования пользовательского оборудования с использованием , например ST-Link / V2
программиста
.
ST-Link Utility может программировать файлы .hex и .bin. Они автоматически генерируются Make-файлами ARM gcc, поставляемыми с проектом TouchGFX. IAR и Keil IDE настроены для преобразования выходных файлов .elf в файл .hex.
- Для проектов IAR
дополнительный вывод преобразуется (
intel extended
форматируется) в
DebugExeapplication.hex
- Для проектов Keil
выполняется следующий шаг после сборки: в
fromelf --only=ExtFlashSection --bin --output=binary .Objectskeil5-2.axf
результате получается файл .hex:
Objectskeil5-2.hex
Процесс, описанный в этой статье, описывает, как использовать утилиту ST-Link для программирования внутренней и внешней флэш-памяти плат ST. Для внутренней вспышки ST-Link автоматически определит тип подключенного устройства. Однако для внешней вспышки внешний флэш-загрузчик должен быть настроен вручную. ST-Link предлагает поддержку для каждого флэш-чипа на платах, поддерживаемых TouchGFX.
При прошивке двоичного файла с помощью утилиты ST-Link вы должны указать правильный флэш-адрес вручную. Этот адрес должен совпадать с адресом, используемым в скрипте компоновщика. По умолчанию это первый адрес во флэш-памяти. При перепрошивке файла .hex утилита ST-Link найдет правильный адрес в файле .hex.
ST-Link автоматически определит диапазоны памяти для программирования и выберет подходящие флэш-загрузчики для использования, если так настроено, при открытии .hex-файла. В приведенном ниже примере
target.hex
приложение было открыто в ST-Link, и были обнаружены диапазоны как внутренней, так и внешней флэш-памяти.
Как упоминалось ранее, внутренняя флэш-память всегда распознается ST-Link для микроконтроллеров STM32, но флэш-загрузчик для диапазонов, начинающихся с 0x90000000, должен быть настроен вручную. В приведенном ниже примере мы настроим внешнюю вспышку для
STM32F746G-DISCO
платы:
-
Выберите «
Добавить внешний загрузчик
» в меню «
Внешний загрузчик
».
-
Выберите соответствующий флэш-загрузчик в списке поддерживаемых плат (т.е.
MT25QL512A_STM32756G-EVAL
для
STM32756G-EVAL
и
N25Q128A_STM32F746G-DISCO
для
STM32F746G-DISCO
) и выберите
Подтвердить
.
-
Откройте .hex, который вы хотите мигать: диапазоны адресов автоматически определяются ST-Link. Как упоминалось ранее, разные двоичные файлы создаются IAR, Keil и gcc соответственно и могут использоваться ST-Link.
-
Выберите «
Program
» в меню «
Target
» и начните загрузку.
Ниже приведен полный список внешних флэш-загрузчиков, которые будут использоваться для плат ST, поддерживаемых TouchGFX (ST-Link версия 4.2):
доска |
Флеш загрузчик |
---|---|
STM32F429I-DISCO |
Только внутренняя вспышка |
STM324x9I-EVAL |
M29W128GL_STM324x9I-EVAL |
STM32469I-DISCO |
N25Q128A_STM32469I-DISCO |
STM32469I-EVAL |
MT25QL512A_STM32469I-EVAL |
STM32F746G-DISCO |
N25Q128A_STM32F746G-DISCO |
STM32756G-EVAL |
MT25QL512A_STM32756G-EVAL |
STM32F769I-EVAL |
MT25QL512A_STM32769I-EVAL |
STM32F769I-DISCO |
MX25L512G_STM32769I-DISCO |
STM32L4R9-EVAL |
MX25LM51245G_STM32L4R9I-EVAL |
STM32L4R9-DISCO |
MX25LM51245G_STM32L4R9I-DISCO |
Кроме того, вы можете создать и прошить приложение (используя ST-Link CLI) с помощью любой
makefile
(т.е.
app/example/button_example/target/ST/STM32F746G-DISCO/gcc/Makefile
), используя следующую команду:
Makefile знает, какую внешнюю флэш-память (см. Таблицу выше) использовать для каждой из поддерживаемых плат ST. ST-LINK имеет встроенную поддержку внутренней вспышки для каждой платы, и вы можете прошить
только
внутреннюю вспышку, используя следующую команду:
В некоторых случаях вы не
сможете
запрограммировать свою доску указанным выше способом из-за следующей ошибки:
В этом случае вы можете попытаться отключить драйвер устройства USB для этой конкретной платы в диспетчере устройств Windows, чтобы устранить проблему.
- Цена: 9,5$
Сегодня хочу поделиться с общественностью пожалуй самым популярным применением сего программатора — прошивкой принтера Samsung ML-2160. В определенных кругах известно как «унижение принтера ml-2160». Тема старая, но все равно много кто и сейчас «напарывается на грабли» при прошивке сего устройства. Кому интересно — прошу под кат. Осторожно — много фото! Хочу начать с того, что в свободное от работы время я для развлечения и тренировки мозга и рук чиню всякую микропроцессорную электронику. Однажды пришел ко мне знакомый с просьбой «почини принтер». Был это популярный тогда Samsung ML-2160. И выглядел как недавний подопытный: Хитрый самсунг хотел денег за родные картриджи, ну а людей exUSSR ставит в ступор цена оригинального картриджа — мы ведь лазерный принтер купили чтобы было дешево 😉 Первые версии принтера можно было откатить на старую прошивку без особых проблем, но в следующих прошивках такую возможность убрали. В общем вечер гугла и мы заказываем программатор. Заодно рекомендую купить USB TTL-UART, чтобы видеть что нам отвечает принтер во время прошивки. Через пару недель к нам приезжает наш красавец: и внутри:
На этом месте все обычно подключают программатор, качают последнюю версию софта с офсайта, ставят, запускают, наблюдают радостное окно программы, которая нашла программатор: Но счастье их длится не долго: Говорят, некоторые после этого получают кирпич из программатора. Всех остальных просто задалбывает это окно. А всего лишь нужно было поставить софт v4.92 (setup_jlink_v492.zip). Сразу оговорюсь, что весь необходимый софт оставлю в конце обзора. Теперь включаем принтер. Кладем лист бумаги зажимаем и держим кнопку PrintScr на принтере примерно 10 секунд. Он радостно заморгает лампочкой и напечатает что-то подобное:Читаем строку Firmware version, видим версию ….02.00 и понимаем что не зря купили программатор. Теперь ставим драйвера. На случай если у вас их нет — SamsungUniversalPrintDriver22.exe. Windows 10 подхватывает сама. Если вы еще не распаковали мой архив — самое время. Копируем Boot.bin в c: (чтобы не бороться с проблемами с кодировками итд, хотите экспериментов — редактируйте download.jlink) Если поставили jlink не в каталог по умолчанию — редактируете путь в файле flashme.bat. Минимальный набор софта есть. Можно приступить к потрошению принтера 🙂 Отвертка PH2 — наше все! Отключаем принтер от сети и откручиваем один саморез:и видим плату: отстыковываем шлейфы и откручиваем 3 винта. Нам предстоит распаяться вот так: распиновка разЪема на программаторе: Тут следует обратить внимание что на кабеле распиновка зеркальная! 1 и 2 ногу программатора спаиваем вместе и в зависимости от положения джампера на плате подключаем к 3.3В принтера или нет. Если не хотите разбирать программатор, то померяйте напряжение на закороченном 1 и 2 контакте относительно земли: если там 3,3В есть, то паять к принтеру не надо. Основная проблема теперь в том, что придется поднимать вторую от угла ногу процессора! Не вторую, по счету, а вторую от угла. Проблема здесь в том, что по инету бродит фото, где написано 2 ногу, фото крупным планом, но процессор другой! Увлекшись фотографированием я сам опять наступил на эти грабли и поднял не ту ногу! Но времени переснимать, к сожалению, не было. Далее несколько фото того как поднимать ногу иголкой, но нога неправильная. Правильная нога на фото выше! Процедура такова: капаем припоем (а лучше сплавом Розе/Вуда) на 2 крайних ноги. Затем вставляем иголку, греем припой паяльником и поворачиваем немного против часовой стрелки: Лишний припой убираем оплеткой Теперь опускаем первую с края ногу и паяем провода ко всем контактным площадкам. В последнюю очередь паяемся ко второй с краю ноге процессора, предварительно зафиксировав скотчем/изолентой провод. В итоге получается вот такая экибана: Еще раз повторюсь, что по этой фото я заметил что не туда припаял провод к процессору. Паяем его правильно, припаиваем консоль (usb-uart) и подключаем шлейфы назад. Вот так должно получиться:ну и все вместе выглядит примерно так: Все, с пайкой на пока закончили. Подключаем принтер, консоль, программатор у компьютеру. Если консоль паяли, то ставим например Tera Term, выбираем нужный порт и скорость 115200. Все остальное по умолчанию. Не забываем подключиться к порту. Подключаем в сеть принтер. Нажимаем принтскрин на принтере и не отпускаем, нажимаем и отпускаем «сеть», ждем 3 секунды и отпускаем принтскрин. Принтер обычно перемагривается лампочками и загорается зеленая. Попутно в диспетчере задач видим устройства «нет подключенного принтера» и «поддержка usb принтера»: Тем временем в консоли бегут буковки: запускаем flashme.bat: тем временем в консоли (Если честно, я не уверен насчет правильности последующей фотки ибо есть подозрение что я ее мог перепутать делая скрин плохого кабеля 🙁 ): Этими действиями мы закинули загрузчик, и теперь нужно влить новую прошивку. Вливаем MA_2160_05.hd. Для этого перетягиеваем его на usbprns2.exe в проводнике или запускаем из командной строки «usbprns2.exe MA_2160_05.hd» я предпочитаю второй вариант: в консоли: Ну вот и все — принтер унижен! 🙂 Отключаем все от принтера, снимаем плату, распаиваем и собираем все назад. Не забываем заклеить скотчем чип на картридже или вовсе его выковырять. Напоследок хочу рассказать о проблемах при перепрошивке. 1. Вы припаяли что-то не так и не туда, тогда программа для прошивки не сможет подключиться к процессору, не отобразит регистры, выдаст кучу ошибок итд. Вы это увидите. 2. Случается так, что кабель принтера совсем Г, тогда вы получите вот такое в консоли: и это, собственно один из не многих случаев, когда нужна консоль. Сами понимаете — оно и тут не очевидно что кабель не очень, а без консоли вообще тоска. 3. Не делайте длинные провода от шлейфа программатора — поймаете помехи. 4. Иногда по какой-то причине принтеры с прошивкой V1.01.02.00 отказываются прошиваться. Лучше сразу обновите до V1.01.02.01 — запустите ML216x_V1.01.02.01.exe, там по ходу разберетесь. Кое какие фото не моей платы, а взяты с просторов инета — ибо не получились фото, а принтера уже не было… Вот вроде и все. Будем надеяться что мой опыт кому-то пригодится.Архив со всем необходимым тутИногда полезен программатор J-Link, не буду вникать в тонкости и его плюсыминусы, но если у Вас в наличии дешевый китайский ST-Link — то считайте, что у вас 2 версии программатора по необходимости! Интересно узнать, как это делать на китайских клонах? Читай дальше 😉
Внимание! Материал ниже представлен исключительно в ознакомительных целях, и если Вам необходим J-Link в коммерческих целях, то следует приобрести официальный программатор.
На просторах Ebay или AliExpress по ключевому слову «ST-Link v2» можно найти множество клонов. Практически все они собраны на STM32F103C8T6 , но, судя по всему, можно нарваться и на другой вариант с камнем STM32F101CBT6 как отписались в комментариях. Такой не подходит и лучше узнать у продавца, если хотите купить в закрытом корпусе или не уверены, что стоит на плате у продавца. (поправка! ВОТ ТУТ пишут, что прекрасно обновляются клоны и на этом камне, но USB в STM32F101CBT6 нет по документации, возможны багиглюки). У меня же в наличии вот такой (также собирал свой собственный — описанный способ прошивки на нем тоже работает):
Есть различные варианты, они будут идентичны этому. Примерная схема этого варианта:
Ну что, приступим! Для работы нам понадобится:
- сам программатор, естественно (официальный сайт и драйвера, если понадобится);
- драйвера для J-LINK — взять тут (J-Link Software and Documentation Pack);
- пакет с утилитой обновления — STLinkReflash_161007.zip (а тут официальный сайт).
Реклама
Изначально утилита от SEGGER не видит китайские клоны и поддерживает только официальные отладочные платы с этим программатором и сами официальные программаторы. Но на форуме esp8266.ru было найдено решение (спасибо pvvx!) — необходим небольшой патч оригинального STLinkReflash.exe и он будет без проблем обновлять и клоны! 🙂
Патч для STLinkReflash.exe (версия 161007) состоит из замены 3х байт. На всякий случай привожу его тут (адрес: оригинальное значение | новое значение):
- 00002568: 75 | 90
- 00002569: 66 | 90
- 000026AA: 74 | EB
В архиве выше есть как и оригинальный файл, так и патченный — STLinkReflashFixed.exe. Для обновления необходимо использовать его.
Подключаем наш ST-Link, убедитесь, что он корректно определился и на него установились драйвера. Запускаем STLinkReflashFixed.exe. Принимает соглашение от SEGGER:
Далее принимаем соглашение от STM:
И мы в главном меню:
- [0] Выход
- [1] Обновить до J-Link
- [2] Обновить прошивку J-Link
- [3] Восстановить ST-Link
Выбираем 1-й пункт и прошивка за считанные секунды должна пройти успешно:
Если необходимо восстановить обратно, то в меню выбираем 3-й пункт и спустя немного времени будет возвращена прошивка ST-Link:
Вот и всё! Удачного программирования! 😉
Примечание:Рекомендации по изменению байт в утилите и схема ST-Link взяты отсюда.
Реклама
На китайских свистках ST-Link реализованы 2 интерфейса — SWD и SWIM. Обычно нужен только первый, т.к. STM8 вещь довольно-таки в себе и проще уже применять STM32 (мало того, что возможностей больше, так и IDE выбор получше, имхо), поэтому интерфейс SWIM (для STM8) как-то и не нужен. Предлагается незначительная переделка платы, после которой SWIM_RST выход заменяется на TRST, что полезно иногда при залоченом STM32 (не нужно жать на кнопку сброса) или для RTL871x.
Переделка крайне проста и всё показывает одно фото (кликни для увеличения):
Тут отпаиваем R17, одной стороной (ламелькой) подпаиваем к правому паду (ведущему к гребенке, лучше прозвоните на своей плате при аналогичной переделке), а второй вывод (ламельку) одножильным проводом в лаке (можно взять с катушек или трансформаторов, 0,1-0,2мм диаметра) соединяем с выводом 18 (PB0). В гребенке штырь с SWIM_DATA можно выпаять — она уже без надобности, я дополнительно цапонлаком закрасил шелкографию на нижней стороне платы, что бы не путала.
Вот и вся переделка. 🙂 Осталось добавить немного термоусадки и карманный J-Link готов:
Реклама
UPDATE 2017.07.23:
Патч для STLinkReflash.exe (версия 170628) аналогичный и так же состоит из замены 3х байт. Архив для скачивания — STLinkReflash_170628.zip.
Для прошивки использовать STLinkReflashFixed.exe. Также в архиве сохранён оригинальный файл.
UPDATE 2018.08.13:
Патч для STLinkReflash_170807, присланный анонимным читателем (я не делал fixed версию и не проверял):
- 00002569: 75 | 90
- 0000256A: 70 | 90
- 000026B5: 74 | EB
UPDATE 2019.11.19:
Архив для скачивания STLinkReflashFixed.exe (версия 190812) — STLinkReflash_190812.zip.
ли со статьей или есть что добавить?