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

 
 
 
Reply to this topicStart new topic
> запись во флешь память
Freeuser
сообщение Jan 29 2010, 11:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



Контроллер sam7x в паре с кейлом. Сразу скажу, знаю что тема освещалась на форуме и не раз, и сам я перелопатил кучу инфы, и тем не менее. Непонятно как мои данные попадают в этот latch buffer?? Опишите пожалуйста последовательность действий. И какая именно часть программы должна находится в RAM?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 29 2010, 13:32
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



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

Так и флэш. Во время таких опреаций она под наркозом. Но так как процессор все время чего-нибудь исполняет, то исполнять он должен это что-то вне флэш. То есть, в то время как вы решили вырезать часть флэш, проц должен уйти в РАМ и не возвращаться, пока не привезут из реанимации в палату.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Freeuser
сообщение Jan 29 2010, 13:46
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



хм..немного странная аналогия rolleyes.gif но понятно. А как поместить мои данные в буфер записи по конкретному адресу?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 29 2010, 14:31
Сообщение #4


Гуру
******

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



Цитата(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) *
А как поместить мои данные в буфер записи по конкретному адресу?

А как поместить данные в любой другой буфер по конкретному адресу? Разницы никакой нет.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jan 29 2010, 14:45
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Видимо, непонятно то, что буфер как таковой один вообще. Но только обращение к нему по "любому" адресу ставит в соответсвие последущую запись в "любую" область флэша. Типа того, что невозможно записать буфер для двух страниц. Данные в буфере будут от последней по счету записи.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Freeuser
сообщение Feb 1 2010, 07:46
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



А можно пример какой нибудь?
Go to the top of the page
 
+Quote Post
Aurochs
сообщение Feb 1 2010, 08:34
Сообщение #7


Ортодокс
***

Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775



Цитата(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.
Go to the top of the page
 
+Quote Post
Freeuser
сообщение Feb 2 2010, 07:12
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



Спасибо! Буду пробовать.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2010, 09:38
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Freeuser @ Jan 29 2010, 13:18) *
знаю что тема освещалась на форуме и не раз,
Да, было дело. Я несколько раз выкладывал свой код, минимально занимающий ОЗУ: Раз, два, три, четыре.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Freeuser
сообщение Feb 3 2010, 08:03
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



С записью разобрался наконец, спасибо всем за помощь! Теперь стало понятно, как юзать EFC.
И еще один вопросик тут задам: Мне нужно заливать в контроллер новую прошивку через USB. Достаточно ли мне на хосте "разобрать" бинарный файл на байты, отправить их в устройство, контроллер запишет их во флеш. Будет ли эта система работать? Файл скомпилен на адрес, на который я буду его загружать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 3 2010, 09:25
Сообщение #11


Гуру
******

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



Цитата(Freeuser @ Feb 3 2010, 11:03) *
Будет ли эта система работать?

А что, есть какие-то сомнения? Должна работать.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Feb 3 2010, 09:40
Сообщение #12


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



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


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

BootLoader


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Freeuser
сообщение Feb 4 2010, 12:58
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718



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

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

Спасибо. Я уже почти написал свой загрузчик...Почти..
Go to the top of the page
 
+Quote Post
uragan90
сообщение Feb 7 2010, 09:19
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Кто может расказать доступным языком как работает загрузчик внешней флешь памяти? Процессор LPC2368 связан с AT25F4096 по SPI интерфейсу, есть устойчивое желание заливать bin файлы во флешь через загрузчик процессора, вот и хотел понять механизм. Извените если не туда попал!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:44
Рейтинг@Mail.ru


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