Например TDA7294

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





Текущее время: Вт апр 16, 2024 10:22:41

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


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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Программирование flash памяти в MSP430G2553
СообщениеДобавлено: Пн мар 11, 2019 12:47:27 
Родился

Зарегистрирован: Пн мар 11, 2019 12:21:32
Сообщений: 1
Рейтинг сообщения: 0
Добрый день!
Хочу сохранить в постоянной Flash памяти число int от 0 до 255. Программу написал используя пример библиотеки mspflash.h но после нажатия Reset переменная "counter" не сохраняется. Не совсем понимаю как в Energia работают функции Flash.read и Flash.write.

Вот фрагмент моей программы:

#include "MspFlash.h"
#define flash SEGMENT_D

int pos=0;
int counter=0;
int p=0;

void loop() {

Flash.read(flash+(pos * sizeof(int)), (unsigned char*)&p, sizeof(int));
counter=p;

if (.............) {
counter=++counter;
} else {
counter=--counter;

}

Flash.erase(flash);

Flash.write(flash+(pos * sizeof(int)), (unsigned char*)&counter, sizeof(int));

}


Что я делаю не правильно?
С уважением, Superpanky


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование flash памяти в MSP430G2553
СообщениеДобавлено: Ср мар 24, 2021 12:16:04 
Открыл глаза

Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 50
Рейтинг сообщения: 0
Вот пример кода для чтения и записи во флеш память.
Код:
// Чтение из флеш памяти от adr_start, до adr_end в массив ID_RKU_R
// Значения adr_start и adr_end должны быть кратны 2, и adr_start должно быть меньше adr_end
void Read_FLASH_MEMORY(unsigned int adr_start, unsigned int adr_end)
{
    unsigned short *Flash_ptr = (unsigned short *)adr_start;// Начальный адрес флэш-памяти
    unsigned int d0;
    if ((adr_start < adr_end) && ((adr_end-adr_start) != 1)) // Защита от дурака
    {
        for (d0=0; d0<=(adr_end-adr_start)/2; d0++)
        {
            unsigned int a = adr_start+(d0*2);  // Адрес ячейки памяти = "a"
            *Flash_ptr = a;                     // Указываем на адрес ячейки памяти Flash_ptr откуда нужно читать
            ID_RKU_R[d0] = *Flash_ptr;          // Читаем в "ID_RKU[d0]" данные хранящиеся в ячейке памяти "Flash_ptr"
        }
    }
}

// Запись во флеш память от adr_start, до adr_end массив данных flash_data
// Значения adr_start и adr_end должны быть кратны 2, и adr_start должно быть меньше adr_end
void Write_FLASH_MEMORY(unsigned int adr_start, unsigned int adr_end)
{
    unsigned short *Flash_ptr = (unsigned short *)adr_start;// Начальный адрес флэш-памяти
    unsigned int d0;
    __disable_interrupt();          // Глобальное запрещение прерываний
    if ((adr_start < adr_end) && ((adr_end-adr_start) != 1)) // Защита от дурака
    {
        for (d0=0; d0<=(adr_end-adr_start)/2; d0++)
        {
            FCTL3 = FWKEY;              // Снимаем блокирующий бит
            FCTL1 = FWKEY + ERASE;      // Разрешаем стирание
            *Flash_ptr = 0;             // Фиктивная запись для стирания флеш-сегмента
            FCTL1 = FWKEY + WRT;        // Установить бит WRT для операции записи
            *Flash_ptr = flash_data[d0];// Записываем значение flash_data во флеш память с адресом Flash_ptr
            FCTL1 = FWKEY;              // Сбросить бит записи
            FCTL3 = FWKEY + LOCK;       // Устанавливаем бит блокировки
            ID_RKU_W[d0] = *Flash_ptr;  // Читаем в "ID_RKU[d0]" значение "flash_data" хранящееся в "Flash_ptr" (проверка)
            *Flash_ptr++;
        }
    }
    __enable_interrupt();           // Глобальное разрешение прерываний
}


Добавлено after 2 minutes 16 seconds:
Пример вызова подпрограммы.
Код:
    Read_FLASH_MEMORY(0x8000, 0x8400);
    Write_FLASH_MEMORY(0xA000, 0xA400);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Программирование flash памяти в MSP430G2553
СообщениеДобавлено: Ср мар 24, 2021 23:35:44 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Прикольно.
В MSP430FR достаточно переменной присвоить квалификатор __persistent и всё. Хоть всю FRAM память запомни)) Но есть нюансы с защитой...


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Программирование flash памяти в MSP430G2553
СообщениеДобавлено: Чт мар 25, 2021 13:14:26 
Открыл глаза

Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 50
Рейтинг сообщения: 0
Честно говоря не проверял запись в занятые адреса (например 00001c18, отвечающий за ACP_results в .map файле моего проекта), да и не советую. Лучше пользоваться теми адресами, которые прописаны в .cmd файле, а именно в распределении карты памяти, где прописано сколько и с какого адреса начинается какой либо раздел. (работать лучше в разделе FLASH)


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Программирование flash памяти в MSP430G2553
СообщениеДобавлено: Пн мар 29, 2021 11:17:43 
Открыл глаза

Карма: 3
Рейтинг сообщений: 0
Зарегистрирован: Чт ноя 26, 2020 13:19:49
Сообщений: 50
Рейтинг сообщения: 0
Доброго времени суток, написал небольшую прогу, но работает както не правильно. может кто подскажет в чём ошибка.
Код:
unsigned short *Flash_ptr = (unsigned short *)0x8000;// Начальный адрес флэш-памяти
/**
 * main.c
 */
int main(void)
{
   WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    FCTL3 = FWKEY;              // Снимаем блокирующий бит
    FCTL1 = FWKEY + ERASE;      // Разрешаем стирание
    *Flash_ptr = 0;             // Фиктивная запись для стирания флеш-сегмента
    FCTL1 = FWKEY + WRT;        // Установить бит WRT для операции записи
    *Flash_ptr = 0x4303;// Записываем значение flash_data во флеш память с адресом Flash_ptr (nop)
    *Flash_ptr++;
    *Flash_ptr = 0x1300;// Записываем значение flash_data во флеш память с адресом Flash_ptr (reti)
    FCTL1 = FWKEY;              // Сбросить бит записи
    FCTL3 = FWKEY + LOCK;       // Устанавливаем бит блокировки
//__asm (" MOV.W #0x8000,R15 ");
//__asm (" CALL &R15");
$0x8000:
    ((void(*)() )0x8000)();  // Переход по адресу 0х8000
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    goto $0x8000;


Во флеш записывает всё правильно (в 8000 адрес пишет команду nop, в адрес 8002 - reti), но после ((void(*)() )0x8000)() переходит на адрес 0х0000, и благополучно там висит... Что не так?

Добавлено after 46 minutes 25 seconds:
Нашёл в чём дело. Выполняя команду выхода из адреса 0х8002, происходит переход на адрес 0х0000. Вобщем в адрес 0х8003 нужно записать куда переходить.

Добавлено after 33 minutes 36 seconds:
Нужно было вместо команды RETI (0x1300), ввести команду RETA (0x0110). Тогда выход происходит сразу после выполнения ((void(*)() )0x8000)();


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

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

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


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

Сейчас этот форум просматривают: veso74 и гости: 12


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

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


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