Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: запись во флешь память
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Freeuser
Контроллер sam7x в паре с кейлом. Сразу скажу, знаю что тема освещалась на форуме и не раз, и сам я перелопатил кучу инфы, и тем не менее. Непонятно как мои данные попадают в этот latch buffer?? Опишите пожалуйста последовательность действий. И какая именно часть программы должна находится в RAM?
DpInRock
Предположим, вы решили продать левую почку и купить новый жесткий диск.
Если вы дадите себе наркоз, то не сможете сделать операцию. Значит, ваши руки и левый глаз должны быть вне вашего тела, чтобы совершить задуманное.

Так и флэш. Во время таких опреаций она под наркозом. Но так как процессор все время чего-нибудь исполняет, то исполнять он должен это что-то вне флэш. То есть, в то время как вы решили вырезать часть флэш, проц должен уйти в РАМ и не возвращаться, пока не привезут из реанимации в палату.
Freeuser
хм..немного странная аналогия rolleyes.gif но понятно. А как поместить мои данные в буфер записи по конкретному адресу?
aaarrr
Цитата(Freeuser @ Jan 29 2010, 14:18) *
Непонятно как мои данные попадают в этот latch buffer?? Опишите пожалуйста последовательность действий.

Цитата
Data to be written are stored in an internal latch buffer. The size of the latch buffer corresponds
to the page size. The latch buffer wraps around within the internal memory area address space
and appears to be repeated by the number of pages in it.
Note: Writing of 8-bit and 16-bit data is not allowed and may lead to unpredictable data corruption.

Это значит, что к буферу можно обратиться по любому выровненному по границе страницы адресу в области флеш.
Писать можно только 32-битные данные.

Цитата(Freeuser @ Jan 29 2010, 14:18) *
И какая именно часть программы должна находится в RAM?

Как минимум команда записи FCR, и следующее за ней ожидание FRDY в FSR.

Цитата(Freeuser @ Jan 29 2010, 16:46) *
А как поместить мои данные в буфер записи по конкретному адресу?

А как поместить данные в любой другой буфер по конкретному адресу? Разницы никакой нет.
DpInRock
Видимо, непонятно то, что буфер как таковой один вообще. Но только обращение к нему по "любому" адресу ставит в соответсвие последущую запись в "любую" область флэша. Типа того, что невозможно записать буфер для двух страниц. Данные в буфере будут от последней по счету записи.
Freeuser
А можно пример какой нибудь?
Aurochs
Цитата(Freeuser @ Feb 1 2010, 09:46) *
А можно пример какой нибудь?

Вот Вам пример, только он для GCC
Код
void  IF_Write_page ( void*  pDest,
                      void*  pSrc )
__attribute__ ( ( section ( ".fast" ) ) );
    
void  IF_Write_page ( void*  pDest,
                      void*  pSrc )
{
    int  i;
    register uint32*  puiDest = pDest;
    register uint32*  puiSrc = pSrc;
                      
    for ( i = 0; i < AT91C_IFLASH_PAGE_SIZE / sizeof ( uint32 ); i++ )
    {
        *puiDest++ = *puiSrc++;
    }
    while ( !( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY ) );
    AT91C_BASE_MC->MC_FCR = 0x5A000000 |
                            ( (uint32)pDest & AT91C_MC_PAGEN ) |
                            AT91C_MC_FCMD_START_PROG;
    while ( !( AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY ) );
}

Для Keil'а нужно наверняка поменять аттрибуты, чтобы этот код выполнялся в RAM.
Freeuser
Спасибо! Буду пробовать.
Сергей Борщ
Цитата(Freeuser @ Jan 29 2010, 13:18) *
знаю что тема освещалась на форуме и не раз,
Да, было дело. Я несколько раз выкладывал свой код, минимально занимающий ОЗУ: Раз, два, три, четыре.
Freeuser
С записью разобрался наконец, спасибо всем за помощь! Теперь стало понятно, как юзать EFC.
И еще один вопросик тут задам: Мне нужно заливать в контроллер новую прошивку через USB. Достаточно ли мне на хосте "разобрать" бинарный файл на байты, отправить их в устройство, контроллер запишет их во флеш. Будет ли эта система работать? Файл скомпилен на адрес, на который я буду его загружать.
aaarrr
Цитата(Freeuser @ Feb 3 2010, 11:03) *
Будет ли эта система работать?

А что, есть какие-то сомнения? Должна работать.
dimka76
Цитата(Freeuser @ Feb 3 2010, 11:03) *
Будет ли эта система работать? Файл скомпилен на адрес, на который я буду его загружать.


Вот вам полны пример загрузчика

BootLoader
Freeuser
Цитата(aaarrr @ Feb 3 2010, 12:25) *
А что, есть какие-то сомнения?

Не то чтобы сомнения, я просто не знал как это сделать. Думал, может, файл бинарный что-нибудь "лишнее" содержит. rolleyes.gif
Цитата(dimka76 @ Feb 3 2010, 12:40) *
Вот вам полны пример загрузчика

Спасибо. Я уже почти написал свой загрузчик...Почти..
uragan90
Кто может расказать доступным языком как работает загрузчик внешней флешь памяти? Процессор LPC2368 связан с AT25F4096 по SPI интерфейсу, есть устойчивое желание заливать bin файлы во флешь через загрузчик процессора, вот и хотел понять механизм. Извените если не туда попал!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.