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

 
 
> 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, 07:27
Сообщение #2


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

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



Ох, как-то замороченно у них получилось...
Оставили б альтернативные адреса (например, флеш живёт по адресу 0x0800 0000, по спец-команде дополнительно мапится на 0), и всем было б хорошо...

Писать/читать регистры периферии можно командами "write to ram" и "read memory".


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


Местный
***

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



Цитата(esaulenka @ Mar 18 2016, 10:27) *
Ох, как-то замороченно у них получилось...
Оставили б альтернативные адреса (например, флеш живёт по адресу 0x0800 0000, по спец-команде дополнительно мапится на 0), и всем было б хорошо...

Писать/читать регистры периферии можно командами "write to ram" и "read memory".

RAM этого МК занимает адресное пространство от 0х02000000 до 0х02009000, а SYSMEMREMAP расположен в 0x40074000. "write to ram" не сработает.

Подглядел в дизассемблере компилятора:
Код
//LPC_SYSCON->SYSMEMREMAP = 0x2; //change memory map 0x2
00001d5e:   ldr r3, [pc, #148]    ; (0x1df4 <main+172>)
00001d60:   movs r2, #2
00001d62:   str r2, [r3, #0]

Наверное, можно применить следующую последовательность команд:
Код
LDR     R0, =0x40074000; Прочитать в R0 значение регистра SYSMEMREMAP, 0x40074000 адрес
MOV     R1, #2; Загрузить в R1 значение 0x2 которое нужно записать в регистр SYSMEMREMAP        
STR     R1, [R0]; Записать значение из R1 в регистр по адресу из R0    
BX      LR; Возрат - переход по адресу, записанному в регистре LR (R14)

Как считаете?
Еще остается вопрос как из ассемблера перевести в последовательность цифр.
Go to the top of the page
 
+Quote Post



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

 


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


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