Jump to content

    

PIC16F886 запись во Flash

Понадобилось тут для старого чипа PIC16F886 соорудить ПП перезаписи программного флэша.
Даташит вот.
Смотрю раздел 10 (стр. 110).
На стр. 117 нарисована красивая картинка (а ранее про это говорится в тексте).
В принципе, всё вроде бы понятно: грузим страницу по 8 слов в буфер, при последнем из восьми происходит автоматическая запись.
Т.е. стандартный алгоритм страничной записи.
Но везде говорят, что при этом стирается блок из 16 слов.
Если бы говорили про 16 байт, я бы понял, а так что-то недоумеваю, как записывать-то?
Приведённые экзамплы что-то тоже никакой ясности не внесли. Там на выбор и 8 слов и 16.

Share this post


Link to post
Share on other sites

Там четко написано:

Если  стираем -  то  сразу блок  16 слов

Если  пишем то  по  8  слов 

Они не  обязаны быть равны. 

Если  стерли - пишем два раза. 

И это не  только  в этом PIC  ,  в остальных еще запутанней..

 

Share this post


Link to post
Share on other sites
В 19.06.2019 в 22:23, Driver_GV сказал:

Там четко написано

Если бы было чётко, никто вопросов не задавал. :yes3:

В 19.06.2019 в 22:23, Driver_GV сказал:

Если  стерли - пишем два раза

Этот вывод, конечно, напрашивается, но всё же, это Ваше предположение, или практика?

Share this post


Link to post
Share on other sites
On 6/19/2019 at 10:23 PM, Driver_GV said:

Там четко написано:

Если  стираем -  то  сразу блок  16 слов

Если  пишем то  по  8  слов 

Они не  обязаны быть равны. 

Проблема в том, что в этом МК НЕТ РЕЖИМА СТИРАНИЯ. Стирание происходит автоматически после загрузки 8-го слова флеша. 

И вот тут и возникает вопрос о том, как совместить стирание в 16-ти слов с записью 8-ми.

Share this post


Link to post
Share on other sites

Писал  на нем код  лет  10 назад .  Тоже долго  разбирался. 

По  памяти :

1 - Пишем блок  8  байт .  Стираем блок  16 байт . Адрес начала блока должен  быть  выровнен  (4 последних бита = 0 )

2 - Пишем старший  блок  8  байт . Адрес начала блока должен  быть  выровнен  (3 последних бита = 0 )

Дополнительно  https://www.microchip.com/forums/m332715.aspx

И прочтите  раздел  PROGRAM FLASH MEMORY WRITE в этом документе  http://ww1.microchip.com/downloads/en/DeviceDoc/40001305B.pdf

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

Ну я ему так и написал в ЛС на Радиокоте. Это следует из здравого смысла. )))

Share this post


Link to post
Share on other sites
В 21.06.2019 в 10:52, Driver_GV сказал:

И прочтите  раздел  PROGRAM FLASH MEMORY WRITE в этом документе

О, гран мерси! Это и требовалось. :good2:

Но это же надо, куда запихнули. Почему бы в даташите было не указать... :unknw:

В 22.06.2019 в 10:13, my504 сказал:

я ему так и написал

Марк, не лукавьте.

Не совсем так. :this:

А здравый смысл, не всегда соответствует документации.

Share this post


Link to post
Share on other sites
On 6/24/2019 at 7:20 PM, Dmitry Dubrovenko said:

Не совсем так. :this:

Совершенно так:

Quote

...Скорее всего, стирание происходит только при прошивке первой половины блока стирания...

Сравним с документом:

Quote

The first block written to a row erases the entire row. Consecutive block writes to the same row will not cause an additional  row erase.

Есть расхождения? Ну разве только в том, что последовательность записи половинок может быть любой. Для использования в бутлоадере совершенно не принципиально.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now