Программирование во FLASH микроконтроллера CH32V203C8T6

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Открыл глаза
Сообщения: 75
Зарегистрирован: Чт ноя 26, 2020 13:19:49

Сообщение AlexandrRa »

Доброе время суток всем котам и кошечкам. Столкнулся с проблемой записи во 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. Что я не так делаю? Помогите!!!
Реклама
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

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.

Только какие-то сегменты привели....
Контактная информация:
Реклама
Открыл глаза
Сообщения: 75
Зарегистрирован: Чт ноя 26, 2020 13:19:49

Сообщение AlexandrRa »

Если Вы про это:

Код: Выделить всё

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 работает. проблема в том, что запуск проги происходит согласно параметрам. Т.е. запись заранее известных параметров при перезагрузке вернёт те, которые записали в самом начале (в этом случае смысла записи нет). Мне же нужно, чтоб с разными всегда мог заходить
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Я про то, что всегда надо приводить всю информацию. И даже эта неполная, кто знает, что вы там наменяли внутри функций.
И зачем такое издевательство над write_buf[0]? что-то мешает записать в одну строчку?

Добавлено after 1 minute 43 seconds:
[uquote="AlexandrRa",url="/forum/viewtopic.php?p=4408530#p4408530"]Я же говорю, запись во FLASH работает.[/uquote]
AlexandrRa писал(а): Столкнулся с проблемой записи во FLASH
в общем, определяйтесь, либо работает, либо проблема. Формулируйте вопрос точно, приводите все данные.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 75
Зарегистрирован: Чт ноя 26, 2020 13:19:49

Сообщение AlexandrRa »

Всем спасибо! Проблему решил, правда не знаю правильно или нет. После сохранения данных во FLASH, сделал программный сброс системы и всё заработало как нужно.
Реклама
Ответить

Вернуться в «Разные вопросы по МК»