Миландр

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

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: 2013-июл-30 10:00 
Не в сети

Зарегистрирован: 2013-июл-29 16:38
Сообщения: 25
Update:

Получена скорость "wrote 131072 bytes from file testfile.bin in 3.698427s (34.609 KiB/s)", запись проходит без ошибок. Какую скорость прошивки вы получаете другими методами, нужно ли стараться улучшить алгоритм или он уже конкурентноспособен? При написании ориентировался на Cortex-M0, чтобы на них тоже работало, реально получившиеся задержки не измерял.

Прошу всячески проверить этот код и дать отзыв на Gerrit, чтобы в итоге он был включён в официальную поставку OpenOCD в том виде, который вам понравится. Доступна также запись (но не верификация) информационной области памяти; если это реально актуальная задача, потребуются некоторые изменения в том, как реализована поддержка.

Привет,

OpenOCD -- кроссплатформенное свободное ПО для отладки, прошивки и других действий, связанных с JTAG (в том числе возможно программирование ПЛИС, находящихся в одной цепочке с контроллерами). Поддерживает огромное количество различных JTAG-адаптеров (и SWD через STLinkv2), работает под всеми популярными ОС, позволяет отлаживать, используя любую привычную для разработчика среду (plain GDB, Insight, Emacs, Vim, Eclipse, KDevelop, etc).

Я добавил предварительную поддержку встроенной флэш-памяти MDR32Fx (тестировалось только на MDR32F9Q2I, у меня нет доступа к MDR32F2), запись всех 128к пока занимает 49.5с, на этой неделе добавлю код, исполняющийся на самом контроллере из ОЗУ, что значительно ускорит процесс. Прошу заинтересованных оставлять комментарии на Gerrit: http://openocd.zylin.com/#/c/1532/. Чтобы попробовать, достаточно скомпилировать эту версию и запустить: ./src/openocd -s tcl -f interface/ftdi/olimex-arm-usb-ocd-h.cfg -f target/mdr32f9q2i.cfg ; в другой консоли arm-none-eabi-gdb, в нём выполнить "tar ext localhost:3333", "mon reset init", "file /path/to/your/elf", "load".

Документация по программированию памяти заставила меня не раз выругаться, т.к. из неё совершенно не очевидно, что дёрганья YE совершенно недостаточно при переключении как между страницами, так и между секторами. Из замеченных неприятных особенностей самого микроконтроллера -- неработоспособность JTAG при SRST, т.е. в отличие от STM32 здесь нельзя прервать исполнение ещё до первой инструкции и, например, стереть программу, отключающую JTAG или переводящую контроллер в режим глубокого сна. В остальном отладка работала в полностью привычном режиме.

Также я опубликовал вариант libopencm3 с минимальным примером работы с MDR32F9 (светодиод и кнопка на демо-доске). Libopencm3 -- свободная библиотека, позволяющая программировать Cortex-Mx микроконтроллеры с вменяемым (в отличие от, например, ST periph library) синтаксисом, с хорошей поддержкой USB Device, гибкая, легко расширяемая, изрядно документированная, сильно облегчает портирование кода между микроконтроллерами разных фирм. Краткая инструкция: git clone git://gitorious.org/mdr32f9-libopencm3/mdr32f9-libopencm3-examples.git; cd mdr32f9-libopencm3-examples; git submodule init; git submodule update; cd libopencm3; make TARGETS=mdr32/f9; cd ../examples/mdr32/f9/button; make . Мой код совсем минимальный, это фактически proof-of-concept, чтобы показать, как легко и удобно можно начать с ней работать. Вызывает неприятное удивление, что Миландр решил писать свою библиотеку, а не использовать готовую и хорошо многим знакомую; при этом, судя по форуму, многие всё равно каждый раз пишут битовые константы, т.е. даже не макросы из заголовков не используют -- такой простор для ошибок и опечаток открывается...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-июл-31 17:07 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
Цитата:
Доступна также запись (но не верификация) информационной области памяти; если это реально актуальная задача, потребуются некоторые изменения в том, как реализована поддержка.

