реклама на сайте
подробности

 
 
> В чём особенность программирования MK по JTAG?
NikP
сообщение Dec 6 2017, 07:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Отлаживаю однотипные модули на базе 1986ВЕ1Т (Миландр). В устройстве имеется FLASH 1636РР2АУ (тоже Миландр).
Модуль должен перепрограммироваться по шине CAN. Процесс идёт так: новая прошивка записывается в 1636РР2АУ,
проверяется контрольная сумма, после чего контроллер копирует её из 1636РР2АУ во внутреннюю FLASH, перезагружается
командой NVIC_SystemReset() и далее работает.
Проблемы возникли с одним из 5 модулей: после перепрошивки по CAN он намертво зависает, хотя если прошивать его через программатор
по JTAG, то работает нормально.
Пробовал проводить перепрошивку под отладчиком: новая программа записывается во FLASH контроллера без дефектов, происходит перезагрузка,
программа запускается, но после выполнения нескольких операций уходит в HardFault.
Вопрос: в чём особенность программирования по JTAG по сравнению с перепрошивкой контроллером?
В чём может быть причина такого сбоя ?

Сообщение отредактировал NikP - Dec 6 2017, 07:36
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
NikP
сообщение Dec 8 2017, 07:22
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Всем спасибо за обсуждение.
С проблемой разобрался. Когда стал проходить прошивку после перезагрузки по шагам, то выяснилось, что затык происходит при обращении к флэш при старте программы. Сделал пару задержек в этом куске программы, и всё заработало. Вероятно, после перезагрузки перепрошитой программы эта часть отрабатывается быстрее, чем при записи программы в МК по JTAG.

Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 8 2017, 10:47
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(NikP @ Dec 8 2017, 09:22) *
С проблемой разобрался. Когда стал проходить прошивку после перезагрузки по шагам, то выяснилось, что затык происходит при обращении к флэш при старте программы. Сделал пару задержек в этом куске программы, и всё заработало. Вероятно, после перезагрузки перепрошитой программы эта часть отрабатывается быстрее, чем при записи программы в МК по JTAG.

Да уж.... "разработчик".... smile3009.gif
Вставил пару костылей и "решил проблему". До следующего костыля.

Цитата(Genadi Zawidowski @ Dec 7 2017, 13:19) *
не-а... Для ускорения процесса все-таки обычно работой с FLASH занимается flash loader, который да, напрямую, помещается в память программируемого девайса. Хотя это не SEGGER...

А зачем? Если JTAG имеет доступ ко всему адресному пространству МК, значит он имеет доступ и к регистрам отвечающим за интерфейс программирования FLASH.
А значит он (имея доступ к ОЗУ) может загрузить туда содержимое очередного прошиваемого блока и (имея доступ к регистрам управления прошивкой) - стартовать через эти регистры операцию записи во флешь.

Цитата(VladislavS @ Dec 7 2017, 17:43) *
Не ускорять, а унифицировать. Флэшек и способов их подключения в природе несметное количество, а протокол с флэшлоадером строго определён.

