Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2020-июн-03 03:00

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 31 сообщение ]  На страницу « 1 2 3 »
Автор Сообщение
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-21 08:53 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 538
Делаю bat-ник в каталоге проекта в котором запускаю:
\Keil\ARM\ARMCC\bin\fromelf.exe --bincombined --output=my.bin ..\obj\my.axf
Каталог \obj упомянут в свойствах проекта


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-22 00:15 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 193
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Что-то не получилось.
До этого стоял набор софта от Сеггер версии 4.94 - с ним проблем не было. Когда установил последнюю версию с сайта 6.40 - стала постоянно теряться связь (регулярно выскакивает предупреждение "The connection J-Link is defective. Proper operation cannot be guaranted...").
Открыть Предупреждение
Вложение:
[ attachment ]
Defective connect.png [ 12.25 КБ | 2686 просмотров ]
Закрыть
Да J-Link не оригинальный, а китайский клон (J-Link ARM V8), типа такого на AT91SAM7S64. Но до обновления всё работало стабильно при скорости 1-5 МГц. Пришлось снижать скорость по SWD до 50 кГц - тогда хоть как-то заработало. Но застопорилось на загрузке .FLM-файла. То ли не может его найти на диске по указанному пути, то ли не может залить в контроллер - из сообщения не ясно. Путь к .FLM-файлу в файле JLinkDevices.xml прописан правильный.
Открыть Запись в файле JLinkDevices.xml
  <!--                 -->
  <!-- Milandr (1986BE1T) -->
  <!--                 -->
   <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/1986VE1_FlashInt_DR.FLM"
          LoaderType="FLASH_ALGO_TYPE_OPEN"
          AlwaysPresent="1"/>
    </Device>
Закрыть
Имя файла именно такое, путь от файла JFlash.exe тоже такой.
Открыть Путь к FLM
Вложение:
[ attachment ]
Путь к FLM.png [ 71.26 КБ | 2678 просмотров ]
Закрыть
Что там может быть неправильно - непонятно.


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-23 20:06 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 274
Professor Chaos писал(а):
По какой-то причине строка
Цитата:
$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L
не работает.
Открыть скриншот
[ img ]
Закрыть
Вместо бинарника создаётся папка с несколькими файлами внутри.
Всё вроде как совпадает с первоисточником, но работает не так, как надо. Что-то по этой команде создаётся, только не то, что нужно.
Если флеш порезана в проекте на части, то и целого .bin файла не будет - кто линкеру скажет с какого адреса эти сырые куски кода записывать в контроллер. Если флеш не порезана, то бинарник будет один. Hex-файл (ключ -i32) будет всегда один + отдельные .hex - в самом hex-е всегда прописаны адреса, по которым заливается код в микроконтроллер.

_________________
Hack the Planet!


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-23 20:10 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 274
Professor Chaos писал(а):
Что-то не получилось.
До этого стоял набор софта от Сеггер версии 4.94 - с ним проблем не было. Когда установил последнюю версию с сайта 6.40 - стала постоянно теряться связь (регулярно выскакивает предупреждение "The connection J-Link is defective. Proper operation cannot be guaranted...").
Открыть Предупреждение
Вложение:
Defective connect.png
Закрыть
Да J-Link не оригинальный, а китайский клон (J-Link ARM V8), типа такого на AT91SAM7S64. Но до обновления всё работало стабильно при скорости 1-5 МГц. Пришлось снижать скорость по SWD до 50 кГц - тогда хоть как-то заработало. Но застопорилось на загрузке .FLM-файла. То ли не может его найти на диске по указанному пути, то ли не может залить в контроллер - из сообщения не ясно. Путь к .FLM-файлу в файле JLinkDevices.xml прописан правильный.
Открыть Запись в файле JLinkDevices.xml
  <!--                 -->
  <!-- Milandr (1986BE1T) -->
  <!--                 -->
   <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/1986VE1_FlashInt_DR.FLM"
          LoaderType="FLASH_ALGO_TYPE_OPEN"
          AlwaysPresent="1"/>
    </Device>
Закрыть
Имя файла именно такое, путь от файла JFlash.exe тоже такой.
Открыть Путь к FLM
Вложение:
Путь к FLM.png
Закрыть
Что там может быть неправильно - непонятно.
Лучше Segger ставить в корень диска - бывает бяка с путём с пробелами ...\Program Files (x86)\... Ещё замечал, что бывает Segger запоминает пути старой установки (то ли в переменной среды, то ли в реестре)...

_________________
Hack the Planet!


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-23 22:36 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 193
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
R Max писал(а):
Если флеш порезана в проекте на части, то и целого .bin файла не будет - кто линкеру скажет с какого адреса эти сырые куски кода записывать в контроллер.
Странно. Линкер же всё-таки знает все регионы памяти в программе, их начальные адреса и размеры. Если нет, то как же он тогда сформирует .hex-файл, не зная этого?
Да, у меня используется несколько областей памяти. Первая - под код программы и неизменные данные, а вот вторая и третья - массивы данных по заданным атрибутом __attribute__((at(address))) адресам. Компилятор должен передать эти адреса в линкер. Линкер ведь правильно генерирует .hex-файл. Значит правильно опознаёт эти области. Почему имея всю эту информацию нельзя собрать единый бинарник - непонятно. Размер флеша контроллера известен (прописан в настройках проекта). Начальное значение (стёртое состояние) флеша тоже.


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-24 20:29 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 274
Уточнение, как сказал ЧумА, для одного бинарника нужен ключ -bincombined.

http://www.keil.com/support/docs/3213.htm
The fromelf option --bin generates one binary file for each load region of your application. If one complete binary file is needed, consider using the option --bincombined.

http://www.keil.com/support/man/docs/ar ... 886407.htm

_________________
Hack the Planet!


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-24 22:15 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 193
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
R Max писал(а):
Уточнение, как сказал ЧумА, для одного бинарника нужен ключ -bincombined.
Спасибо, попробую.
Попробовал разные .FLM - те, что из пака работают. А те, что с гитхаба - стабильно выдают ошибку загрузки. С ними ни разу не удалось хоть что-то сделать. Оригинальные из пака работают со второго раза: любая операция первый раз выдает ошибку, на второй проходит.
Причём эти файлы дают разную картину во вкладке Flash настроек проекта
Открыть При использовании FLM-файла с гитхаба
Вложение:
Комментарий к файлу: FLM с гитхаба
[ attachment ]
J-Link - Flash.png [ 62.02 КБ | 2634 просмотра ]
Закрыть
Открыть При использовании FLM-файла из пака 1.5 для Кейл
Вложение:
Комментарий к файлу: FLM из пака 1.5 для Кейла
[ attachment ]
J-Link - Flash 2.png [ 51.83 КБ | 2634 просмотра ]
Закрыть
В том, что из пака прописан общий размер флеша 128 кбайт, а также разбиение флеша на 128 секторов по 1 Кбайту.

UPD
Попробовал сделать единый бинарник для проекта. Получилось. Команда
$K\ARM\ARMCC\bin\fromelf.exe --bincombined --output=@L.bin !L
создаёт бинарник в каталоге проекта с именем проекта и расширением .bin.
Что мне и требовалось.


Последний раз редактировалось Professor Chaos 2018-дек-25 22:45, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2018-дек-25 12:47 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1485
Откуда: Тула
Professor Chaos писал(а):
В том, что из пака прописан общий размер флеша 128 кбайт, а также разбиение флеша на 128 секторов по 1 Кбайту.
Что, в целом, тоже не верно. По крайней мере первый сектор занимает адреса не 0х0..0x3FF, а 0x0..0x1000 с прореживанием в одно слово через четыре (32 бита на каждые 128). Так что стирайте либо всю флешь, либо по 4 сектора кратно 4-м.

Миландровцам, видимо, стоит поправить FLM