Поддержка нужна. Мы своими силами допиливали milprog что бы ввести поддержку Info-page, т.к. её удобно пользовать вместо EEPROM-а.
Ещё и у нас и у родителей milprog-а были проблемы с записью через JTAG (начиная с МК ревизии 1226), в частности http://forum.milandr.ru/viewtopic.php?f=33&t=241#p5388 пришлось ввести ключ s для снижения частоты тактирования JTAG. Некоторые микросхемы почему-то стираются нормально только при пониженной частоте JTAG.
Проблемы как-то вдруг внезапно рассосались (партия закончилась?), но "осадочек" остался - есть субъективное впечатление, что с программированием через JTAG что-то не так. Это касается ревизий 1226, 1232. На настоящий момент программирует серийный завод и пока не жалуется, но не факт, что программирование проходит с первого раза.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-июл-31 19:45 
Не в сети

Зарегистрирован: 2013-июл-29 16:38
Сообщения: 25
ЧумА писал(а):
Цитата:
Доступна также запись (но не верификация) информационной области памяти; если это реально актуальная задача, потребуются некоторые изменения в том, как реализована поддержка.

Поддержка нужна. Мы своими силами допиливали milprog что бы ввести поддержку Info-page, т.к. её удобно пользовать вместо EEPROM-а.
Ну на счёт удобно -- я бы не сказал, что прямо удобно либо править ld-файл, чтобы линкер копировал отдельные функции для чтения и записи "eeprom" в RAM, либо определять их в соответствующую секцию с помощью атрибутов, а возможно, там и ещё какие-то хитрости есть дополнительные. А вообще писать-то уже можно, читать нельзя просто :) Комментарий о том, что вам это реально нужно для продакшна, стоило добавить на Gerrit, чтобы мэйнтейнеры OpenOCD были в курсе.

Цитата:
Ещё и у нас и у родителей milprog-а были проблемы с записью через JTAG (начиная с МК ревизии 1226), в частности http://forum.milandr.ru/viewtopic.php?f=33&t=241#p5388 пришлось ввести ключ s для снижения частоты тактирования JTAG.
Ну в OpenOCD для этого уже всё готово, просто ставится желаемая частота и всё. Хорошо, если у вас остались разные образцы, было бы интересно проверить их с OpenOCD.

Так какую вы скорость с milprog получили? А в фитоне (?) или Keil?

Обсуждение технических деталей и результатов предлагаю перенести на Gerrit, чтобы всё, касающееся поддержки этого семейства в OpenOCD было собрано в одном очевидном месте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-авг-01 09:41 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 449
Цитата:
Ну на счёт удобно -- я бы не сказал, что прямо удобно либо править ld-файл, чтобы линкер копировал отдельные функции для чтения и записи "eeprom" в RAM, либо определять их в соответствующую секцию с помощью атрибутов, а возможно, там и ещё какие-то хитрости есть дополнительные. А вообще писать-то уже можно, читать нельзя просто :) Комментарий о том, что вам это реально нужно для продакшна, стоило добавить на Gerrit, чтобы мэйнтейнеры OpenOCD были в курсе.

Суть удобства в следующем - можно иметь неизменный документированный штатный образ прошивки (и предъявить его ЗаказчеГу), Info же живёт само по себе в параллельном мире. С линкером мы никак не связываемся, по подаче питания Info переписывается в ОЗУ, а скидывается назад по сигналу о пропадании оного.
Простите великодушно, но я не силён в "импортном языке" так, что бы писать на Gerrit и вести там техническую дискуссию.
Теперь по скорости milprog через Olimex:
- ARM USB TYHY - 6543 байт/с чтение, 2267 запись;
- USB-OCD-H - 47662 байт/с чтение, 7578 запись;
Кейл пишет методом "через прогу в ОЗУ", на ULink2 субъективно по скорости записи что-то среднее между TINY и OCD-H, читать нельзя :(
Запись через USB-OCD-H более подвержена зависимости от партии.
Выду из отпуска, будем попробовать OpenOCD, однако если бы Вы выложили готовую сборку (ну и уж bat-ники) под Windows это значительно облегчило бы дело.
Желаю успехов, сам ушел в отпуск :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-авг-01 10:05 
Не в сети

Зарегистрирован: 2013-июл-29 16:38
Сообщения: 25
ЧумА писал(а):
Цитата:
Ну на счёт удобно -- я бы не сказал, что прямо удобно либо править ld-файл, чтобы линкер копировал отдельные функции для чтения и записи "eeprom" в RAM, либо определять их в соответствующую секцию с помощью атрибутов, а возможно, там и ещё какие-то хитрости есть дополнительные. А вообще писать-то уже можно, читать нельзя просто :) Комментарий о том, что вам это реально нужно для продакшна, стоило добавить на Gerrit, чтобы мэйнтейнеры OpenOCD были в курсе.

