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

EEPROM в STM32L151

Читаю описание работы с EEPROM в STM32L151 и не могу понять некоторых вещей:

 

1. Пишут, что очищается слово записью по нужному адресу значения 0x00000000

То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?

Нигде в документации прямого указания на это не заметил.

 

2. Есть команды для EEPROM очистки слова (4 байта) и двойного слова (8 байт)

и есть туча команд записи от одного байта до восьми байтов с различными вариациями.

При этом при записи одного байта или полуслова (2 байта) все равно должно стираться целое слово (4 байта).

Так зачем эти команды?

Или я не понимаю документацию и можно дозаписывать слово по одному байту?

 

3. Еще там есть упоминание вскользь о записи по невыровненному адресу, что длительность операции будет больше.

"When programming Data Word or Data Half-word at non-aligned addresses, the write operation may take more than 1 tprog time"

Но опять никаких подробностей.

Что будет при записи по невыровненному адресу в два слова, где часть байт уже записана, а часть чистые, и в эту чистую часть я командой быстрой записи пишу данные?

А если пишу не быстрой, а обычной командой - остальные байты сотрутся или нет?

 

Странная документация :(

 

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


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

То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?

 

Не знаю насчет EEPROM, но FLASH чистая там действительно заполнена нулями.

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


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

Взглянул по диагонали на даташит STM32L151, там флеш и EEPROM сильно машут на то же самое в STM8S.

 

1. Пишут, что очищается слово записью по нужному адресу значения 0x00000000

То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?

Нигде в документации прямого указания на это не заметил.

В STM8S именно так.

 

2. Есть команды для EEPROM очистки слова (4 байта) и двойного слова (8 байт)

и есть туча команд записи от одного байта до восьми байтов с различными вариациями.

При этом при записи одного байта или полуслова (2 байта) все равно должно стираться целое слово (4 байта).

Так зачем эти команды?

Или я не понимаю документацию и можно дозаписывать слово по одному байту?

В STM8S есть операции записи байта или слова (4 байта). При этом сказано, что при записи байта обновляется целое слово (3 байта после обновления не меняют своё значение). Это важно для расчёта числа циклов: у каждого слова износ свой. Кроме того, если операция записи байта прервана (питание, сброс), то мусор будет в целом слове.

 

Странная документация :(

Бывает :laughing:

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


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

Жизнь ещё страннее

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

Без обсуждений.

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


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

В STM8S есть операции записи байта или слова (4 байта). При этом сказано, что при записи байта обновляется целое слово (3 байта после обновления не меняют своё значение).

Вот именно этого для STM32L151 прямо и не говорится.

 

Data EEPROM Fast Byte Write
This operation is used to write Byte to the data EEPROM assuming that the complete word was previously erased.
The time taken for this is 1 tprog.
• Unlock the Data EEPROM and the FLASH_PECR register
• Clear the FTDW bit (FLASH_PECR[8]) assuming that the word is already erased (0x00000000).
• Write a byte to a valid address in the data EEPROM
• The following operations are then performed automatically by the Flash memory interface:
– The Flash memory interface addresses and reads the word to be written to
– A new ECC is calculated for the new byte to write to the memory
– A write operation is immediately executed (the word read by the interface must be 0x00000000 and the FTDW bit must be cleared)

Можно ли из вышеприведенной цитаты понять, что остальные байты ДОЛЖНЫ быт очищены и иначе запись не произойдет?

 

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

Без обсуждений.

Не все можно проверить. Например, можно ли делать дозапись, если она не блокируется аппаратно, и как к этому относиться STM.

 

А "Без обсуждений" - вы же начали сразу высказываться, не привнеся никакой полезной информации :)

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


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

Читаю описание работы с EEPROM в STM32L151 и не могу понять некоторых вещей:

 

1. Пишут, что очищается слово записью по нужному адресу значения 0x00000000

То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?

Нигде в документации прямого указания на это не заметил.

 

Её вообще не надо стирать. Просто пишите новое значение, и всё. Думаю, все эти их изыски про стирание потому, что они свалили в кучу EEPROM и FLASH. Попытались единообразно описать.

 

2. Есть команды для EEPROM очистки слова (4 байта) и двойного слова (8 байт)

 

Что за команды такие?

 

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


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

Её вообще не надо стирать.

Да, есть там варианты и с автостиранием.

 

Что за команды такие?

Ну, не команды, а варианты установки битов в флешь-контроллере, когда он по-разному будет работать.

 

Data EEPROM can be erased and written by:
• Double word
• Word/ Fast word
• Half word / Fast half word
• Byte / Fast byte

Я то уже почти определился, что буду работать исключительно с Word Write.

Просто никак не могу понять, зачем Карл!? все другие режимы.

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


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

...Просто никак не могу понять, зачем Карл!? все другие режимы.

Потому что умеют ;)

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


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

Её вообще не надо стирать. Просто пишите новое значение, и всё. Думаю, все эти их изыски про стирание потому, что они свалили в кучу EEPROM и FLASH. Попытались единообразно описать.

Разобрался, разбирая функции HAL и тестируя на реальной плате.

 

Действительно, они свалили в кучу описание работы с EEPROM всего семейства L1, поэтому не слишком было понятно.

Ограничение есть только для чипов Cat.1 с самым малым объемом памяти, там стирать можно только по выровненному слову (4 байта).

Для всех новых серий Cat.2 и выше никаких ограничений вообще нет, можно делать все как для обычной 8-и битной EEPROM.

 

Я тестил на Cat.3 (STM32L151RC). Стирания как такового нет, просто запись нулей.

Писать можно любые значения поверх любых старых, длина 1, 2, 4 байта, с любым смещением.

Из настроек оказался только один флаг, который задает обязательное стирание, даже когда там нули.

 

Одна печалька, errata говорит, что не получилось сделать область EEPROM лучше чем остальную FLASH.

Число перезаписей тоже только 100К+

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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