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

 
 
> IAP в LPC17x, запись без стирания - возможно-ли?
jcxz
сообщение Oct 4 2013, 14:55
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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 такая запись без стирания возможна. В еррате ничего нет.

Сталкивался-ли кто-нибудь с подобным?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Oct 4 2013, 15:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Дозапись возможна, но только блоками, размер которых кратен 16 байтам. По крайней мере, для LPC13xx так. В мануале на 17xx вопрос обошли стороной почему-то...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 4 2013, 16:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Ясен пень - пишу блоками по 256 (пробовал и по 512). Иначе бы IAP вообще вылетал-бы с ошибкой.
И в UM на 17x не обошли это стороной - чётко указаны возможные размеры блоков для записи:
------------------------------------------------------------------------------------------
Param0(DST): Destination flash address where data bytes are to be written. This
address should be a 256 byte boundary.
Param1(SRC): Source RAM address from which data bytes are to be read. This
address should be a word boundary.
Param2: Number of bytes to be written. Should be 256 | 512 | 1024 | 4096.
------------------------------------------------------------------------------------------

Ясно что перед записью своей записи, я определяю границы блока выбранного размера, в который она входит, считываю данные блока в буфер в ОЗУ,
копирую туда свою запись, и потом пишу весь блок.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 4 2013, 19:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 5 2013, 10:45
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Oct 5 2013, 01:07) *
Не о тех блоках речь. На каждые строку (16 байт) флеш приходится один байт ECC, поэтому дозапись страницы можно вести исключительно целыми строками.
Так вот "своя запись" выровнена по границе 16?

Хмм... Нет, она выровнена только на 4.
Странно, что нигде в UM нет упоминания про это... Надо будет попробовать. Спасибо за наводку! beer.gif

Цитата(Axel @ Oct 5 2013, 03:08) *
Может у Вас чего не так с таймингом?

Что Вы имеете в виду?
Go to the top of the page
 
+Quote Post
Axel
сообщение Oct 6 2013, 03:13
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(jcxz @ Oct 5 2013, 14:45) *
Что Вы имеете в виду?

Да собственно ничего кроме настроек регистра FLASHCFG и парметра частоты при вызове функций IAP драйвера
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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