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

 
 
 
Reply to this topicStart new topic
> EEPROM в STM32L151
Baser
сообщение Dec 8 2017, 10:54
Сообщение #1


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Читаю описание работы с 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"
Но опять никаких подробностей.
Что будет при записи по невыровненному адресу в два слова, где часть байт уже записана, а часть чистые, и в эту чистую часть я командой быстрой записи пишу данные?
А если пишу не быстрой, а обычной командой - остальные байты сотрутся или нет?

Странная документация sad.gif
Go to the top of the page
 
+Quote Post
ohmjke
сообщение Dec 8 2017, 10:57
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Цитата(Baser @ Dec 8 2017, 13:54) *
То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?


Не знаю насчет EEPROM, но FLASH чистая там действительно заполнена нулями.
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 8 2017, 11:32
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

Цитата(Baser @ Dec 8 2017, 13:54) *
1. Пишут, что очищается слово записью по нужному адресу значения 0x00000000
То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?
Нигде в документации прямого указания на это не заметил.

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

Цитата(Baser @ Dec 8 2017, 13:54) *
2. Есть команды для EEPROM очистки слова (4 байта) и двойного слова (8 байт)
и есть туча команд записи от одного байта до восьми байтов с различными вариациями.
При этом при записи одного байта или полуслова (2 байта) все равно должно стираться целое слово (4 байта).
Так зачем эти команды?
Или я не понимаю документацию и можно дозаписывать слово по одному байту?

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

Цитата(Baser @ Dec 8 2017, 13:54) *
Странная документация sad.gif

Бывает laughing.gif
Go to the top of the page
 
+Quote Post
x893
сообщение Dec 8 2017, 11:48
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Жизнь ещё страннее
Почему не взять микросхему и просто сделать что нужно.
Без обсуждений.
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 8 2017, 12:13
Сообщение #5


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(scifi @ Dec 8 2017, 13:32) *
В 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)

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

Цитата(x893 @ Dec 8 2017, 13:48) *
Почему не взять микросхему и просто сделать что нужно.
Без обсуждений.

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

А "Без обсуждений" - вы же начали сразу высказываться, не привнеся никакой полезной информации sm.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 8 2017, 12:15
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Baser @ Dec 8 2017, 15:54) *
Читаю описание работы с EEPROM в STM32L151 и не могу понять некоторых вещей:

1. Пишут, что очищается слово записью по нужному адресу значения 0x00000000
То есть чистая EEPROM и FLASH в серии L1 имеет нулевые значения, а не общепринятые единицы?
Нигде в документации прямого указания на это не заметил.


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

Цитата(Baser @ Dec 8 2017, 15:54) *
2. Есть команды для EEPROM очистки слова (4 байта) и двойного слова (8 байт)


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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 8 2017, 12:45
Сообщение #7


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(AHTOXA @ Dec 8 2017, 14:15) *
Её вообще не надо стирать.

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

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

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

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

Я то уже почти определился, что буду работать исключительно с Word Write.
Просто никак не могу понять, зачем Карл!? все другие режимы.
Go to the top of the page
 
+Quote Post
Obam
сообщение Dec 8 2017, 17:35
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Baser @ Dec 8 2017, 16:45) *
...Просто никак не могу понять, зачем Карл!? все другие режимы.

Потому что умеют wink.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 11 2017, 14:00
Сообщение #9


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(AHTOXA @ Dec 8 2017, 14:15) *
Её вообще не надо стирать. Просто пишите новое значение, и всё. Думаю, все эти их изыски про стирание потому, что они свалили в кучу EEPROM и FLASH. Попытались единообразно описать.

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

Действительно, они свалили в кучу описание работы с EEPROM всего семейства L1, поэтому не слишком было понятно.
Ограничение есть только для чипов Cat.1 с самым малым объемом памяти, там стирать можно только по выровненному слову (4 байта).
Для всех новых серий Cat.2 и выше никаких ограничений вообще нет, можно делать все как для обычной 8-и битной EEPROM.

Я тестил на Cat.3 (STM32L151RC). Стирания как такового нет, просто запись нулей.
Писать можно любые значения поверх любых старых, длина 1, 2, 4 байта, с любым смещением.
Из настроек оказался только один флаг, который задает обязательное стирание, даже когда там нули.

Одна печалька, errata говорит, что не получилось сделать область EEPROM лучше чем остальную FLASH.
Число перезаписей тоже только 100К+
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 04:57
Рейтинг@Mail.ru


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