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

 
 
> LPC 2366 проблема в ISP, Не получается перезаписать начальные адреса Flash
lavrik
сообщение Mar 25 2015, 12:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-01-15
Пользователь №: 84 635



Здравствуйте форумчане! Прошу помочь, т.к. уже не знаю что делать...

Пишу внутрисистемный (ISP) программатор для LPC 2366, и столкнулся с тем, что в процессе прошивки не получается стереть полностью весь флэш, адреса с 0x00 по 0x40 зарезервированы под вектора прерываний. При форматировании всего флэша посредством ISP-команды "E 0 14\r\n" в этом диапазоне остается что-то, все остальное как и положено - FF.

Согласно hex-файлу прошивки, которую я пытаюсь туда записать, в этом диапазоне должны находиться определённые данные, которые туда не записываются.

Вот то что надо записать в формате Intel HEX, адрес предшествует данным.
Прикрепленное изображение


Вот как выглядит флэш после полного форматирования:
Прикрепленное изображение


Вот что я пытаюсь записать из оперативной памяти во флэш по адресу 0x0:
Прикрепленное изображение


Во флэше по указанному адресу это появляется в следующем искаженном виде:
Прикрепленное изображение



Что скажете?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 9 2015, 05:13
Сообщение #2


Гуру
******

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



А я заставил линкер gcc считать контрольную сумму. Убил двух зайцев - нет описанных выше проблем с дополнительной обработкой прошивки и программа работает после загрузки отладчиком (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
KRS
сообщение Apr 9 2015, 09:48
Сообщение #3


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Сергей Борщ @ Apr 9 2015, 08:13) *
А я заставил линкер gcc считать контрольную сумму.

А у Вас названия обработчиков прерываний фиксированные?
Или в скрипте линкера всетаки как то можно получить доступ к данным по определенному адресу...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 9 2015, 11:02
Сообщение #4


Гуру
******

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



Цитата(KRS @ Apr 9 2015, 11:48) *
А у Вас названия обработчиков прерываний фиксированные?
Сейчас посмотрел - это я на Cortex имени LPC считал линкером. И там названия обработчиков да, фиксированные. А на ARM7 вообще не вижу проблемы - там области векторов всегда лежит один и тот же кусок кода, его контрольная сумма - константа, которую можно посчитать вручную и прибить в соответствующее место гвоздями.


--------------------
На любой вопрос даю любой ответ
"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
Сергей Борщ
сообщение Apr 9 2015, 11:19
Сообщение #5


Гуру
******

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



Цитата(Сергей Борщ @ Apr 9 2015, 13:02) *
контрольная сумма - константа, которую можно посчитать вручную и прибить в соответствующее место гвоздями.

Как раз сегодня решаю такую задачу. Вот что получилось:
Код
        .section .vectors,"ax"
        .global _start
        .code 32
_start:
        LDR     PC, reset_addr      // Reset
        LDR     PC, undef_addr      // Undefined instruction
        LDR     PC, swi_addr        // Software interrupt
        LDR     PC, pabort_addr     // Prefetch abort
        LDR     PC, dabort_addr     // Data abort
        .word   0 - (5 * 0xE59FF018 + 0xE51FFFF0 + 0xE59FF010)
        LDR     PC, [PC, #-0xFF0]   // Read vector address from VIC
        LDR     PC, fiq_addr        // FIQ interrupt
reset_addr:
        .word reset_handler
undef_addr:
        .word undef_handler
swi_addr:
        .word swi_handler
pabort_addr:
        .word prefetch_abort_handler
dabort_addr:
        .word data_abort_handler
fiq_addr:
        .word fiq_handler
        .ltorg


Добавлено:
Цитата(lavrik @ Apr 9 2015, 13:09) *
В моем случае я суммирую 18F09FE5 5 раз и получаю 7CB31F79. Если инвертировать то получится 834CE087. Соответственно, в 0x0000 0014 нужно записать 834CE088?

"Машина должна работать, а человек - думать" (принцип IBM). Поручите расчет компилятору. Машина железная, ей считать нетрудно и она никогда не ошибается.


--------------------
На любой вопрос даю любой ответ
"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
lavrik
сообщение Apr 9 2015, 11:37
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-01-15
Пользователь №: 84 635



Цитата(Сергей Борщ @ Apr 9 2015, 14:19) *
"Машина должна работать, а человек - думать" (принцип IBM). Поручите расчет компилятору. Машина железная, ей считать нетрудно и она никогда не ошибается.


Это понятно, что надо автоматизировать это все. Просто хочется сначала понять как это все работает на корню, а потому уже можно и автоматизировать sm.gif

UPD: А обязательно вся прошивка должна писаться за один заход в ISP?

Сообщение отредактировал IgorKossak - Apr 9 2015, 16:48
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- lavrik   LPC 2366 проблема в ISP   Mar 25 2015, 12:38
- - Golikov A.   Уже было тут недавно про не стираемое начало флеши...   Mar 25 2015, 13:57
- - KRS   Цитата(lavrik @ Mar 25 2015, 15:38) Пишу ...   Mar 25 2015, 16:03
- - Golikov A.   ну я так понимаю что он мапит бут ром в начало фле...   Mar 25 2015, 17:02
|- - KRS   Цитата(Golikov A. @ Mar 25 2015, 20:02) н...   Mar 25 2015, 18:13
|- - jcxz   Цитата(KRS @ Mar 26 2015, 00:13) Но это в...   Mar 26 2015, 05:44
|- - KRS   Цитата(jcxz @ Mar 26 2015, 08:44) Что-то ...   Mar 26 2015, 18:57
|- - KRS   Цитата(jcxz @ Mar 26 2015, 08:44) Это-же ...   Mar 26 2015, 20:10
|- - jcxz   Цитата(KRS @ Mar 27 2015, 02:10) Все прог...   Mar 26 2015, 20:17
|- - lavrik   Цитата(jcxz @ Mar 26 2015, 23:17) Ну что-...   Mar 26 2015, 23:16
- - Golikov A.   ну не знаю... мне казалось бут пин зажал, там и ре...   Mar 25 2015, 19:24
- - Golikov A.   Вот и мне так кажется... Единственное что я сейча...   Mar 26 2015, 05:56
|- - Сергей Борщ   Цитата(Golikov A. @ Mar 26 2015, 07:56) Е...   Mar 26 2015, 07:42
|- - Палыч   ТС знает ли о существовании CRP (Code Read Protect...   Mar 26 2015, 07:54
|- - lavrik   Цитата(Палыч @ Mar 26 2015, 10:54) ТС зна...   Mar 26 2015, 11:06
- - Golikov A.   ЦитатаBlank check Не что-то вы обманываете UM1060...   Mar 26 2015, 09:51
|- - Сергей Борщ   Цитата(Golikov A. @ Mar 26 2015, 11:51) Н...   Mar 26 2015, 10:46
- - Golikov A.   чудно однако.... ведь FlashMagic реально сначала ...   Mar 26 2015, 11:07
- - KRS   Кроме того если нужно ускорить прошивку. можно заг...   Mar 26 2015, 20:32
- - KRS   загрузить в ОЗУ, например по адресу 0x40000200 24...   Mar 27 2015, 00:20
|- - jcxz   Цитата(KRS @ Mar 27 2015, 06:20) но тут о...   Mar 28 2015, 04:34
|- - KRS   Цитата(jcxz @ Mar 28 2015, 07:34) На всех...   Mar 29 2015, 20:54
- - lavrik   Спасибо всем огромное! В очередной раз форумча...   Apr 2 2015, 12:13
- - lavrik   Думал что на этом эпопея закончится, ан нет... Но...   Apr 8 2015, 07:41
|- - KRS   Цитата(lavrik @ Apr 8 2015, 10:41) и посл...   Apr 8 2015, 07:45
|- - lavrik   Цитата(KRS @ Apr 8 2015, 10:45) Именно пе...   Apr 8 2015, 08:12
|- - KRS   При записи по 0 адресу: Код uint32_t s; s=...   Apr 8 2015, 08:32
|- - lavrik   Цитата(KRS @ Apr 8 2015, 11:32) При запис...   Apr 8 2015, 08:49
|- - KRS   Цитата(lavrik @ Apr 8 2015, 11:49) пока ч...   Apr 8 2015, 08:58
- - Golikov A.   Надо отпустить ногу бута.   Apr 8 2015, 08:02
|- - lavrik   Цитата(Golikov A. @ Apr 8 2015, 11:02) На...   Apr 8 2015, 08:04
- - KRS   Если контрольная сумма векторов прерываний не посч...   Apr 8 2015, 08:11
- - Golikov A.   а записать ее надо в серединку таблицы прерываний ...   Apr 8 2015, 08:35
- - lavrik   Там же возможна запись из ОЗУ во Flash только блок...   Apr 8 2015, 09:04
|- - KRS   Цитата(lavrik @ Apr 8 2015, 12:04) Там же...   Apr 8 2015, 09:11
|- - jcxz   Цитата(lavrik @ Apr 8 2015, 15:04) Там же...   Apr 8 2015, 09:38
|- - KRS   Цитата(jcxz @ Apr 8 2015, 12:38) В LPC17x...   Apr 8 2015, 09:41
|- - jcxz   Цитата(KRS @ Apr 8 2015, 15:41) Но это то...   Apr 8 2015, 09:51
|- - den_po   Цитата(jcxz @ Apr 8 2015, 14:51) Можно. Е...   Apr 8 2015, 12:35
||- - jcxz   Цитата(den_po @ Apr 8 2015, 18:35) Одно в...   Apr 8 2015, 16:30
||- - den_po   Цитата(jcxz @ Apr 8 2015, 21:30) Писали н...   Apr 9 2015, 03:38
||- - jcxz   Цитата(den_po @ Apr 9 2015, 09:38) Нет, т...   Apr 9 2015, 09:42
|- - KRS   Цитата(jcxz @ Apr 8 2015, 12:51) Можно. Е...   Apr 8 2015, 19:41
|- - jcxz   Цитата(KRS @ Apr 9 2015, 01:41) Только во...   Apr 9 2015, 02:26
- - Golikov A.   В вашей прошивке в начале лежит таблица прерываний...   Apr 8 2015, 09:37
|- - lavrik   Цитата(Golikov A. @ Apr 8 2015, 12:37) В ...   Apr 9 2015, 10:35
|- - KRS   Цитата(lavrik @ Apr 9 2015, 13:35) То ест...   Apr 9 2015, 10:49
|- - lavrik   Цитата(KRS @ Apr 9 2015, 13:49) там выдел...   Apr 9 2015, 11:09
|- - KRS   Цитата(lavrik @ Apr 9 2015, 14:09) В моем...   Apr 9 2015, 13:42
- - Golikov A.   да не в размере дело, а в том что надо поправить 4...   Apr 8 2015, 09:41
- - Golikov A.   так же как нельзя писать в не стертую флэшь (если ...   Apr 8 2015, 09:43
- - Golikov A.   на то место куда уже писали нельзя, хоть как кратн...   Apr 8 2015, 10:36
|- - jcxz   Цитата(Сергей Борщ @ Apr 9 2015, 17:02) А...   Apr 10 2015, 01:51
|- - Сергей Борщ   Цитата(jcxz @ Apr 10 2015, 03:51) но никт...   Apr 10 2015, 05:09
|- - lavrik   Цитата(Сергей Борщ @ Apr 10 2015, 08:09) ...   Apr 10 2015, 06:23
|- - jcxz   Цитата(Сергей Борщ @ Apr 10 2015, 11:09) ...   Apr 10 2015, 09:00
|- - Сергей Борщ   Цитата(jcxz @ Apr 10 2015, 11:00) Использ...   Apr 10 2015, 09:16
- - lavrik   Появился сдвиг! Я сделал следующее: прошил чер...   Apr 9 2015, 12:52
- - Obam   Так как написано в User Manual: "…Criterion ...   Apr 9 2015, 13:20
- - Golikov A.   надо сложить не 5 значений! а всю таблицу вект...   Apr 9 2015, 16:09
|- - lavrik   Цитата(Golikov A. @ Apr 9 2015, 19:09) на...   Apr 9 2015, 20:25
|- - KRS   Цитата(Golikov A. @ Apr 9 2015, 19:09) а ...   Apr 10 2015, 13:01
- - Golikov A.   Цитатаоткуда ж я знал что там Little Endian... sad...   Apr 10 2015, 04:59
- - IgorKossak   Когда я слышу фразу: "... каждый такт на счет...   Apr 10 2015, 09:30
|- - jcxz   Цитата(IgorKossak @ Apr 10 2015, 15:30) К...   Apr 10 2015, 09:38
- - Golikov A.   под инвертировать имел ввиду, конечно, инверсию зн...   Apr 10 2015, 15:33


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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 18:46
Рейтинг@Mail.ru


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