|
STM8S EEPROM надо ли ждать EOP флага после записи 1 байта? |
|
|
|
Jun 22 2017, 11:24
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Мне надо записывать два байта подряд(т.е. 16ти битную переменную) У меня stm8s003, у которого судя по даташиту нет read-while-write (RWW) capability. В документации сказано Цитата Devices without RWW capability: The application stops for the duration of the byte program operation. Это означает, что я могу не проверять EOP флаг? И программировать хоть все 128 байт в цикле? Я пробовал проверять этот флаг и иногда программа на этом цикле ожидания виснет....А иногда проскакивает. Что очень странно. Без цикла ожидания работает, но как-то на душе не спокойно.... В исходниках STDLib от ST ожидания EOP тоже нет, но на душе всё равно не спокойно )))))
--------------------
The truth is out there...
|
|
|
|
|
Jun 26 2017, 09:54
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Хотел на дискавэри для уточнения всех ньюансов еще раз всё это дело испытать а оказалось, что на STM8S105, который там стоит, есть read-while-write (RWW) capability. Загуглил STM8AF52A, с которым у вас был опыт работы и оказалось там тоже RWW есть. Потом как-нибудь именно на 8S003 окончательно разберусь какая задержка после залочки-разлочки нужна и вообще что это было.. Потому как нигде в документации не упоминается ничего похожего. Errata еще надо бы почитать наверно, но что-то терзают меня смутные сомнения, может ложная тревога и я там где-то накосячил при экспериментах.... Add:Нашел! А вот и было такое предчувствие, что что-то тут не чисто... Что где-то не доглядел )))
Эскизы прикрепленных изображений
--------------------
The truth is out there...
|
|
|
|
|
Jun 27 2017, 14:18
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Неа, не проверяют. Я ж туда в первую очередь и полез смотреть как там сделана запись... Только многократное перечитывание даташита спасет )) P.S. А как я тут Independent Watchdog настраивал недавно. Прописал ему в регистры все настройки(с предварительной разлочкой записи, ну всё как положено). Потом включаю ватчдог прописывая в регистр команду Enable. А собака стартует с дефолтными параметрами. Я уже и туда и сюда всё перепроверил, использую же библиотеку STшную фирменную.... А потом в даташите вычитываю ВНЕЗАПНО Цитата Once enabled, the independent watchdog can be configured through the IWDG_PR, and IWDG_RLR registers. Т.е. оказывается сначала надо ENABLE а потом у тебя есть 15ms чтобы успеть его сконфигурить до того как эта собака сработает с дефолтными настройками И это всё указано только в одном предложении и ключевые слова тут Once enabled. Ох и на долго запомню я этот прикол ))))
--------------------
The truth is out there...
|
|
|
|
|
Jun 27 2017, 19:25
|
Знающий
   
Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250

|
SPL не пользуюсь. DUL проверяю, как и пишут в даташите. Потом пишу данные и жду EOP. Все по даташиту. Работает нормально, ничего не зависает. Насчет сторожевого пса: читайте внимательно даташит, а не кривые коды SPL. Тем паче, SPL для STM8 — это ж вообще дикость какая-то! Там же RM'а того — полтысячи страниц всего. Когда мне понадобился сторожевой таймер, взлетело с первой попытки — потому как по даташиту делаю.
|
|
|
|
|
Jun 27 2017, 20:19
|

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

|
Цитата(Эдди @ Jun 28 2017, 00:25)  SPL не пользуюсь. DUL проверяю, как и пишут в даташите. Ну кто ж так проверяет?  Код if(!(FLASH_IAPSR & 0x08)) return 0; По-хорошему, тут нужен цикл. Ваш код работает только за счёт тормознутости sdcc. (Или за счёт того, что разблокировка производится только один раз при старте программы).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 27 2017, 20:34
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата разблокировка производится только один раз при старте программы Так нет же, вроде как тут-же строкой выше анлок Код // unlock memory FLASH_DUKR = EEPROM_KEY1; FLASH_DUKR = EEPROM_KEY2; // check bit DUL=1 in FLASH_IAPSR if(!(FLASH_IAPSR & 0x08)) return 0;
--------------------
The truth is out there...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|