Например TDA7294

Форум РадиоКот • Просмотр темы - Программирование во FLASH микроконтроллера CH32V203C8T6
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср янв 28, 2026 17:27:01

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Программирование во FLASH микроконтроллера CH32V203C8T6
СообщениеДобавлено: Сб апр 29, 2023 14:21:35 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 75
Рейтинг сообщения: 0
Доброе время суток всем котам и кошечкам. Столкнулся с проблемой записи во FLASH память микроконтроллера CH32V203C8T6.
Задача стоит такая. Производится запись во FLASH память некоторые параметры и при следующем включении запуск программы должен быть с этими же параметрами. Делаю это так:
1. В линке указываю секцию для параметров ".mySegment 0x00005000 : {KEEP(*(.mySection))}"
2. В проге указываю адрес FLASH где хранятся параметры и задаю первоначальные параметры
Код:
#define FLASH_ADDR   ((uint32_t)0x08005000)

const uint8_t Flash_Par[256] __attribute__((section(".mySection"))) = {
      0xFA,
      0xFF,
      0xFF,
      0xFF,
      0xFD,
};

В общем как ведёт себя прога. Если не менять параметры, то работает нормально. При изменении параметров (записи во FLASH ), всё записывает, в отладчике вижу что по адресу записал нормально, всё работает. А теперь и сама проблема. После перезагрузки (снял питание, потом подал), по адресу во FLASH записано 0xFF. Что я не так делаю? Помогите!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование во FLASH микроконтроллера CH32V203C8T6
СообщениеДобавлено: Сб апр 29, 2023 14:34:54 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
1) Write KEY1 = 0x45670123 to the FLASH_KEYR register (must operate KEY1 first);
2) Write KEY2 = 0xCDEF89AB to the FLASH_KEYR register (must operate KEY2 secondly).

ну и вообще, Вы ни слова не сказали о действиях, типа:
1) Check the LOCK bit in the FLASH_CTLR register. If it is 1, you need to perform the "Release Flash Memory Lock" operation.
2) Set the PG bit in the FLASH_CTLR register to ‘1’ to enable the standard programming mode.
3) Write the half word to be programmed to the designated flash memory address (even address).
4) When the BYS bit changes to '0' or the EOP bit in the FLASH_STATR register to be '1', it indicates the end of programming. Clear the EOP bit to 0.
5) Check the FLASH_STATR register to see if there is an error, or read the programming address data for verification.
6) To continue programming, you can repeat steps 3-5, end programming and clear the PG bit to 0.

Только какие-то сегменты привели....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование во FLASH микроконтроллера CH32V203C8T6
СообщениеДобавлено: Сб апр 29, 2023 14:46:43 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 75
Рейтинг сообщения: 0
Если Вы про это:
Код:
void Saving_Flash(void)
{
    __disable_irq();
    uint32_t write_buf[64]= {0xFFFFFFFF};
    write_buf[0] = Par.Addr;
    write_buf[0] = (write_buf[0] << 8) + Par.Serial_0;
    write_buf[0] = (write_buf[0] << 16) + Par.Serial_1;
    write_buf[0] = (write_buf[0] << 24) + Par.Serial_2;
    write_buf[1] = R3_CRC_Init;

    FLASH_Unlock_Fast();

    FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP |FLASH_FLAG_WRPRTERR);
    FLASH_ErasePage_Fast(FLASH_ADDR);
    FLASH_ProgramPage_Fast(FLASH_ADDR, write_buf);

    FLASH_Lock_Fast();

    __enable_irq();
}


То тут всё работает. Основная задача чтобы прога запускалась с новыми параметрами, а она их затирает, точнее обнуляет (записывает 0xFF).
Я же говорю, запись во FLASH работает. проблема в том, что запуск проги происходит согласно параметрам. Т.е. запись заранее известных параметров при перезагрузке вернёт те, которые записали в самом начале (в этом случае смысла записи нет). Мне же нужно, чтоб с разными всегда мог заходить


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование во FLASH микроконтроллера CH32V203C8T6
СообщениеДобавлено: Сб апр 29, 2023 15:06:13 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Я про то, что всегда надо приводить всю информацию. И даже эта неполная, кто знает, что вы там наменяли внутри функций.
И зачем такое издевательство над write_buf[0]? что-то мешает записать в одну строчку?

Добавлено after 1 minute 43 seconds:
Я же говорю, запись во FLASH работает.

AlexandrRa писал(а):
Столкнулся с проблемой записи во FLASH

в общем, определяйтесь, либо работает, либо проблема. Формулируйте вопрос точно, приводите все данные.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Программирование во FLASH микроконтроллера CH32V203C8T6
СообщениеДобавлено: Вт май 02, 2023 10:23:21 
Открыл глаза

Карма: 3
Рейтинг сообщений: 9
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 75
Рейтинг сообщения: 0
Всем спасибо! Проблему решил, правда не знаю правильно или нет. После сохранения данных во FLASH, сделал программный сброс системы и всё заработало как нужно.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y