Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с записью во внутреннюю flash микроконтроллера at91sam7x
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
samou4ka
посмотрел здесь - http://electronix.ru/forum/index.php?showt...hl=flashd_write, но нужного ответа не нашел.
в связи с этим вопрос.
с компа даю команду на чтение внутренней памяти микроконтроллера и прочитанные данные отправляю назад.
CODE
if(cBuffer[0]==20)
{
//unlock memory
error = FLASHD_Unlock(AT91C_IFLASH, AT91C_IFLASH+AT91C_IFLASH_SIZE,0,0);

//address of tube config file
PageAddress = AT91C_IFLASH + AT91C_IFLASH_SIZE - iTubeNumber * AT91C_IFLASH_PAGE_SIZE;
//address with first data
pPageData = (volatile unsigned int*) PageAddress;
//function read memory, send data to PC, add data to array

//read memory
cBuffer[2] = (pPageData[iCntMemory]>>8);
cBuffer[1] = pPageData[iCntMemory];
pBuffer[iCntMemory] = pPageData[iCntMemory];

FLASHD_Lock(PageAddress, PageAddress + iTubeNumber * AT91C_IFLASH_PAGE_SIZE, 0,0);

iCntMemory++;
//send data to PC
while((temp=USART_WriteBuffer(AT91C_BASE_US0, cBuffer, sizeof(cBuffer)))==0);

}

вроде все работает
потом хочу записать данные по команде
CODE
if(cBuffer[0]==15)
{
if((error = FLASHD_Unlock(AT91C_IFLASH, AT91C_IFLASH + AT91C_IFLASH_SIZE , 0, 0))==0)
{
// Performs tests on last page (to avoid overriding existing program).
PageAddress = AT91C_IFLASH + AT91C_IFLASH_SIZE - iTubeNumber * AT91C_IFLASH_PAGE_SIZE;
//pPageData = (volatile unsigned int *) PageAddress;
//------------------------

error = FLASHD_Write(PageAddress, pBuffer, iCnt*4);//AT91C_IFLASH_PAGE_SIZE
//----------------

// Lock page
error = FLASHD_Lock(PageAddress, PageAddress + iTubeNumber * AT91C_IFLASH_PAGE_SIZE, 0, 0);
//---------------------------------------------
}
}

и ничего не пишется
pBuffer наполняю раньше, проверял с ним все в порядке.
комментировал по очереди все функции и оказалось что проблема в flashd_write.
пробовал запретить прерывания от com-порта, т.к. во время записи могли приходить очередные данные с компьютера, но и это не помогло.
может кто подскажет, как можно добиться работоспособности этих функций?
samou4ka
здесь код рабочий
как обычно оказалось, нужно внимательно все делать)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.