_________________
сочувствующий…


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-апр-04 20:53 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 193
Организация: ФГУП "РФЯЦ-ВНИИЭФ"
Собрал-таки работоспособный проект для J-Flash для программирования 1986ВЕ1Т. В качестве .FLM взял файлы из пака версии 1.5 для Кейла.
Во вложении:
1986VE1.jflash - собственно, проект. Копируем в любое удобное место на диске.
JLinkDevices.xml - файл с добавленными микроконтроллерами Миландр. Заменяем им стандартный из папки с набором утилит Segger
Milandr - папка с .FLM-файлами. Помещаем в папку Devices

После указанных манипуляций запускаем J-Flash, открываем файл проекта, открываем файл данных с прошивкой (в формате .bin или .hex). Коннектимся, если коннект успешен - можно программировать. Все операции идут с первого раза, кроме проверки на чистоту после стирания. Она почему-то с первого раза не проходит, приходится запускать второй раз. Автоматическое программирование (F7) работает нормально с первого раза.


Вложения:
Комментарий к файлу: Архив с проектом и необходимыми файлами
Проект J-Flash для 1986ВЕ1Т.zip [21.56 КБ]
196 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-окт-14 12:21 
Не в сети

Зарегистрирован: 2019-окт-10 12:45
Сообщения: 9
Организация: private person
спасибо всем кто участвовал в этой теме, добавлю свои пять копеек про BE1
1) старый flm от 2014 года с новыми версиями jflash простое работает - не может найти структуру данных, которая в общем то там есть
2) гитхабовские flm у меня так же не заработали, именно на верификации, но ошибка была не верификации а именно про flm
3) в новых keil pack есть свежие flm от января 2019 года - вот они у меня заработали
но есть момент - после старания чипа надо делать небольшую паузу иначе в начале флеш пропишутся левые байты.
Найдено это было практическим путем: если вручную сперва нажать кнопку "стереть" потом "прошить и проверить" то все работает , а вот на автоматическом программировании, в jflash а также в jflash lite и других программах которые используют jlink api (появляется окошко с 4 прогресс-барами) у меня почти всегда возникает ошибка.
в новых версиях jflash была возможность вручную задать паузу между этапами прошивки и все работает.
но jflash есть еще одна особенность - она не перепрочитывает файл с прошивкой перед прошивкой и не мониторит его обновления. так что после компиляции нужно переоткрывать hex что не очень удобно.
поэтому вижу только одно решение - использовать jflash из командной строки

я все эти наработки использовал для отладчика ozone того е производителя


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-окт-18 18:11 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 472
Организация: Milandr
Откуда: ПКК "Миландр"
Просто в качестве комментария:
- С необходимостью задержки после стирания FLM не сталкивался.
- Если верификация не проходит с первого раза, то проблема в буфере (ускорителе) флеш памяти, куда считываются строки.

Пример кода и про ускоритель можно найти тут: https://github.com/StartMilandr/MDR_Pac ... EEPROM_FLM

Сейчас занимался проверкой, у меня эти FLM ошибок при верификации не выдают (поправили их).


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-окт-22 13:31 
Не в сети

Зарегистрирован: 2019-окт-10 12:45
Сообщения: 9
Организация: private person
Vasiliy писал(а):
- С необходимостью задержки после стирания FLM не сталкивался.
- Если верификация не проходит с первого раза, то проблема в буфере (ускорителе) флеш памяти, куда считываются строки.
Сейчас занимался проверкой, у меня эти FLM ошибок при верификации не выдают (поправили их).
Два дня игрался с этими делами, взял дополнительно второй комп на совсем другой платформе, правда с такой же виндой
Что удалось зафиксировать:

1) на FLM датированных 23.01.2019 (входя в keil pack 1.5.1 и 1.5.2) картина довольно стабильна: если подать отдельно команду стирания, а потом отдельно прошивать то все работает хорошо, включая верификацию. Можно даже сперва отдельно стереть память, а потом повторно стереть и сразу запрограмировать - работает четко.
2) на новых flm с git верификация нестабильная. Т.е м.б. ошибка верификации по адресу 0x00000000, а может и не быть. Судя по всему тут имеет место не только "повторная верификациия", а еще играет размер файла. Конкретно в j-flash маленький бинарник на 1 кб у меня обычно прошивается успешно, а большой 26Кб -постоянно выдает ошибку на адресе 0x000000000. Зато шьется все стабильно, после ошибочной верификации можно смело запускать код и все работает.

