Инструменты пользователя

Инструменты сайта


prog:start:j-flash

Программирование контроллеров с помощью J-FLASH Lite

Эта статья написана на основе темы "J-FLASH для 1986ВЕхх" (J-FLASH для 1986ВЕхх) (автор реализации R MAX)

Варианты прошивки МК с использованием других утилит приведены здесь: Программа для прошивки через 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: 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. Открыть его блокнотом и добавить в конце перед </DataBase> :

   <Device>
      <ChipInfo Vendor="Milandr"
          Name="1986BE1T"
          WorkRAMAddr="0x20100000"
          WorkRAMSize="0x4000"
          Core="JLINK_CORE_CORTEX_M1" />
      <FlashBankInfo Name="1986BE1T Flash"
          BaseAddr="0x0"
          MaxSize="0x20000"
          Loader="Devices\Milandr\1986BE1_rev2.FLM"
          LoaderType="FLASH_ALGO_TYPE_OPEN"
	  AlwaysPresent="1"/>
    </Device>
    <Device>
      <ChipInfo Vendor="Milandr"
          Name="1986BE3T"
          WorkRAMAddr="0x20100000"
          WorkRAMSize="0x4000"
          Core="JLINK_CORE_CORTEX_M1" />
      <FlashBankInfo Name="1986BE3T Flash"
          BaseAddr="0x0"
          MaxSize="0x20000"
          Loader="Devices\Milandr\1986BE3T.FLM"
          LoaderType="FLASH_ALGO_TYPE_OPEN" 
	AlwaysPresent="1"/>
    </Device>
    <Device>
      <ChipInfo Vendor="Milandr"
          Name="1986BE4"
          WorkRAMAddr="0x20000000"
          WorkRAMSize="0x4000"
          Core="JLINK_CORE_CORTEX_M0" />
      <FlashBankInfo Name="1986BE4 Flash"
          BaseAddr="0x0"
          MaxSize="0x20000"
          Loader="Devices\Milandr\1986BE4.FLM"
          LoaderType="FLASH_ALGO_TYPE_OPEN"
	AlwaysPresent="1" />
    </Device>
    <Device>
        <ChipInfo Vendor="Milandr"
            Name="1986BE9X"
            WorkRAMAddr="0x20000000"
            WorkRAMSize="0x8000"
            Core="JLINK_CORE_CORTEX_M3" />
        <FlashBankInfo Name="1986BE9X Flash"
            BaseAddr="0x8000000"
            MaxSize="0x20000"
            Loader="Devices\Milandr\1986BE9x.FLM"
            LoaderType="FLASH_ALGO_TYPE_OPEN" 
            AlwaysPresent="1" />
    </Device>

Отличие от кода, представленного на форуме, состоит в том, что в раздел <FlashBankInfo> добавлен параметр, который, согласно описанию на JLink, является опциональным: "AlwaysPresent". AlwaysPresent определяет, всегда ли присутствует флэш-банк (например, внутренняя флэш). Если этот элемент установлен в "1", то команда "erase" будет работать как команда "erase" и сотрет этот банк.
AlwaysPresent=“1”.

6. Для того, чтобы операции стирания для микроконтроллеров были возможны, необходимо, чтобы FLM-файл поддерживал операцию стирания по секторам. Для 1986ВЕ3Т такой возможности, например, нет. Для микроконтроллеров 1986ВЕ1Т и 1986ВЕ9X модифицированные FLM-файлы находятся на Github

Обратите внимание, что работоспособность после процесса добавления микроконтроллера распространяется не только на утилиту J-Flash Lite. После добавления можно работать, например, и в утилите Jlink.exe, проверяя работоспособность программатора .

Подготовка программы.

1. Программа для программирования микроконтроллера может быть написана в любой среде, например, KEIL или IAR, но затем должны быть получена файлы с расширением hex или bin, которые и будут загружены в память микроконтроллера.
Чтобы получить hex в среде Keil, нужно в опциях проекта Options for Target 'xxx' поставить галочку во вкладке 'Output' напротив пункта "Create HEX File". Файл будет лежать в папке Objects
Как получить bin рассказано здесь: Получение bin-файла


Запуск программы

1. Запустить J-Fash Lite. Появится окно с предупреждением, что J-Flash Lite является средством для разработки и не предназначен для производства. Нажать "ОК"

2. В окне выбрать микроконтроллер. Нажать "ОК".

3. Если в микроконтроллер уже была записана программа, например, в моем случае это была "HelloWorld", другими средствами (например, KEIL), то можно нажать Erase Chip.

Произойдет стирание flash-памяти кристалла.

Стирание выполнено. Диод не мигает:

4. Запись bin-файла.

Необходимо указать адрес EEPROM PROGRAM 512K 0x08000000

5. Запись hex-файла

Адрес указывать не нужно. Этот "пункт" не активен.

Примечания:

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"

prog/start/j-flash.txt · Последнее изменение: 2022/04/03 23:09 (внешнее изменение)