реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Сохранение данных во флэш, lpc 23xx
xRFx
сообщение Jun 1 2012, 04:59
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 23-03-12
Пользователь №: 70 955



Нужно в определенный момент времени сохранить данные во внутреннюю флэш память. Насколько понял каким-то образом следует использовать IAP, но как что-то непонятно. Не могли бы подсказать? biggrin.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 1 2012, 05:46
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



CODE
    // (NXP IAP) Status Codes
    typedef enum
    {
        CMD_SUCCESS,
        INVALID_CMD,
        SRC_ADDR_ERROR,
        DST_ADDR_ERROR,
        SRC_ADDR_NOT_MAPPED,
        DST_ADDR_NOT_MAPPED,
        COUNT_ERROR,
        INVALID_SECTOR,
        SECTOR_NOT_BLANK,
        SECTOR_NOT_PREPARED,
        COMPARE_ERROR,
        BUSY,
        PARAM_ERROR,
        ADDR_ERROR,
        ADDR_NOT_MAPPED,
        CMD_LOCKED,
        INVALID_CODE,
        INVALID_BAUD_RATE,
        INVALID_STOP_BIT,
        CODE_READ_PROT_ENABLED,
        MAX_ERROR
    } iap_status_t;

    typedef enum
    {
        PREPARE = 50,
        COPY,
        ERASE,
        BLANK_CHECK,
        GET_PART_ID,
        GET_BOOT_VER,
        COMPARE,
        REINVOKE_ISP,
        READ_UID,
        SIZE_ALIGN = 0xFFFFFFFF
    } iap_cmd_code_t;

    typedef struct
    {
        iap_cmd_code_t  Code;
        uint32_t        Param[4];
    } iap_command_t;

    typedef struct
    {
        iap_status_t    Status;
        uint32_t        Result[4];
    } iap_result_t;

    void (* const IAP)(iap_command_t *params, iap_result_t *result) = (void(*)(iap_command_t *params, iap_result_t *result))0x1fff1ff1;


iap_status_t iap_erase (uint_fast8_t start_sector, uint_fast8_t end_sector)
{
    iap_command_t   Command;
    iap_result_t    Result;

    Command.Code = PREPARE;
    Command.Param[0] = start_sector;
    Command.Param[1] = end_sector;

    IAP(&Command, &Result);

    if (Result.Status == CMD_SUCCESS)
    {
        Command.Code = ERASE;
        Command.Param[0] = start_sector;
        Command.Param[1] = end_sector;
        Command.Param[2] = SYS_CLK_FREQ / 1000;
        IAP(&Command, &Result);
    }
    return Result.Status;
}
Это функция стирания. Остальные нужные вам допишите по образу и подобию самостоятельно. Не забывайте запрещать прерывания на время работы этих функций.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
xRFx
сообщение Jun 1 2012, 06:09
Сообщение #3





Группа: Новичок
Сообщений: 9
Регистрация: 23-03-12
Пользователь №: 70 955



ого, огромное спасибо, с остальными разберусь)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 19:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016