Golikov 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба а записать ее надо в серединку таблицы прерываний:) в адрес 0х14 если от нуля UPD, не заметил ее там уже пихают в 5 ячейку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lavrik 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба При записи по 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; пока что не очень понятно.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба пока что не очень понятно.... Я не знаю "архитектуру" Вашего программатора, но логично предположить... что есть функция которая записывает блок флеша, на вход подаются данные и адрес, так вот если адрес = 0, buf - указатель на данные надо перед отправкой данных вставить этот код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lavrik 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Там же возможна запись из ОЗУ во Flash только блоками по 256 байт минимум...и это ограничение от NXP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Там же возможна запись из ОЗУ во Flash только блоками по 256 байт минимум...и это ограничение от NXP Да все равной какой размер! Главное что первый блок будет больше 32 байт и перед передачей его в ОЗУ для записи надо вставить этот код, который заменит одно слово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба В вашей прошивке в начале лежит таблица прерываний, в 0x14 - это 5 ячейка если ее мерить 32 битными словами, должна лежать контрольная сумма этой таблицы, такая что сумма по всей таблице должна давать 0. То есть после того как вы получили файл прошивки, с ним выполняете указанные действия считаете сумму всей таблицы кроме 5 ячейки. И отрицательное значение записываете в 5 ячейку, таким образом сумма по всей таблице станет 0. После этого такую поправленную прошивку пихаете во флэш и все будет! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Там же возможна запись из ОЗУ во Flash только блоками по 256 байт минимум...и это ограничение от NXP В LPC17xx минимум == 16 байт. Скорей всего в LPC23xx так же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба да не в размере дело, а в том что надо поправить 4 байта с адреса 0х14 в прошивке, это надо сделать еще до записи всей прошивки, так что абсолютно не важно какими блоками потом ее записывать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба В LPC17xx минимум == 16 байт. Скорей всего в LPC23xx так же. флеш 128 битный с ECC поэтому меньше 16 байт = 128 бит нельзя. Но это только если Вы умеете сами писать. Через документированное API нельзя! И в LPC17xx тоже Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба так же как нельзя писать в не стертую флэшь (если мы конечно хотим верных в ней данных) потому дописать ничего не получиться, надо писать с 1 раза. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Но это только если Вы умеете сами писать. Через документированное API нельзя! И в LPC17xx тоже Можно. Если предварительно считать страничку. У меня так даже журналы (с размером записей кратным 16 байт) в эту флешь пишутся. так же как нельзя писать в не стертую флэшь (если мы конечно хотим верных в ней данных) потому дописать ничего не получиться, надо писать с 1 раза. Можно дописывать. Только элементами выровненными по границам 16-байтных кусочков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба на то место куда уже писали нельзя, хоть как кратно... если тот кто спрашивает приминительно к записи прошивки, сначала запишет ее, а потом поверх попробует записать контрольную сумму большая вероятность что кончится это обломом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
den_po 0 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Можно. Если предварительно считать страничку. У меня так даже журналы (с размером записей кратным 16 байт) в эту флешь пишутся. Одно время столкнулся с проблемой на LPC2368: когда дописывал таким образом, иногда получал случайно запорченные данные по соседству. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Одно время столкнулся с проблемой на LPC2368: когда дописывал таким образом, иногда получал случайно запорченные данные по соседству. Писали невыровненные на 16 байт данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 8 апреля, 2015 Опубликовано 8 апреля, 2015 · Жалоба Можно. Если предварительно считать страничку. да в общем можно и не считывать, а просто заполнить FF, кроме нужных 16 байт, может в таком случае и писать быстрее будет. Только вот способ не гарантированный, теоретически NXP может поменять технологию флеша. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться