Jump to content

    

STM8S EEPROM надо ли ждать EOP флага после записи 1 байта?

Мне надо записывать два байта подряд(т.е. 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 тоже нет, но на душе всё равно не спокойно )))))

Share this post


Link to post
Share on other sites

Я проверял, зависаний не было. Работал с STM8S105, STM8AF52Ax.

 

Share this post


Link to post
Share on other sites

Ощинь странная история. Лаадно, будем тестирвать... Есть дискавэри с S105 устрою более детальный тест

Share this post


Link to post
Share on other sites
В исходниках STDLib от ST ожидания EOP тоже нет, но на душе всё равно не спокойно )))))

Вспомнил. Я тоже сначала подсмотрел в STDLib и сделал без ожидания. И словил глюки - иногда не успевал записываться не первый байт в последовательности. Я добавил ожидание, и глюки пропали.

Share this post


Link to post
Share on other sites

У меня глюки и так и так. Я правда в функции записи снимал и ставил защиту на запись. Если снятие защиты сделать чуть раньше и потом не трогать то вроде без глюков и с ожиданием и без ожидания пишет.

Share this post


Link to post
Share on other sites

Оставил ожидание, но с частым снятием/установкой защиты от записи явно присутствуют какие-то проблемы.

Функция записи 2х байт вначале проверяла флаг DUL, если он не стоит то разлочивала ипром и писала два байта, после чего сразу залочивала ипром путем записи 0 в DUL.

Глючило(незапись некоторых байтов) и иногда подвисало на ожидании EOP именно пока не убрал эту разлочку/залочку.

Share this post


Link to post
Share on other sites

А пауза после разлочки/залочки не спасает?

Share this post


Link to post
Share on other sites

Не пробовал, должна по идее спасать. Забил я на это дело, у меня указатель на eeprom по которому все модули считывают настройки сделан const, чтобы компилятор бил по рукам при попытках через него что-то туда писать. А там где надо запись идет через другой указатель в строго дозированных кол-вах)) Посчитал это достаточной защитой на данный момент

Share this post


Link to post
Share on other sites

Хотел на дискавэри для уточнения всех ньюансов еще раз всё это дело испытать

а оказалось, что на STM8S105, который там стоит, есть read-while-write (RWW) capability. Загуглил STM8AF52A, с которым у вас был опыт работы и оказалось там тоже RWW есть.

 

Потом как-нибудь именно на 8S003 окончательно разберусь какая задержка после залочки-разлочки нужна и вообще что это было.. Потому как нигде в документации не упоминается ничего похожего. Errata еще надо бы почитать наверно, но что-то терзают меня смутные сомнения, может ложная тревога и я там где-то накосячил при экспериментах....

 

Add:

Нашел!

А вот и было такое предчувствие, что что-то тут не чисто... Что где-то не доглядел )))

post-35751-1498470716_thumb.jpg

Share this post


Link to post
Share on other sites

:) Я чего-то такого и ждал. У STM такое часто бывает.

Интересно, а в либе своей они проверяют этот DUL?

Share this post


Link to post
Share on other sites

Неа, не проверяют. Я ж туда в первую очередь и полез смотреть как там сделана запись...

Только многократное перечитывание даташита спасет ))

 

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. Ох и на долго запомню я этот прикол ))))

 

 

Share this post


Link to post
Share on other sites

SPL не пользуюсь. DUL проверяю, как и пишут в даташите. Потом пишу данные и жду EOP. Все по даташиту. Работает нормально, ничего не зависает.

 

Насчет сторожевого пса: читайте внимательно даташит, а не кривые коды SPL. Тем паче, SPL для STM8 — это ж вообще дикость какая-то! Там же RM'а того — полтысячи страниц всего.

Когда мне понадобился сторожевой таймер, взлетело с первой попытки — потому как по даташиту делаю.

Share this post


Link to post
Share on other sites
взлетело с первой попытки — потому как по даташиту делаю.
Ну я вот немного не дочитал с первого раза....

Share this post


Link to post
Share on other sites
SPL не пользуюсь. DUL проверяю, как и пишут в даташите.

Ну кто ж так проверяет? :)

    if(!(FLASH_IAPSR & 0x08))
        return 0;

По-хорошему, тут нужен цикл. Ваш код работает только за счёт тормознутости sdcc. (Или за счёт того, что разблокировка производится только один раз при старте программы).

Share this post


Link to post
Share on other sites
разблокировка производится только один раз при старте программы

Так нет же, вроде как тут-же строкой выше анлок

// unlock memory
    FLASH_DUKR = EEPROM_KEY1;
    FLASH_DUKR = EEPROM_KEY2;
    // check bit DUL=1 in FLASH_IAPSR
    if(!(FLASH_IAPSR & 0x08))
             return 0;

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
Sign in to follow this