Унифицировать можно написав скрипт для каждого МК, выполняющийся на компе и знающий адреса и номера битов в регистрах программирования флешь, находящихся в области периферийных регистров МК. А доступ ко всему ОЗУ и всем регистрам отлаживаемого МК эмулятор имеет.
В составе IAR видел директорию с кучей *.ddf-файлов для каждого семейства поддерживаемых МК - возможно это оно и есть.
И написать такой скрипт будет проще, чем писать загрузчик, выполняющийся на самом МК.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 8 2017, 12:15
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (jcxz @ Dec 8 2017, 12:47) *
Унифицировать можно написав скрипт для каждого МК, выполняющийся на компе и знающий адреса и номера битов в регистрах программирования флешь, находящихся в области периферийных регистров МК. А доступ ко всему ОЗУ и всем регистрам отлаживаемого МК эмулятор имеет.
Это будет очень медленно и печально. Поэтому в ОЗУ грузится некиая подпрограмма копирования блоков из ОЗУ во флешь, отладчик кладет в ОЗУ содержимое сразу большого блока (страницы) флешь, ставит точку останова на конец этой подпрограммы и запускает ее.
QUOTE (jcxz @ Dec 8 2017, 12:47) *
В составе IAR видел директорию с кучей *.ddf-файлов для каждого семейства поддерживаемых МК - возможно это оно и есть.
Нет, это device description file - файлы описания периферийных регистров и их битов. То, что я описал, у IAR называется (раньше называлось, сейчас - не знаю) flash loader и была отдельная галочка "use flash loader".
QUOTE (jcxz @ Dec 8 2017, 12:47) *
И написать такой скрипт будет проще, чем писать загрузчик, выполняющийся на самом МК.
В openocd реализованы оба варианта. Разность в скорости записи на порядки. "Лучше день потерять, потом долететь за пять минут!".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 8 2017, 16:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Сергей Борщ @ Dec 8 2017, 14:15) *
Это будет очень медленно и печально. Поэтому в ОЗУ грузится некиая подпрограмма копирования блоков из ОЗУ во флешь, отладчик кладет в ОЗУ содержимое сразу большого блока (страницы) флешь, ставит точку останова на конец этой подпрограммы и запускает ее.

Программирование блока (страницы) флешь по времени - это несколько мсек. Чтобы стартовать запись такого блока в любом МК нужно выполнить считанное кол-во записей в регистры IO.
Неужто длительность этих записей такая большая, что занимает хотя-бы миллисекунды??
Очевидно что нет: в одном из моих текущих проектов я отлаживаю ПО в SDRAM (подключенной к МК). Перед загрузкой программирую регистры контроллера внешней шины для чего написал соответствующий .mac-файл и подсунул IAR. В этом файле написан срипт настройки контроллера внешней шины МК в несколько десятков записей в регистры IO. И времени его выполнения я на глаз не замечаю - грузится примерно как во внутреннюю ОЗУ.

Цитата(Сергей Борщ @ Dec 8 2017, 14:15) *
То, что я описал, у IAR называется (раньше называлось, сейчас - не знаю) flash loader и была отдельная галочка "use flash loader".
В openocd реализованы оба варианта. Разность в скорости записи на порядки. "Лучше день потерять, потом долететь за пять минут!".

У меня нигде эта галка не установлена. Скорость записи какая? Она в первую очередь определяется временем стирания блоков флешь. Типичное время стирания одного блока в текущем МК == 5 секунд! На фоне этого даже миллисекунды незаметны, не говоря уже о микросекундах, которые очевидно занимают операции записи регистров через JTAG.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 8 2017, 16:40
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (jcxz @ Dec 8 2017, 18:16) *
Программирование блока (страницы) флешь по времени - это несколько мсек. Чтобы стартовать запись такого блока в любом МК нужно выполнить считанное кол-во записей в регистры IO.
Кроме NXP бывают и другие процессоры. и там надо почитать регистр в ожидании готовности, потом записать другой для запуска процесса записи, после этого положить собственно записываемый байт/слово и дождаться окончания записи (почитывая регистр). Каждое это действие через отладочный интерфейс достаточно медленно. В NXP это все делает прошитая изготовителем в системную память функция.
QUOTE (jcxz @ Dec 8 2017, 18:16) *
У меня нигде эта галка не установлена.
Сочувствую sm.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 8 2017, 17:26
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Сергей Борщ @ Dec 8 2017, 18:40) *
Кроме NXP бывают и другие процессоры. и там надо почитать регистр в ожидании готовности, потом записать другой для запуска процесса записи, после этого положить собственно записываемый байт/слово и дождаться окончания записи (почитывая регистр). Каждое это действие через отладочный интерфейс достаточно медленно.

А зачем флешь писать побайтно??
В Infineon например сразу страница грузится и потом даётся команда на её запись.
Вобщем думаю: никакой заметной разницы по времени между записью напрямую через JTAG и через флешь-лоадер - нет. Тем более основное время занимает стирание, а не запись.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- NikP   В чём особенность программирования MK по JTAG?   Dec 6 2017, 07:23
- - x893   Почему нельзя посмотреть по шагам после перепрошив...   Dec 6 2017, 07:47
- - Obam   Если один блок из пяти "дурИт", мож там ...   Dec 6 2017, 07:52
- - jcxz   Цитата(NikP @ Dec 6 2017, 09:23) В чём мо...   Dec 6 2017, 11:17
- - gerber   Копайте в сторону flash wait states.   Dec 6 2017, 20:23
- - HardEgor   Цитата(NikP @ Dec 6 2017, 14:23) Вопрос: ...   Dec 7 2017, 10:39
- - Genadi Zawidowski   Цитатапо JTAG вы напрямую, минуя контроллер, залив...   Dec 7 2017, 11:19
|- - mantech   Цитата(Genadi Zawidowski @ Dec 7 2017, 14...   Dec 7 2017, 11:27
|- - VladislavS   Не ускорять, а унифицировать. Флэшек и способов их...   Dec 7 2017, 15:43
|- - VladislavS   Цитата(Сергей Борщ @ Dec 8 2017, 15:15) ...   Dec 8 2017, 16:09
||- - VladislavS   Цитата(jcxz @ Dec 8 2017, 20:26) Вобщем д...   Dec 8 2017, 18:12
|||- - Obam   Цитата(VladislavS @ Dec 8 2017, 22:12) Эт...   Dec 8 2017, 18:46
||||- - VladislavS   Цитата(Obam @ Dec 8 2017, 21:46) Тема про...   Dec 8 2017, 19:13
||||- - Obam   Цитата(VladislavS @ Dec 8 2017, 23:13) Та...   Dec 9 2017, 07:43
||||- - VladislavS   Цитата(Obam @ Dec 9 2017, 10:43) Более то...   Dec 9 2017, 09:38
||||- - jcxz   Цитата(Obam @ Dec 9 2017, 09:43) Вот вы в...   Dec 9 2017, 15:46
|||- - jcxz   Цитата(VladislavS @ Dec 8 2017, 20:12) Ва...   Dec 8 2017, 19:18
|||- - VladislavS   Цитата(jcxz @ Dec 8 2017, 22:18) А в чём ...   Dec 8 2017, 19:21
||||- - jcxz   Цитата(VladislavS @ Dec 8 2017, 21:21) Пр...   Dec 8 2017, 19:29
|||- - Сергей Борщ   QUOTE (jcxz @ Dec 8 2017, 21:18) длительн...   Dec 8 2017, 20:13
||- - Сергей Борщ   QUOTE (jcxz @ Dec 8 2017, 19:26) А зачем ...   Dec 8 2017, 18:56
|- - Obam   Цитата(Сергей Борщ @ Dec 8 2017, 16:15) Н...   Dec 8 2017, 17:51
- - NikP   Насчёт своего уровня как программиста и разработчи...   Dec 8 2017, 17:18
- - VladislavS   Пробовал и опять чисто практически. Так что, реком...   Dec 8 2017, 19:32
|- - jcxz   Цитата(VladislavS @ Dec 8 2017, 21:32) Пр...   Dec 8 2017, 21:36
|- - gerber   Цитата(jcxz @ Dec 9 2017, 00:36) Вот у ме...   Dec 9 2017, 21:38
|- - AlexandrY   Цитата(gerber @ Dec 9 2017, 23:38) что пр...   Dec 10 2017, 11:23
- - Obam   Да-да, не уж-то мне надо вспоминать, как они были ...   Dec 9 2017, 13:31
- - VladislavS   Не знаю что у вас там завертелось, но ARM без набо...   Dec 9 2017, 15:20
- - Obam   Ядро - это ядро (впишите любое на свой выбор), тут...   Dec 9 2017, 19:48
- - jcxz   Цитата(Obam @ Dec 9 2017, 21:48) Что зря?...   Dec 10 2017, 02:05


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016