Суть удобства в следующем - можно иметь неизменный документированный штатный образ прошивки (и предъявить его ЗаказчеГу), Info же живёт само по себе в параллельном мире. С линкером мы никак не связываемся, по подаче питания Info переписывается в ОЗУ, а скидывается назад по сигналу о пропадании оного.
Простите великодушно, но я не силён в "импортном языке" так, что бы писать на Gerrit и вести там техническую дискуссию.
Жаль, это наиболее верный способ получить хорошую поддержку в OpenOCD, т.к. так решили его мэйнтенеры. По поводу метода верификации информационной памяти: если я просто добавлю команду, специфичную для mdr32fx, которая будет делать дамп всей памяти в локальный файл (на компьютер, где запущен OpenOCD), это устроит (верификация основной памяти легко проводится штатными средствами, занимает около 2.5с)?

Цитата:
Теперь по скорости milprog через Olimex:
- ARM USB TYHY - 6543 байт/с чтение, 2267 запись;
- USB-OCD-H - 47662 байт/с чтение, 7578 запись;
Так, а у меня получилось 34.609 KiB/s, почти в пять раз быстрее, хорошие новости.

Цитата:
Выду из отпуска, будем попробовать OpenOCD, однако если бы Вы выложили готовую сборку (ну и уж bat-ники) под Windows это значительно облегчило бы дело.
Желаю успехов, сам ушел в отпуск :)
lol, windows. Ну, если будет свободное время в пятницу, могу кросс-компилировать с mingw... Хорошего отпуска :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-авг-01 10:28 
Не в сети

Зарегистрирован: 2013-июл-29 16:38
Сообщения: 25
ЧумА писал(а):
С линкером мы никак не связываемся, по подаче питания Info переписывается в ОЗУ, а скидывается назад по сигналу о пропадании оного.
Автоматически переписывается? Что-то я такого в документации не видел... А чтобы переписывать программно, надо иметь функции в ОЗУ. А если весь проект записан на flash, а пара функций должна находиться в ОЗУ, тогда и начинаются указания линкеру. Непонятно, как без них обойтись тогда можно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-авг-01 12:05 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1035
Откуда: Тула
PaulFertser писал(а):
ЧумА писал(а):
С линкером мы никак не связываемся, по подаче питания Info переписывается в ОЗУ, а скидывается назад по сигналу о пропадании оного.
Автоматически переписывается? Что-то я такого в документации не видел... А чтобы переписывать программно, надо иметь функции в ОЗУ. А если весь проект записан на flash, а пара функций должна находиться в ОЗУ, тогда и начинаются указания линкеру. Непонятно, как без них обойтись тогда можно.

как говорил тренер командв гасмяс из нашей раши - "один я только знаю как - никак!"

лезешь в настройки среды, выставляешь галочки, соответствующим образом оформляешь функции - получается именно так, как Вы написали. Без изучения формата ld-файлов, виндовс-вэй.

кстати, на форуме эта тема уже обсуждалась не раз. советую смотреть темы по древнЕе. к сожалению (или счастью?) разработчиков - этот форум содержит иногда принципиально важную информацию, которой нет в спецификации.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-авг-01 12:48 
Не в сети

Зарегистрирован: 2013-июл-29 16:38
Сообщения: 25
prostoRoman писал(а):
PaulFertser писал(а):
ЧумА писал(а):
С линкером мы никак не связываемся, по подаче питания Info переписывается в ОЗУ, а скидывается назад по сигналу о пропадании оного.
Автоматически переписывается? Что-то я такого в документации не видел... А чтобы переписывать программно, надо иметь функции в ОЗУ. А если весь проект записан на flash, а пара функций должна находиться в ОЗУ, тогда и начинаются указания линкеру. Непонятно, как без них обойтись тогда можно.

лезешь в настройки среды, выставляешь галочки, соответствующим образом оформляешь функции - получается именно так, как Вы написали. Без изучения формата ld-файлов, виндовс-вэй.
Ну понятно, т.е. внутри то же самое, что я сказал, просто для пользователей "среды" автомагически. Меня, честно говоря, мало волнуют проприетарные среды.

Цитата:
кстати, на форуме эта тема уже обсуждалась не раз. советую смотреть темы по древнЕе. к сожалению (или счастью?) разработчиков - этот форум содержит иногда принципиально важную информацию, которой нет в спецификации.
Обычный mailing list был бы настолько удобнее форума, я даже не представляю, как можно добровольно пользоваться веб-форумами...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-окт-26 18:15 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
Подскажите пожалуйста поддерживается ли OpenOCD:
- режим SWD вместо JTAG для программатора Olimex ARM-USB-TINY-H
- программирование 1986ВЕ1Т


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-окт-26 18:35 
Не в сети

Зарегистрирован: 2013-июл-29 16:38
Сообщения: 25
8daemon писал(а):
Подскажите пожалуйста поддерживается ли OpenOCD:
- режим SWD вместо JTAG для программатора Olimex ARM-USB-TINY-H
Нет, увы. Но можно взять любую discovery плату для stm32, там встроенный st-link, с ним в режиме SWD будет работать, насколько я могу судить.

Цитата:
- программирование 1986ВЕ1Т
Я старался сделать так, чтобы работало как на Cortex-M3 контроллерах Миландр, так и на Cortex-M0. Насколько я помню, BE1 считается вообще какой-то "особенной" архитектурой, но программирование flash в нём вроде бы точно такое же, и набор команд не меньше, чем в M0, так что должно работать. Если возникнут какие-то конкретные вопросы, постараюсь ответить. Лучше, конечно, это обсуждать на openocd-devel mailing list, форумом я пользуюсь с большим трудом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-окт-26 19:24 
Не в сети

Зарегистрирован: 2013-окт-26 17:17
Сообщения: 8
Цитата:
Насколько я помню, BE1 считается вообще какой-то "особенной" архитектурой, но программирование flash в нём вроде бы точно такое же, и набор команд не меньше, чем в M0, так что должно работать.


ВЕ1 по описанию очень похож на Cortex M1, т.е. совместимое по набору команд с CM0 ядро, оптимизированное для плис = разгона частот и минимальной площади.

Интересно было бы услышать подтверждение/опровержение догадки от сотрудников Миландра.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2013-окт-27 11:25 
Не в сети

Зарегистрирован: 2012-дек-11 21:35
Сообщения: 170
Откуда: Казань
PaulFertser писал(а):
8daemon писал(а):
Подскажите пожалуйста поддерживается ли OpenOCD:
- режим SWD вместо JTAG для программатора Olimex ARM-USB-TINY-H
Нет, увы. Но можно взять любую discovery плату для stm32, там встроенный st-link, с ним в режиме SWD будет работать, насколько я могу судить.

Цитата:
- программирование 1986ВЕ1Т
Я старался сделать так, чтобы работало как на Cortex-M3 контроллерах Миландр, так и на Cortex-M0. Насколько я помню, BE1 считается вообще какой-то "особенной" архитектурой, но программирование flash в нём вроде бы точно такое же, и набор команд не меньше, чем в M0, так что должно работать. Если возникнут какие-то конкретные вопросы, постараюсь ответить. Лучше, конечно, это обсуждать на openocd-devel mailing list, форумом я пользуюсь с большим трудом.

Жаль, значит зря был приобретен https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-SWD/. Хотя на сайте есть фраза: Does ARM-JTAG-SWD work with OpenOCD?
For the moment only Rowley CrossWorks supports ARM-JTAG-SWD, but the support in OpenOCD is easy to be implemented and this will happen soon ;)
Как будет время надо будет попробывать с 1986ВЕ1Т.
Спасибо за OpenOCD под mdr


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB