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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> LPC1549 в ISP режиме, не корректно выходит
kolisnichenko_r
сообщение Feb 12 2016, 14:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Изучаю МК LPC1549 на демо плате LPCXpresso V2 Boards, IDE LPCXpresso. Разбираюсь с режимом работы в ISP, связь МК с ПК по CAN. Переход в ISP осуществляется из функции main() с помощью IAP команды:
Код
Chip_IAP_ReinvokeISP(BOOT_CAN);//invoke ISP CAN Param0: ISP mode. 3 = C_CAN ISP

Счытываю тип прибора, идентификационный номер (не записываю ни во Flash ни в RAM). Обмен виден утилитой USB-CAN моста. Потом выхожу из ISP в приложение командой «Go». Команда отрабатывается, но МК куда то улетает, а нужно в начало пользовательського приложения. Что я делаю не так?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 12 2016, 17:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (kolisnichenko_r @ Feb 12 2016, 16:26) *
Изучаю МК LPC1549 на демо плате LPCXpresso V2 Boards, IDE LPCXpresso. Разбираюсь с режимом работы в ISP, связь МК с ПК по CAN. Переход в ISP осуществляется из функции main() с помощью IAP команды:
CODE
Chip_IAP_ReinvokeISP(BOOT_CAN);//invoke ISP CAN Param0: ISP mode. 3 = C_CAN ISP

Счытываю тип прибора, идентификационный номер (не записываю ни во Flash ни в RAM). Обмен виден утилитой USB-CAN моста. Потом выхожу из ISP в приложение командой «Go». Команда отрабатывается, но МК куда то улетает, а нужно в начало пользовательського приложения. Что я делаю не так?

А что Вы считаете "началом приложения"? Ну а в общем случае Вы по "Go" кортекс M3 не запустите sad.gif. Попытка сляпать "никакой" startup увенчалась "успехом' в результате которого
в стартапе нет, например, явной установки стека. Если в начале Вашего приложения лично Вы не добавили инициализацию, то по Go улетите. Про младший бит адреса помните?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Feb 12 2016, 18:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(zltigo @ Feb 12 2016, 21:22) *
А что Вы считаете "началом приложения"? Ну а в общем случае Вы по "Go" кортекс M3 не запустите sad.gif. Попытка сляпать "никакой" startup увенчалась "успехом' в результате которого
в стартапе нет, например, явной установки стека. Если в начале Вашего приложения лично Вы не добавили инициализацию, то по Go улетите. Про младший бит адреса помните?

Начало приложения - адрес стека и таблица векторов прерываний.
Я указал перед "Go" адрес 0х00000000, думалось этого достаточно. Я же не изменял ни каких блоков в памяти программ.
А младший бит адреса это что означает?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 12 2016, 19:47
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (kolisnichenko_r @ Feb 12 2016, 20:56) *
Начало приложения - адрес стека и таблица векторов прерываний.
Я указал перед "Go" адрес 0х00000000, думалось этого достаточно.

Ой, как все запущено sad.gif. 0 адрес это НЕ программа, а как Вы сами и написали выше.
QUOTE
Я же не изменял ни каких блоков в памяти программ.

Да? а тот с кем Вы общались набирая ту-же команду "Go" тоже ничего ничего не изменял sm.gif
QUOTE
А младший бит адреса это что означает?

А что значит младший бит адреса посмотрите в системе команд контроллера.




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 12 2016, 19:50
Сообщение #5


Гуру
******

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



Цитата(zltigo @ Feb 12 2016, 23:22) *
А что Вы считаете "началом приложения"? Ну а в общем случае Вы по "Go" кортекс M3 не запустите sad.gif. Попытка сляпать "никакой" startup увенчалась "успехом' в результате которого
в стартапе нет, например, явной установки стека. Если в начале Вашего приложения лично Вы не добавили инициализацию, то по Go улетите. Про младший бит адреса помните?

У Вас видно старая версия FlashMagic-а. Последние умеют переходить по содержимому начала таблицы векторов (есть там чекбокс соответствующий).
А сама идея конечно бредовая, можно наверное трусы и через голову надевать, но есть более традиционные методы.
И товарищ, с большой долей вероятности, не задумался в каком состоянии находится периферия в момент сего перехода, и как написан его код инициализации периферии, переварит-ли он недефолтные значения в её регистрах.
Но если всё-таки хочется трусы через голову, то можно например посоветовать ему написать функцию, дёргающую аппаратный сброс (например через WDT), слинковать её на фиксированный адрес и передавать сей адрес команде Go. Так есть шанс не застрять ушами в трусах. sm.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 12 2016, 19:58
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Feb 12 2016, 21:50) *
У Вас видно старая версия FlashMagic-а. Последние умеют переходить по содержимому начала таблицы векторов (есть там чекбокс соответствующий).

У меня свой терминал-программатор sm.gif. Он извлекает точку входа из HEX формата. Но старт все равно для M3 не работает по причине того, что стек сбит. Можно специально загружаемую программу допиливать. Но меня это особо не беспокоит, поскольку программатор умеет и сброс подавать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Feb 12 2016, 20:31
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(zltigo @ Feb 12 2016, 22:47) *
Ой, как все запущено sad.gif. 0 адрес это НЕ программа, а как Вы сами и написали выше.

А программа то что в функции main()?
Цитата(zltigo @ Feb 12 2016, 22:47) *
Да? а тот с кем Вы общались набирая ту-же команду "Go" тоже ничего ничего не изменял sm.gif

По крайней мере я его не просил вносить изменений.
Как узнать что и в каком месте он может изменять?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 12 2016, 20:43
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (kolisnichenko_r @ Feb 12 2016, 22:31) *
А программа то что в функции main()?

Вы это что спросить хотели?
QUOTE
По крайней мере я его не просил вносить изменений.
Как узнать что и в каком месте он может изменять?

Детский сад какой-то. Вы слово стек когда-нибудь слышали? Вы прервали программу и потом НЕ возвратились, а послали (ну в Вашем варианте вообще на 3 веселых буквы) в другое место. Про то, зарезервировали-ли Вы память в своей программе для работы ISP, спрашивать, видимо, вообще не имеет смысла?
Для того что бы задать вопрос надо знать хотя бы часть ответа. Вот этим и надо заняться.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Feb 12 2016, 20:50
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(jcxz @ Feb 12 2016, 22:50) *
У Вас видно старая версия FlashMagic-а. Последние умеют переходить по содержимому начала таблицы векторов (есть там чекбокс соответствующий).
А сама идея конечно бредовая, можно наверное трусы и через голову надевать, но есть более традиционные методы.
И товарищ, с большой долей вероятности, не задумался в каком состоянии находится периферия в момент сего перехода, и как написан его код инициализации периферии, переварит-ли он недефолтные значения в её регистрах.
Но если всё-таки хочется трусы через голову, то можно например посоветовать ему написать функцию, дёргающую аппаратный сброс (например через WDT), слинковать её на фиксированный адрес и передавать сей адрес команде Go. Так есть шанс не застрять ушами в трусах. sm.gif

На счет идеи, если больше нету связи кроме как CAN и дергать питанием тоже нельзя. Использовать ISP как раз когда можно в него перейти с работающей программы переписать код и потом в новую вернуться.
Но на даном этапе не получилось просто войти и вернуться.
Как оно не просто...

Цитата(zltigo @ Feb 12 2016, 23:43) *
Вы это что спросить хотели?

Детский сад какой-то. Вы слово стек когда-нибудь слышали? Вы прервали программу и потом НЕ возвратились, а послали (ну в Вашем варианте вообще на 3 веселых буквы) в другое место. Про то, зарезервировали-ли Вы память в своей программе для работы ISP, спрашивать, видимо, вообще не имеет смысла?
Для того что бы задать вопрос надо знать хотя бы часть ответа. Вот этим и надо заняться.

А с чего начать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 12 2016, 21:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (kolisnichenko_r @ Feb 12 2016, 22:50) *
А с чего начать?

В Вашем случае с самого начала:
1) Архитектура контроллера и как он стартует.
2) Какие ресурсы использует ISP и как с ним сосуществовать.




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 13 2016, 07:24
Сообщение #11


Гуру
******

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



Цитата(zltigo @ Feb 13 2016, 01:58) *
У меня свой терминал-программатор sm.gif. Он извлекает точку входа из HEX формата. Но старт все равно для M3 не работает по причине того, что стек сбит

что значит "сбит"?
Очевидно, что если например FlashMagic умеет делать переход по таблице векторов прерываний (считать адрес перехода из вектора сброса), то он должен и SP выставить по содержимому таблицы векторов.

Цитата(kolisnichenko_r @ Feb 13 2016, 02:50) *
На счет идеи, если больше нету связи кроме как CAN и дергать питанием тоже нельзя. Использовать ISP как раз когда можно в него перейти с работающей программы переписать код и потом в новую вернуться.
...
А с чего начать?

Начать Вам надо с открытия юзермануала и прочтения разделов "IAP" (прошивка флешь) и WDT (аппаратный сброс после обновления ПО).
ISP тут совсем не к месту.
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Feb 13 2016, 07:51
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Цитата(zltigo @ Feb 13 2016, 00:03) *
В Вашем случае с самого начала:
1) Архитектура контроллера и как он стартует.
2) Какие ресурсы использует ISP и как с ним сосуществовать.

Спасибо. Пошел читать...

Цитата(jcxz @ Feb 13 2016, 10:24) *
Начать Вам надо с открытия юзермануала и прочтения разделов "IAP" (прошивка флешь) и WDT (аппаратный сброс после обновления ПО).
ISP тут совсем не к месту.

Обоснуйте, пожалуйста
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 13 2016, 15:59
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Feb 13 2016, 09:24) *
что значит "сбит"?

То, что он не соответствует тому, который аппаратно устанавливается контроллером при сбросе.
QUOTE
Очевидно, что если например FlashMagic умеет делать переход по таблице векторов прерываний (считать адрес перехода из вектора сброса), то он должен и SP выставить по содержимому таблицы векторов.

Отлично! Должен, это уже на пути к пониманию. Осталось только узнать, КАКОЙ КОМАНДОЙ "Magic" это может сделать. В перечне документированных команд установки стека НЕТ.
Когда не было этого обгрызенного стартапа младших кортексов и указатель стека устанавливался программно, а не аппаратно, то этой проблемы не было.
Можно поковырять, конечно, обмен и посмотреть. Недокументированные команды, но они имеют свойство исчезать и меняться от версии к версии sad.gif. Например, я в свое время для сброса пользовался командой "Т". Потом она исчезла.
QUOTE
ISP тут совсем не к месту.

К месту, ибо ISP пользует все те же вызовы IAP и через его автор собирается работать.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 14 2016, 16:39
Сообщение #14


Гуру
******

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



Цитата(zltigo @ Feb 13 2016, 21:59) *
Осталось только узнать, КАКОЙ КОМАНДОЙ "Magic" это может сделать. В перечне документированных команд установки стека НЕТ.

Ну нет, так нет. Не смотрел какие команды есть в ISP, да и не особо интересно - я пользовался только IAP.
Цитата(zltigo @ Feb 13 2016, 21:59) *
К месту, ибо ISP пользует все те же вызовы IAP и через его автор собирается работать.

Если у автора есть работчий протокол по какому-то интерфейсу (CAN), то логичнее принять прошивку по нему и записать её при помощи IAP.
Чем городить огород с переключением из рабочего ПО в загрузчик и обратно с переключением интерфейсов и пр.
А если после переключения прошивка не будет получена? Или будет обрыв при получении прошивки? Или прошьют не ту прошивку? и т.д. и т.п....
При приёме по рабочему протоколу таких проблем нет и гораздо больше возможностей.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 14 2016, 17:13
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Feb 14 2016, 18:39) *
Ну нет, так нет. Не смотрел какие команды есть в ISP, да и не особо интересно - я пользовался только IAP.

Одно другого не отменяет, ибо первый раз тоже надо залить фирмварь.
QUOTE
При приёме по рабочему протоколу таких проблем нет и гораздо больше возможностей.

C этим, естественно, спору нет.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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