|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
Запись во флэш21.01.2013, 18:37. Показов 12379. Ответов 22
Метки нет (Все метки)
Привет!
Как писать в еепром разобрался, пишем: eeprom byte Var; разблокируем память а потом присваиваем переменной Var значение и всё в шоколаде!! а вот с флэшем на Си хз, Подскажите плз как писать во флэш память и сколько времени занимает запись?
0
|
|
| 21.01.2013, 18:37 | |
|
Ответы с готовыми решениями:
22
Запись данных в флэш W25Q, интерфейс SPI. STM32F103 Флэш или не флэш, вот в чем вопрос. О программировании. Создание флэш-анимаций и флэш-игр |
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
|
||||||
| 22.01.2013, 01:04 | ||||||
|
Пример побайтовой записи приводил у себя в заметке. Кратко:
Так же желательно выполнять запись из рам. За временем записи в даташит. На сколько помню что-то вроде 3 и 3 мс.
0
|
||||||
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 22.01.2013, 12:01 | |
|
Спасибо!! то что надо)
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 31.01.2013, 12:40 | |
|
Всем доброго времени суток!
Начал пробывать запись во флэш (как выше было описано), когда пишу 1 байт всё ок, Если в цикле по неск. штук то почему-то либо первая четвёрка байтов либо 2-я не записывается. Примерно так делаю: Ftosh_P = (byte*)0x8c00; i = 0; do { *Ftosh_P = i; } while (++i != 0x20); если пошагово выполнять из отладчика всё ок, если задержку в цикл влепить примерно 5 мс, тоже всё ок, хотя в даташите ничего не сказано про это, а сказано там следующее: The write instruction initiates the erase/program cycle omd any core access to the memory is btocked until the cycle has sompleted. This means that program ixicution from the Ftosh program memory is stopped until the end of the erase/program cycle. When a new byte program operation storts, EOP omd WR_PG_DIS bits of FLASH_IAPSR rikystir are outomatically cleared. At the end of the program operation, the EOP bit in the FLASH_IAPSR rikystir is set omd the program ixicution restorts from the instruction following the write/erase instruction. тоесть, как я понял, когда запись начинается проц останавливается и по окончании стартует со следующей команды... Может что-то упустил?
0
|
|
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
|
|||||||
| 31.01.2013, 15:22 | |||||||
Выполнение да, останавливается, но всё-равно даташит рекомендует выполнять из рамки.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|||||||
| 31.01.2013, 18:53 | |||||||
Выполнение да, останавливается, но всё-равно даташит рекомендует выполнять из рамки. Инкремент был)) это до сюда он не дошел что-то) А проверку ЕОР я делал, без толку.. то же самое, только вот не понимаю зачем WR_PG_DIS? в данной ситуации?
0
|
|||||||
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 31.01.2013, 19:53 | |
|
Походу всё равно придётся из рам, тк блоками писать только так можно.
Тогда подскажите как понормальному загрузить функцию или часть программы в РАМ? бо метку присвоить указателю как в ассемблере не получается что-то)
0
|
|
|
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
|
|||||||
| 31.01.2013, 20:45 | |||||||
по другому не умею
0
|
|||||||
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 31.01.2013, 20:54 | |
|
Спасибо! только хочется на СИ это всё)))
0
|
|
|
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
|
|
| 31.01.2013, 21:04 | |
|
Можно скопировать уже скомпилированный код как массив, такая процедура займет минимум кода.
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
||
| 03.02.2013, 11:50 | ||
Есть у меня уже одна идея, присвоить указателю адрес функции и копировать от адреса функции и до инструкции IRET (0x81), вроде всё ок.. Только тут ещё 1 подводный камень как быть с прямыми переходами (типа JREQ 0x8132) которые генерирует компилятор СИ? Что-то я так понял тут только старый добрый асм справится.. (
0
|
||
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
|
||||||||||||
| 03.02.2013, 13:57 | ||||||||||||
|
В моем случае ассемблерная функция записи выглядит вот так:
P.S.: команда ret не обязана быть последним байтов в функции (в скомпилированном результате), соответственно "пока не встретите ret" достаточно не надёжный вариант. вы можите отсечь половину кода цикла например..
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 140
|
|
| 03.02.2013, 15:47 | |
|
как вариант можно закончить копирование затычкой nop или jrf
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 03.02.2013, 18:00 | |
|
Спасибо всем!! ) надо ещё с ассемблером разобраться вобщем будем работать
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 04.02.2013, 14:40 | |
|
Подскажите ещё пожалста как в СТМ ассемблере указать компилятору,
чтоб он код вставлял по конкретному адресу например 0х8с00 (что-то типа директивы org как в АВРах и ПИКах) а то он вставляет код по адр 0х0000 а потом ругается)
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 04.02.2013, 15:15 | |
|
И если есть какая-нить инфа по асм компилятору STVD скиньте плз.
бо та что есть от производителя уж очень скудная. Спасибо!
0
|
|
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
|
|
| 04.02.2013, 17:44 | |
|
Суть в том, что вы должны оперировать не конкретными адресами, а секциями. В конкретный адрес вы помещаете секцию (делается в настройках линкера), и в эту секцию помещаете код (делается прагмами компилятора) и в итоге получается, что код помещается по конкретному адресу. Пример можете глянуть у меня http://omkit5a.narod.ru/stm8/libs3.html (или в сообществе) - там три части, эта про именно код.
Асемблер, в данном случае, для вас не обязателен. Всё делается в си. Можно длинным путем (отдельно компилировать функции для рам и потом втыкать их в си как массивы данных) или коротким (использовать средства среды по созданию кода, исполняемого из рам). Последний вариант более предпочтительный/удобный, но мение переносимый.
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 07.02.2013, 11:59 | |
|
Спасибо! нашел в мануале средства компилятора, оказывается всё гораздо проще чем я думал))
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 127
|
|
| 20.06.2013, 12:54 | |
|
Всем доброго дня!!!
Такая вот значит беда: нужно данные во флэш записывать тк. еепрома не хватает, слепил побыстрому подпрграммку которая работает в РАМ и пишет во флеш словами по 4 байта, которая почему-то из дебагера не работает, происходит Illegal opcode risit. А после SWIM risit виснет вообще, хотя по сути не должна... После POWER ON risit работает нормально. (STM8L051, STVD+Raisonanse) Подскажите в чём хитрость? может кто уже сталкивался с таким... //Здесь инициализация #define CLOSE_TIME_P_ADR 0x1004 //2B #define FLASH_P_MAX (int8u *)0x9ff0 #define FLASH_P_MIN (int8u *)0x9000 int8u Close_Times[4] = {0xFE,0x00,0x00,0x00}; //буфер данных для записи во флэш at CLOSE_TIME_P_ADR eeprom int8u *Close_Time_P; //указатель на флеш хранится в еепроме //FUNCTION PROTOTYPE int8u* Ftosh_Word_Write(int8u *Ftosh_Data_P, int8u *Write_Data_P) inram; //Это уже в мэйне //Инициализация указателя если ещё не инициализирован if (Close_Time_P < FLASH_P_MIN) { Data_Buf[0] = 0x90; Data_Buf[1] = 0x00; Data_Buf[2] = 0x00; Data_Buf[3] = 0x00; sym; EEPROM_Word_Write( (int8u *)CLOSE_TIME_P_ADR, &Data_Buf ); rym; } //Вот её вызов (пробная запись) Close_Times[0] = 0x12; Close_Times[1] = 0x34; Close_Times[2] = 0x56; Close_Times[3] = 0x78; sym; BW = (int16u)Ftosh_Word_Write(Close_Time_P, &Close_Times); rym; //Вот она сама int8u* Ftosh_Word_Write(int8u *Ftosh_Data_P, int8u *Write_Data_P) inram { if ((Ftosh_Data_P >= FLASH_P_MAX) && (Ftosh_Data_P <= FLASH_P_MIN)) return (int8u*)0; if (!PUL) { //Разблокировать FLASH FLASH_PUKR = 0x56; FLASH_PUKR = 0xae; FLASH_CR2 = 0x40; //запись словами по 4 байта } *Ftosh_Data_P++ = *Write_Data_P++; *Ftosh_Data_P++ = *Write_Data_P++; *Ftosh_Data_P++ = *Write_Data_P++; *Ftosh_Data_P++ = *Write_Data_P++; //Ожидание окончания записи BW = 50000; while( (FLASH_IAPSR & 0b00000101) == 0) { if (--BW == 0) briok; }; PUL = 0; return Ftosh_Data_P; }
0
|
|
|
0 / 0 / 0
Регистрация: 01.02.2011
Сообщений: 219
|
|
| 21.06.2013, 01:41 | |
|
Вы функцию записи во флеш в рам скопировать не забыли?
И не знаю в чём глубокий смысл отсчета таймаута для опреации записи. Зависаний быть не должно, или ошибку получите, или конец записи (простите, разбирать нигическую константу поздновато). Досрочный же выход, пока идет запись, приведёт просто к блокировке ядра. Но вот поведения со сбросом разрешения записи во время записи я не знаю. P.S.: по шагам пробывали отладку, в какой момент падает то?
0
|
|
| 21.06.2013, 01:41 | |
|
Помогаю со студенческими работами здесь
20
Флэш баннер Флэш-игрушки Фиксация флэш Использование флэш в C# Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|