sigmaN 0 22 июня, 2017 Опубликовано 22 июня, 2017 · Жалоба Мне надо записывать два байта подряд(т.е. 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 тоже нет, но на душе всё равно не спокойно ))))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 22 июня, 2017 Опубликовано 22 июня, 2017 · Жалоба Я проверял, зависаний не было. Работал с STM8S105, STM8AF52Ax. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 22 июня, 2017 Опубликовано 22 июня, 2017 · Жалоба Ощинь странная история. Лаадно, будем тестирвать... Есть дискавэри с S105 устрою более детальный тест Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 23 июня, 2017 Опубликовано 23 июня, 2017 · Жалоба В исходниках STDLib от ST ожидания EOP тоже нет, но на душе всё равно не спокойно ))))) Вспомнил. Я тоже сначала подсмотрел в STDLib и сделал без ожидания. И словил глюки - иногда не успевал записываться не первый байт в последовательности. Я добавил ожидание, и глюки пропали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 23 июня, 2017 Опубликовано 23 июня, 2017 · Жалоба У меня глюки и так и так. Я правда в функции записи снимал и ставил защиту на запись. Если снятие защиты сделать чуть раньше и потом не трогать то вроде без глюков и с ожиданием и без ожидания пишет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 25 июня, 2017 Опубликовано 25 июня, 2017 · Жалоба Оставил ожидание, но с частым снятием/установкой защиты от записи явно присутствуют какие-то проблемы. Функция записи 2х байт вначале проверяла флаг DUL, если он не стоит то разлочивала ипром и писала два байта, после чего сразу залочивала ипром путем записи 0 в DUL. Глючило(незапись некоторых байтов) и иногда подвисало на ожидании EOP именно пока не убрал эту разлочку/залочку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 25 июня, 2017 Опубликовано 25 июня, 2017 · Жалоба А пауза после разлочки/залочки не спасает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 25 июня, 2017 Опубликовано 25 июня, 2017 · Жалоба Не пробовал, должна по идее спасать. Забил я на это дело, у меня указатель на eeprom по которому все модули считывают настройки сделан const, чтобы компилятор бил по рукам при попытках через него что-то туда писать. А там где надо запись идет через другой указатель в строго дозированных кол-вах)) Посчитал это достаточной защитой на данный момент Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 26 июня, 2017 Опубликовано 26 июня, 2017 · Жалоба Хотел на дискавэри для уточнения всех ньюансов еще раз всё это дело испытать а оказалось, что на STM8S105, который там стоит, есть read-while-write (RWW) capability. Загуглил STM8AF52A, с которым у вас был опыт работы и оказалось там тоже RWW есть. Потом как-нибудь именно на 8S003 окончательно разберусь какая задержка после залочки-разлочки нужна и вообще что это было.. Потому как нигде в документации не упоминается ничего похожего. Errata еще надо бы почитать наверно, но что-то терзают меня смутные сомнения, может ложная тревога и я там где-то накосячил при экспериментах.... Add: Нашел! А вот и было такое предчувствие, что что-то тут не чисто... Что где-то не доглядел ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 июня, 2017 Опубликовано 26 июня, 2017 · Жалоба :) Я чего-то такого и ждал. У STM такое часто бывает. Интересно, а в либе своей они проверяют этот DUL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба Неа, не проверяют. Я ж туда в первую очередь и полез смотреть как там сделана запись... Только многократное перечитывание даташита спасет )) 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. Ох и на долго запомню я этот прикол )))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба SPL не пользуюсь. DUL проверяю, как и пишут в даташите. Потом пишу данные и жду EOP. Все по даташиту. Работает нормально, ничего не зависает. Насчет сторожевого пса: читайте внимательно даташит, а не кривые коды SPL. Тем паче, SPL для STM8 — это ж вообще дикость какая-то! Там же RM'а того — полтысячи страниц всего. Когда мне понадобился сторожевой таймер, взлетело с первой попытки — потому как по даташиту делаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба взлетело с первой попытки — потому как по даташиту делаю. Ну я вот немного не дочитал с первого раза.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба SPL не пользуюсь. DUL проверяю, как и пишут в даташите. Ну кто ж так проверяет? :) if(!(FLASH_IAPSR & 0x08)) return 0; По-хорошему, тут нужен цикл. Ваш код работает только за счёт тормознутости sdcc. (Или за счёт того, что разблокировка производится только один раз при старте программы). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба разблокировка производится только один раз при старте программы Так нет же, вроде как тут-же строкой выше анлок // unlock memory FLASH_DUKR = EEPROM_KEY1; FLASH_DUKR = EEPROM_KEY2; // check bit DUL=1 in FLASH_IAPSR if(!(FLASH_IAPSR & 0x08)) return 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться