|
Запись структуры во флеш. |
|
|
|
Nov 14 2016, 14:01
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Есть структура. Код typedef struct TEST_S { unsigned char start; unsigned int length; char *text; }TEST;
extern TEST tests[MAX_TESTS]; я инициализирую структуру и пытаюсь записать. Код unsigned int TESTER_SaveTest(unsigned int user_page) { unsigned int ret; unsigned int addr; tests[0].start = 0xDA; tests[0].length = 5; tests[0].text = "HELLO"; tests[1].start = 0xDA; tests[1].length = 6; tests[1].text = "WORLD!"; ret = FLASH_PageErase(user_page); if (ret) return ret; addr = 0; ret = FLASH_PageProgram(user_page, addr, (uint8_t *) &tests[0], BUFFER_SIZE_BYTE); if (ret) return ret; addr += (sizeof(tests[0])) + 1; ret = FLASH_PageProgram(user_page, addr, (uint8_t *) &tests[1], BUFFER_SIZE_BYTE); //тут я получаю ошибку - 32. if (ret) return ret; return ret; } Первая запись проходит нормально. Вторая со смещением 13 выдает ошибку 32 - Access error is set in the FSTAT register. Я что то упускаю в логике?
|
|
|
|
|
 |
Ответов
|
Nov 14 2016, 14:43
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(aaarrr @ Nov 14 2016, 20:26)  Для сферической флеш в вакууме? Вангую, требования по выравниванию по строкам. Они в Kinetis так намутили с флеш драйвером! Запись такая. Код FlashProgram(&flashSSDConfig, dest, size, buffer, FlashCommandSequence); Логично предположить что size это размер записываемого массива buffer. Смотрим реализацию CODE uint32_t SIZE_OPTIMIZATION FlashProgram(PFLASH_SSD_CONFIG pSSDConfig, \ uint32_t dest, \ uint32_t size, \ uint8_t* pData, \ pFLASHCOMMANDSEQUENCE pFlashCommandSequence) { uint32_t ret = FTFx_OK; /* return code variable */ uint8_t i; uint32_t temp;
if (size & (PGM_SIZE_BYTE - 0x01U)) { ret = FTFx_ERR_SIZE; } else { /* convert to byte address */ dest = WORD2BYTE(dest); #if (DEBLOCK_SIZE) temp = WORD2BYTE(pSSDConfig->DFlashBlockBase); if((dest >= temp) && (dest < (temp + pSSDConfig->DFlashBlockSize))) { dest = dest - temp + 0x800000U; } else #endif { temp = WORD2BYTE(pSSDConfig->PFlashBlockBase); if((dest >= temp) && (dest < (temp + pSSDConfig->PFlashBlockSize))) { dest -= temp; } else { ret = FTFx_ERR_ACCERR; } } while((size > 0x0U) && (FTFx_OK == ret)) { /* clear RDCOLERR & ACCERR & FPVIOL flag in flash status register. Write 1 to clear*/ temp = pSSDConfig->ftfxRegBase + FTFx_SSD_FSTAT_OFFSET; REG_WRITE(temp, FTFx_SSD_FSTAT_ERROR_BITS); /* passing parameter to the command */ #if (PGM_SIZE_BYTE == FTFx_PHRASE_SIZE) temp = pSSDConfig->ftfxRegBase + FTFx_SSD_FCCOB0_OFFSET; REG_WRITE(temp, FTFx_PROGRAM_PHRASE); #else temp = pSSDConfig->ftfxRegBase + FTFx_SSD_FCCOB0_OFFSET; REG_WRITE(temp, FTFx_PROGRAM_LONGWORD); #endif temp = pSSDConfig->ftfxRegBase + FTFx_SSD_FCCOB1_OFFSET; REG_WRITE(temp, GET_BIT_16_23(dest)); temp = pSSDConfig->ftfxRegBase + FTFx_SSD_FCCOB2_OFFSET; REG_WRITE(temp, GET_BIT_8_15(dest)); temp = pSSDConfig->ftfxRegBase + FTFx_SSD_FCCOB3_OFFSET; REG_WRITE(temp, GET_BIT_0_7(dest));
for (i = 0x0U; i < PGM_SIZE_BYTE; i++) { temp = pSSDConfig->ftfxRegBase + i + 0x08U; REG_WRITE(temp, *(pData + i)); }
/* calling flash command sequence function to execute the command */ ret = pFlashCommandSequence(pSSDConfig);
/* update destination address for next iteration */ dest += PGM_SIZE_BYTE; /* update size for next iteration */ size -= PGM_SIZE_BYTE; /* increment the source address by 1 */ pData += PGM_SIZE_BYTE; } } #if C90TFS_ENABLE_DEBUG /* Enter Debug state if enabled */ if (TRUE == (pSSDConfig->DebugEnable)) { ENTER_DEBUG_MODE; } #endif
return(ret); }
Код /* update size for next iteration */ size -= PGM_SIZE_BYTE; это как? учитывая что Код #define PGM_SIZE_BYTE 0x0008U /* 8 bytes */ то есть размер моей структуры должен быть кратный 8?
Сообщение отредактировал Jenya7 - Nov 14 2016, 14:55
|
|
|
|
Сообщений в этой теме
Jenya7 Запись структуры во флеш. Nov 14 2016, 14:01 aaarrr Что-то вроде. Nov 14 2016, 15:27 Jenya7 Цитата(aaarrr @ Nov 14 2016, 21:27) Что-т... Nov 14 2016, 15:29  aaarrr Цитата(Jenya7 @ Nov 14 2016, 18:29) я воо... Nov 14 2016, 15:33   Jenya7 Цитата(aaarrr @ Nov 14 2016, 21:33) О, ск... Nov 14 2016, 15:35  k155la3 Цитата(Jenya7 @ Nov 14 2016, 18:29) . . .... Nov 15 2016, 07:22   Jenya7 Цитата(k155la3 @ Nov 15 2016, 13:22) Не В... Nov 15 2016, 10:11    k155la3 Цитата(Jenya7 @ Nov 15 2016, 13:11) сериа... Nov 15 2016, 11:21     Jenya7 Цитата(k155la3 @ Nov 15 2016, 17:21) ссыл... Nov 15 2016, 11:58      k155la3 Цитата(Jenya7 @ Nov 15 2016, 15:58) (uint... Nov 15 2016, 13:43       Jenya7 Цитата(k155la3 @ Nov 15 2016, 19:43) Може... Nov 15 2016, 14:09        HardEgor Цитата(Jenya7 @ Nov 15 2016, 21:09) пишет... Nov 15 2016, 14:23         Jenya7 Цитата(HardEgor @ Nov 15 2016, 20:23) Я д... Nov 15 2016, 14:26         k155la3 Цитата(HardEgor @ Nov 15 2016, 17:23) Я д... Nov 15 2016, 14:35          Jenya7 Цитата(k155la3 @ Nov 15 2016, 20:35) А чт... Nov 15 2016, 15:10           HardEgor Цитата(Jenya7 @ Nov 15 2016, 22:10) струк... Nov 15 2016, 15:54            Jenya7 Цитата(HardEgor @ Nov 15 2016, 21:54) Вы ... Nov 15 2016, 16:16             aaarrr Цитата(Jenya7 @ Nov 15 2016, 19:16) ...я ... Nov 15 2016, 16:18              Jenya7 Цитата(aaarrr @ Nov 15 2016, 22:18) Эта с... Nov 15 2016, 16:32             XVR Цитата(Jenya7 @ Nov 15 2016, 19:16) допус... Nov 16 2016, 10:22              Jenya7 Цитата(XVR @ Nov 16 2016, 15:22) Жесть ... Nov 16 2016, 12:49               aaarrr Цитата(Jenya7 @ Nov 16 2016, 15:49) Кроме... Nov 16 2016, 13:06                Jenya7 Цитата(aaarrr @ Nov 16 2016, 18:06) Мне, ... Nov 16 2016, 13:23               k155la3 Цитата(Jenya7 @ Nov 16 2016, 16:49) . . .... Nov 16 2016, 13:41                Jenya7 Цитата(k155la3 @ Nov 16 2016, 18:41) Скол... Nov 16 2016, 13:50 Alex11 Цитатачтобы получить реальную длину я должен приба... Nov 14 2016, 17:45 Jenya7 Цитата(Alex11 @ Nov 14 2016, 23:45) Какой... Nov 15 2016, 06:40 aaarrr Совершенно верно, в два приема. Nov 15 2016, 17:05 toweroff Коллеги, прекратите использовать этот "ньюанс... Nov 15 2016, 19:21 XVR Советую сделать так.
Строки в FLASH упаковывать в... Nov 16 2016, 13:26 HardEgor Цитата(XVR @ Nov 16 2016, 20:26) КодPacke... Nov 16 2016, 13:37  XVR Цитата(HardEgor @ Nov 16 2016, 16:37) А п... Nov 16 2016, 19:47   ViKo Цитата(XVR @ Nov 16 2016, 22:47) Эта форм... Nov 16 2016, 20:02 Jenya7 это интересно. надо попробовать. char buffer[BUF_... Nov 16 2016, 13:36 Jenya7 Тестирую запись.
Создал структуру.
Кодtypedef stru... Nov 17 2016, 08:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|