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

 
 
> ISP бутлоaдер, Не читает стартовую страницу из Flash памяти
kolisnichenko_r
сообщение Mar 18 2016, 06:48
Сообщение #1


Местный
***

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



МК LPC1549 – прошивка записывается (ISP бутлоaдер по CAN сети) и запускается. Нужно считать Flash для проверки. Читаю – в первой странице не то что должно быть. Защита от чтения не установлена.
Докопался до того места что для считывания первых 512 байт Flash памяти нужно в ISP загрузить кусочек кода который мапит Flash на нулевой адрес. То есть нужно в регистр SYSMEMREMAP (0x40074000 адрес) записать значение 0x02. Как это сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Mar 18 2016, 11:27
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Да это просто :-)
Длина команды thumb2 - 16 бит или 32. 32-битная константа напрямую в эту команду не влезает (нужно же место под код самой команды).
Можно положить константу рядом, и ссылаться на неё (что-то вроде LDR r0, [pc, #смещение-до константы]); компилятор так и делает.
Но руками проще загрузить в регистр за два раза, благо у кортексов команда MOVT сделана, похоже, специально для этого.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Mar 18 2016, 12:07
Сообщение #3


Местный
***

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



Цитата(esaulenka @ Mar 18 2016, 14:27) *
Да это просто :-)
Длина команды thumb2 - 16 бит или 32. 32-битная константа напрямую в эту команду не влезает (нужно же место под код самой команды).
Можно положить константу рядом, и ссылаться на неё (что-то вроде LDR r0, [pc, #смещение-до константы]); компилятор так и делает.
Но руками проще загрузить в регистр за два раза, благо у кортексов команда MOVT сделана, похоже, специально для этого.

Да, нужно ассемблер под читать.

Скормил в RAM последовательность:
0x4F 0xF4 0x80 0x40 0xC4 0xF2 0x07 0x00 0x02 0x21 0x01 0x60 0x70 0x47
Все равно не читает.
Делаю по шагам:
1) Установка адреса для записи в RAM 0x02001000:
0x23 0x15 0x50 0x00 0x00 0x10 0x00 0x02
2) Команда записи данных в RAM:
0x21 0x50 0x1F 0x01
3) Запись данных в RAM 7 байт:
0x00 0x4F 0xF4 0x08 0x40 0xC4 0xF2 0x07
4) Запись данных в RAM 7 байт:
0x11 0x00 0x02 0x21 0x01 0x60 0x70 0x47
5) Задание адреса входа в программу (МК) в RAM 0x02001000:
0x23 0x70 0x50 0x01 0x00 0x10 0x00 0x02
6) Старт МК («Go»):
0x2F 0x51 0x1F 0x01 0x01 0x00 0x00 0x00

Ошибок не возвращает, но и в первой странице не то.
Правильно ли я интерпретировал последовательность микропрограммки?
Go to the top of the page
 
+Quote Post



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

 


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


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