|
IAP в LPC17x, запись без стирания - возможно-ли? |
|
|
|
Oct 4 2013, 14:55
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Пытаюсь дописывать в сектор программной flash LPC1758 без предварительного стирания сектора. Исходное состояние области в которую пишу - все 0xFF. Так вот: иногда запись проходит нормально, иногда - записанное не соответствует записываемому (как правило - в каком-либо одном байте). Если предварительно стереть сектор - то всегда всё ок. Перепробовал уже вроде всё, что можно: запрещал прерывания на всю процедуру записи, менял сектора, размеры записываемого сегмента, писал кодом из ОЗУ и flash и т.п. - всё без толку. Вот такой блок (hex): 18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,81,15,3A,18 ,94 даёт сбой каждую 4-ю запись. После проверки получаю что записано: 18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,20,00,81,15,3A,18 ,94 И результат всегда такой. Каждая 4-я запись у меня идёт по адресу, кратному 0x20 (может это как-то влияет). Повторная многократная запись поверх по этим-же адресам этого-же блока не помогает.
Согласно AN11008 с сайта NXP такая запись без стирания возможна. В еррате ничего нет.
Сталкивался-ли кто-нибудь с подобным?
|
|
|
|
|
 |
Ответов
|
Oct 4 2013, 19:07
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(jcxz @ Oct 4 2013, 20:29)  Ясен пень - пишу блоками по 256 (пробовал и по 512). Иначе бы IAP вообще вылетал-бы с ошибкой. Не о тех блоках речь. На каждые строку (16 байт) флеш приходится один байт ECC, поэтому дозапись страницы можно вести исключительно целыми строками. Цитата(jcxz @ Oct 4 2013, 20:29)  Ясно что перед записью своей записи, я определяю границы блока выбранного размера, в который она входит, считываю данные блока в буфер в ОЗУ, копирую туда свою запись, и потом пишу весь блок. Так вот "своя запись" выровнена по границе 16?
|
|
|
|
|
Oct 5 2013, 10:45
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(aaarrr @ Oct 5 2013, 01:07)  Не о тех блоках речь. На каждые строку (16 байт) флеш приходится один байт ECC, поэтому дозапись страницы можно вести исключительно целыми строками. Так вот "своя запись" выровнена по границе 16? Хмм... Нет, она выровнена только на 4. Странно, что нигде в UM нет упоминания про это... Надо будет попробовать. Спасибо за наводку!  Цитата(Axel @ Oct 5 2013, 03:08)  Может у Вас чего не так с таймингом? Что Вы имеете в виду?
|
|
|
|
|
Oct 6 2013, 03:13
|
Местный
  
Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188

|
Цитата(jcxz @ Oct 5 2013, 14:45)  Что Вы имеете в виду? Да собственно ничего кроме настроек регистра FLASHCFG и парметра частоты при вызове функций IAP драйвера
|
|
|
|
Сообщений в этой теме
jcxz IAP в LPC17x, запись без стирания - возможно-ли? Oct 4 2013, 14:55     jcxz SYSCFG.FLASHCFG = (CCLK - 1) / 20000 << 12 |... Oct 6 2013, 15:51      Axel Цитата(jcxz @ Oct 6 2013, 18:51) SYSCFG.F... Oct 6 2013, 18:55 Axel Вполне себе работает. У меня таким образом организ... Oct 4 2013, 21:08 Sanya_kv Та же проблема (В один блок нельзя писать более 1 ... Oct 7 2013, 04:36 KRS Вообще в описании IAP однозначно указано что адрес... Oct 7 2013, 08:35 aaarrr Цитата(KRS @ Oct 7 2013, 12:35) про 16 ба... Oct 7 2013, 08:38  KRS Цитата(aaarrr @ Oct 7 2013, 12:38) Для LP... Oct 7 2013, 08:48   aaarrr Цитата(KRS @ Oct 7 2013, 12:48) а вот в 1... Oct 7 2013, 09:54   jcxz Цитата(KRS @ Oct 7 2013, 14:48) причем и ... Oct 7 2013, 10:03    KRS Цитата(jcxz @ Oct 7 2013, 14:03) Так вот,... Oct 7 2013, 10:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|