Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохранение данных во флэш
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
xRFx
Нужно в определенный момент времени сохранить данные во внутреннюю флэш память. Насколько понял каким-то образом следует использовать IAP, но как что-то непонятно. Не могли бы подсказать? biggrin.gif
Сергей Борщ
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;
}
Это функция стирания. Остальные нужные вам допишите по образу и подобию самостоятельно. Не забывайте запрещать прерывания на время работы этих функций.
xRFx
ого, огромное спасибо, с остальными разберусь)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.