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

 
 
> Запись структуры во флеш.
Jenya7
сообщение Nov 14 2016, 14:01
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 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.

Я что то упускаю в логике?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Nov 14 2016, 14:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Nov 14 2016, 17:01) *
Я что то упускаю в логике?

Для сферической флеш в вакууме? Вангую, требования по выравниванию по строкам.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Nov 14 2016, 14:43
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 14 2016, 15:03
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Nov 14 2016, 17:43) *
Они в Kinetis так намутили с флеш драйвером!

Может, они и намутили, но и вы вносите свою лепту: в первом сообщении было FLASH_PageProgram, теперь FlashProgram. Какая между ними связь?

Подозраваю, что раз запись идет блоками по 8 байт, то и выравнивание записываемого должно быть соответствующим.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Nov 14 2016, 15:25
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(aaarrr @ Nov 14 2016, 21:03) *
Может, они и намутили, но и вы вносите свою лепту: в первом сообщении было FLASH_PageProgram, теперь FlashProgram. Какая между ними связь?

Подозраваю, что раз запись идет блоками по 8 байт, то и выравнивание записываемого должно быть соответствующим.

это структуру нужно выравнивать? что то вроде #pragma pack(8)?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 10:14
Рейтинг@Mail.ru


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