как бы сделать гибрид из старой верификации и новой записывалки.


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-окт-22 15:32 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 472
Организация: Milandr
Откуда: ПКК "Миландр"
Странно...
До этого я прошивал в Keil, сейчас проверил в J-Flash, ошибок с верификацией ни разу не вывалилось. У меня JFlashLite 6.20i
  <Device>
    <ChipInfo Vendor="Milandr"
        Name="1986BE1T"
        WorkRAMAddr="0x20100000"
        WorkRAMSize="0x4000"
        Core="JLINK_CORE_CORTEX_M1" />
    <FlashBankInfo Name="1986BE1T IntFlash"
        BaseAddr="0x0"
        MaxSize="0x20000"
        Loader="Devices\Milandr\MDR1986VE1_EEPROM.FLM"
        LoaderType="FLASH_ALGO_TYPE_OPEN"
     AlwaysPresent="1"/>
  </Device>


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-окт-23 08:54 
Не в сети

Зарегистрирован: 2019-окт-10 12:45
Сообщения: 9
Организация: private person
Vasiliy писал(а):
У меня JFlashLite 6.20i
keil то и у меня работает вроде как без вопросов, и через j-link и родным отладчиком ulink но с ним же ограничение 32Кб подойти к которому весьма просто подойти.
вся затея из за сеггерскового ozone который в целом более шустрый чем keil.
для прошивки он использует тот же api что и j-flash lite - там общее типовое окно "стирание - прошивка - проверка" и выдается просто "ошибка прошивки"
А есть еще просто j-flash который с виду выглядит как более классический интерфейс для программатора и работает на чуть более низком уровне api, отдельно запускается стирание и прошивка и есть настройка пауз между этими операциями. поэтому он ведет себя по другому и предоставляет больше отладочной информации. По нему хорошо видно когда с новыми flm верификация отваливается в самом начале.
однако я использую самую свежую версию 6.52 сайта


Вернуться к началу
 Заголовок сообщения: Re: J-Flash для 1986xxx
СообщениеДобавлено: 2019-окт-23 11:04 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 472
Организация: Milandr
Откуда: ПКК "Миландр"
Видимо эти программы вызывают функции FLM чуть по другому. Потому что:

1 - Ошибка верификации на первом же адресе - это проявление ускорителя, который забуферизировал строку и не знает что в реальности код в памяти был перепрошил. Когда верификация читает, то первая строка берется из буфера - отсюда ошибка. Чтобы буфер сбросить, надо после прошивки считать шиной, не регистрами, память за пределами буферизированной строки - тогда буфер обновится. Для этого в FLM сейчас добавлена функция FlashBufferClear(), которая вызывается только когда отладчик вызывает функцию Init(3), с параметром 3 - верификация. Раз верификация дает ошибку, значит Init(3) не вызывается. Для проверки можете пересобрать FLM без проверки на входной параметр верификации:
/*
 *  Initialize Flash Programming Functions
 *    Parameter:      adr:  Device Base Address
 *                    clk:  Clock Frequency (Hz)
 *                    fnc:  Function Code (1 - Erase, 2 - Program, 3 - Verify)
 *    Return Value:   0 - OK,  1 - Failed
 */

int Init (unsigned long adr, unsigned long clk, unsigned long fnc) 
{
  ...
  //  Сброс предыдущей строки в буфере памяти, чтобы верификация шла с новыми данными!
  if (fnc == 3) - УБРАТЬ
    FlashBufferClear();
  
  return (0);                                  // Finished without Errors
}
Тогда вероятно ошибок с верификацией не будет. https://github.com/StartMilandr/MDR_Pac ... FlashPrg.c

2 - При работе с флеш памятью в проектах, я не делал задержек после стирания. Это говорит о том, что необходимость в задержке - это не требование памяти, а что-то из области программ запускающих FLM.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 31 сообщение ]  На страницу « 1 2 3 »

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB