Перейти к содержанию
    

а записать ее надо в серединку таблицы прерываний:) в адрес 0х14 если от нуля

UPD, не заметил ее там уже пихают в 5 ячейку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При записи по 0 адресу:

        uint32_t s;
        s=((uint32_t*)buf)[0]+
            ((uint32_t*)buf)[1]+
            ((uint32_t*)buf)[2]+
            ((uint32_t*)buf)[3]+
            ((uint32_t*)buf)[4]+
            //((uint32_t*)buf)[5]+ !!skip!!
            ((uint32_t*)buf)[6]+
            ((uint32_t*)buf)[7];
        ((uint32_t*)buf)[5]=-s;

 

пока что не очень понятно....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

пока что не очень понятно....

 

Я не знаю "архитектуру" Вашего программатора, но логично предположить...

что есть функция которая записывает блок флеша, на вход подаются данные и адрес, так вот если адрес = 0, buf - указатель на данные надо перед отправкой данных вставить этот код.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там же возможна запись из ОЗУ во Flash только блоками по 256 байт минимум...и это ограничение от NXP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там же возможна запись из ОЗУ во Flash только блоками по 256 байт минимум...и это ограничение от NXP

Да все равной какой размер! Главное что первый блок будет больше 32 байт и перед передачей его в ОЗУ для записи надо вставить этот код, который заменит одно слово.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В вашей прошивке в начале лежит таблица прерываний, в 0x14 - это 5 ячейка если ее мерить 32 битными словами, должна лежать контрольная сумма этой таблицы, такая что сумма по всей таблице должна давать 0.

 

То есть после того как вы получили файл прошивки, с ним выполняете указанные действия считаете сумму всей таблицы кроме 5 ячейки. И отрицательное значение записываете в 5 ячейку, таким образом сумма по всей таблице станет 0. После этого такую поправленную прошивку пихаете во флэш и все будет!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там же возможна запись из ОЗУ во Flash только блоками по 256 байт минимум...и это ограничение от NXP

В LPC17xx минимум == 16 байт. Скорей всего в LPC23xx так же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да не в размере дело, а в том что надо поправить 4 байта с адреса 0х14 в прошивке, это надо сделать еще до записи всей прошивки, так что абсолютно не важно какими блоками потом ее записывать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В LPC17xx минимум == 16 байт. Скорей всего в LPC23xx так же.

флеш 128 битный с ECC поэтому меньше 16 байт = 128 бит нельзя.

Но это только если Вы умеете сами писать. Через документированное API нельзя! И в LPC17xx тоже

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так же как нельзя писать в не стертую флэшь (если мы конечно хотим верных в ней данных) потому дописать ничего не получиться, надо писать с 1 раза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но это только если Вы умеете сами писать. Через документированное API нельзя! И в LPC17xx тоже

Можно. Если предварительно считать страничку. У меня так даже журналы (с размером записей кратным 16 байт) в эту флешь пишутся.

 

так же как нельзя писать в не стертую флэшь (если мы конечно хотим верных в ней данных) потому дописать ничего не получиться, надо писать с 1 раза.

Можно дописывать. Только элементами выровненными по границам 16-байтных кусочков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на то место куда уже писали нельзя, хоть как кратно...

если тот кто спрашивает приминительно к записи прошивки, сначала запишет ее, а потом поверх попробует записать контрольную сумму большая вероятность что кончится это обломом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно. Если предварительно считать страничку. У меня так даже журналы (с размером записей кратным 16 байт) в эту флешь пишутся.

Одно время столкнулся с проблемой на LPC2368: когда дописывал таким образом, иногда получал случайно запорченные данные по соседству.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одно время столкнулся с проблемой на LPC2368: когда дописывал таким образом, иногда получал случайно запорченные данные по соседству.

Писали невыровненные на 16 байт данные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно. Если предварительно считать страничку.

да в общем можно и не считывать, а просто заполнить FF, кроме нужных 16 байт, может в таком случае и писать быстрее будет.

 

Только вот способ не гарантированный, теоретически NXP может поменять технологию флеша.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...