======Программирование контроллеров с помощью J-FLASH Lite======
Эта статья написана на основе темы "J-FLASH для 1986ВЕхх" ([[http://forum.milandr.ru/viewtopic.php?f=22&t=3609&p=19741&hilit=%D1%83%D0%B4%D0%BE%D1%87%D0%BA%D0%B0#p19741|J-FLASH для 1986ВЕхх]]) (автор реализации R MAX)
Варианты прошивки МК с использованием других утилит приведены здесь: [[http://forum.milandr.ru/viewtopic.php?f=33&t=3856#p22074|Программа для прошивки через JTAG/SWD для 1986ВЕ91Т]]
**Проверялось на микроконтроллере 1986ВЕ91Т.**
Часто возникает вопрос, как прошить микроконтроллер, не пользуясь средой KEIL. Компания SEGGER разработала утилиту J-FLASH, которая предоставляет собой программное обеспечение, работающее с Windows 2000 и старше, позволяющее программировать внутреннюю и внешнюю память контроллера, используя J-Link или Flasher.
J-Flash поставляется с примерами проектов для наиболее популярных микроконтроллеров и отладочных плат, J-Flash управляется через графический пользовательский интерфейс либо из командной строки.
Для работы с полной версией J-Flash необходимо покупать лицензию или программатор, при покупке которого лицензия идет в комплекте.
J-Flash Lite можно скачать с сайта Segger. Программа входит в пакет J-link Software and Documentation Pack for Windows.
1. Скачать программу J-FLASH: [[https://www.segger.com/downloads/jlink#J-LinkSoftwareAndDocumentationPack|J-Flash download]]
Работа проверялась на версии 6.20i (на более новых версиях микроконтроллеры компании "Миландр" не определялись программой).
upd. Так же проверена работа на последней версии 6.34h от 2018-10-09. Микроконтроллеры успешно определяются программой
2. Установить программу. У меня она установилась по адресу: C:\Program Files (x86)\SEGGER\JLink_V620i
3. В папке "Devices" создать папку "Milandr", в которую положить FLM-файлы тех контроллеров, с которыми программа будет работать.
//Стандартные FLM-файлы можно найти в паке для Keil по пути C:\Keil_v5\ARM\PACK\Keil\MDR1986BExx\1.5\Flash//
4. В папке JLink_Vxxxx найти файл JLinkDevices.xml.
5. Открыть его блокнотом и добавить в конце перед :
Отличие от кода, представленного на форуме, состоит в том, что в раздел добавлен параметр, который, согласно описанию на JLink, является опциональным: "AlwaysPresent".
AlwaysPresent определяет, всегда ли присутствует флэш-банк (например, внутренняя флэш). Если этот элемент установлен в "1", то команда "erase" будет работать как команда "erase" и сотрет этот банк. \\
AlwaysPresent=“1”.
6. Для того, чтобы операции стирания для микроконтроллеров были возможны, необходимо, чтобы FLM-файл поддерживал операцию стирания по секторам. Для 1986ВЕ3Т такой возможности, например, нет. Для микроконтроллеров 1986ВЕ1Т и 1986ВЕ9X модифицированные FLM-файлы находятся на [[https://github.com/StartMilandr/FLM/tree/master/FLM_IntMem|Github]]
**Обратите внимание, что работоспособность после процесса добавления микроконтроллера распространяется не только на утилиту J-Flash Lite. После добавления можно работать, например, и в утилите Jlink.exe, проверяя работоспособность программатора **.
----
Подготовка программы.
1. Программа для программирования микроконтроллера может быть написана в любой среде, например, KEIL или IAR, но затем должны быть получена файлы с расширением hex или bin, которые и будут загружены в память микроконтроллера.\\
Чтобы получить hex в среде Keil, нужно в опциях проекта Options for Target 'xxx' поставить галочку во вкладке 'Output' напротив пункта "Create HEX File". Файл будет лежать в папке Objects\\
Как получить bin рассказано здесь:
[[https://startmilandr.ru/doku.php/prog:uart:run_ram_uart#%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_bin_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0|Получение bin-файла]]
----
Запуск программы
1. Запустить J-Fash Lite. Появится окно с предупреждением, что J-Flash Lite является средством для разработки и не предназначен для производства. Нажать "ОК"
{{:prog:jflash:warning_win.png}}
2. В окне выбрать микроконтроллер. Нажать "ОК".
{{:prog:jflash:win1.png?nolink|}}
{{:prog:jflash:win2.png?nolink|}}
{{:prog:jflash:win3.png?nolink|}}
3. Если в микроконтроллер уже была записана программа, например, в моем случае это была "HelloWorld", другими средствами (например, KEIL), то можно нажать Erase Chip.
{{:prog:jflash:select_erase.png?nolink|}}
Произойдет стирание flash-памяти кристалла.
{{:prog:jflash:erase_process.png?nolink|}}
Стирание выполнено. Диод не мигает:
{{:prog:jflash:erase_done.png?nolink|}}
4. **Запись bin-файла.**
{{:prog:jflash:select_bin1.png?nolink|}}
Необходимо указать адрес EEPROM PROGRAM 512K 0x08000000
{{:prog:jflash:program_bin.png?nolink|}}
5. **Запись hex-файла**
Адрес указывать не нужно. Этот "пункт" не активен.
{{:prog:jflash:program_hex.png?nolink|}}
**Примечания:**
1. Для 1986ВЕ1Т операция "Erase chip" не выполнилась, а "Program Chip" происходит только при двукратном последовательном вызове операции: hex и bin (указать адрес: 0x00000000). Если использовать FLM 1986BE1T_ES.FLM, то выполняется и запись и стирание\\
2. Для 1986ВЕ4У стирание через J-Flash не выполняется, только через KEIL. Для программирования требуется выполнить "Program Chip" два раза.\\
3. 1986ВЕ92 - стирает память, хотя иногда пишет, что "erase failed"