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

 
 
> работа с внутренней флэш, AT91SAM7X256
Annuta
сообщение Jul 6 2007, 11:16
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 26-04-07
Из: Смоленск
Пользователь №: 27 333



Привет! У меня плата на AT91SAM7x256 - первый раз в жизни пытаюсь работать с внутреней флэш ... 07.gif
вот пишу что-то в память
Код
__ramfunc u32 EFC_WritePage(u32 adr, u32 *pbuf)
{
    unsigned int *pflash;
    unsigned int page;
    unsigned int region;
    unsigned int i;
  
  pflash = (unsigned int *)adr;
  page = (0x00310000)/EFC_PAGE_SIZE;
  region = (page/EFC_PagesInTheLockRegion);

  EFC_Init();

    if (AT91C_BASE_MC->MC_FSR & (region << 16)) {
    // lock set, clear it
    AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(50 <<16)) | AT91C_MC_FWS_2FWS;
    AT91C_BASE_MC->MC_FCR = (0x5A << 24) | (region << 8 ) |AT91C_MC_FCMD_UNLOCK;
    }
    while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
    
    for (i = 0; i < EFC_PAGE_SIZE_UINT; i++)
    *(pflash + i ) = *(pbuf + i);
    
    AT91C_BASE_MC->MC_FCR = (0x5A << 24) | (page << 8 ) |AT91C_MC_FCMD_START_PROG;
    while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));

  return 1;
}


__ramfunc void EFCWrite(u32 adr, u8 *pbuf, u32 Len, u32 NeedReset)
{
    u32 l;
    l=0;
    while (l<Len) {
    EFC_WritePage(adr, (u32*)&(pbuf[l]));
    l+=EFC_PAGE_SIZE;
    adr+=EFC_PAGE_SIZE;
    }
}


и кусочек xcl файла

Код
//*************************************************************************
// Read-only segments mapped to Flash 256K.
//*************************************************************************
-DROMSTART=00000040
-DROMEND=00030000
//*************************************************************************
// Read/write segments mapped to RAM.
//*************************************************************************
-DRAMSTART=00200000
-DRAMEND=0020FFFF

При попытке что-то записать из памяти стирается прошивка... то стириется то ли затирается - не мгу понять!... Хотя адреса не перекрещеваются... Не понимаю... ЧЕМ это вызвано! smile3046.gif ... и в xcl написано
"Read-Only" ...это значит что я могу только читать -- что надо прописать чтоб можно было и писать ?
Спасибо!

Сообщение отредактировал Annuta - Jul 6 2007, 11:21


--------------------
Из комбинации лени и логики - получается программист! /народная мудрость/
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dron_Gus
сообщение Jul 12 2007, 11:46
Сообщение #2


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Какой у Вас MCK?
Далее EFC_WritePage: зачем Вы вызываете EFC_Init() и тут же по-новой настраиваете MC другими значениями. При этом учтите:
FMCN: Flash Microsecond Cycle Number
Before writing Non Volatile Memory bits (Lock bits, General Purpose NVM bit and Security bits), this field must be set to the
number of Master Clock cycles in one microsecond.
When writing the rest of the Flash, this field defines the number of Master Clock cycles in 1.5 microseconds. This number
must be rounded up.
Для флеша должно быть в 1.5 раза больше. Проще выразить это через MCK чем использовать прямое значение.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Annuta   работа с внутренней флэш   Jul 6 2007, 11:16
- - Timofey   Цитата(Annuta @ Jul 6 2007, 17:16) По ...   Jul 6 2007, 13:40
- - IV_K   в xcl из области ROM исключите страницы, которые п...   Jul 6 2007, 16:04
|- - Timofey   Цитата(IV_K @ Jul 6 2007, 22:04) в xcl из...   Jul 7 2007, 06:19
- - Annuta   Моя переменная #define EFC_PAGE_SIZE 128 Я просто...   Jul 9 2007, 05:27
|- - AlexBoy   Цитата(Annuta @ Jul 9 2007, 08:27) Моя пе...   Jul 9 2007, 09:30
|- - Timofey   Цитата(Annuta @ Jul 9 2007, 11:27) Моя пе...   Jul 9 2007, 09:59
- - Dron_Gus   Цитата(Annuta @ Jul 9 2007, 09:27) Код//*...   Jul 9 2007, 09:34
- - Annuta   Спасибо!! Вроде пишет - не могу провериить...   Jul 9 2007, 13:42
|- - Timofey   Код__ramfunc u32 EFC_ReadPage(u32 adr, u32 *pb...   Jul 9 2007, 16:07
- - Annuta   Происходят странные вещи!.. моя прога на этой ...   Jul 11 2007, 11:37
|- - Timofey   Цитата(Annuta @ Jul 11 2007, 17:37) Проис...   Jul 12 2007, 08:27
- - Annuta   вот написала по вашему совету прогу сначала. Эх......   Jul 12 2007, 10:51
|- - Сергей Борщ   Цитата(Annuta @ Jul 12 2007, 13:51) Она з...   Jul 12 2007, 12:01
- - Dron_Gus   Отладчик в таких ситуациях может только мешать. Со...   Jul 12 2007, 12:12
- - Annuta   Спасибо, Dron_Gus!... да именно из-за этого пл...   Jul 12 2007, 13:33
|- - AlexBoy   Цитата(Annuta @ Jul 12 2007, 16:33) вот -...   Jul 12 2007, 14:59
- - Timofey   В функцию EFCWrite(); передается адрес 0x0030000 -...   Jul 12 2007, 18:21
|- - AlexBoy   Цитата(Timofey @ Jul 12 2007, 21:21) В фу...   Jul 13 2007, 09:27
|- - Timofey   Цитата(AlexBoy @ Jul 13 2007, 15:27) To A...   Jul 13 2007, 09:36
- - Annuta   Получилось!!! Спасибо БОЛЬШОЕ всем за ...   Jul 13 2007, 10:20
- - Waso   Мне в AT91 нужно менять только одно слово во флеше...   Oct 24 2007, 11:00
|- - Сергей Борщ   Цитата(Waso @ Oct 24 2007, 14:00) Мне в A...   Oct 24 2007, 12:02
|- - Waso   2 Сергей Борщ. Смысл понятен, но реализация в прим...   Oct 25 2007, 03:14
|- - Сергей Борщ   Цитата(Waso @ Oct 25 2007, 06:14) Разве ~...   Oct 25 2007, 07:44
- - _dem   сколько же у вас памяти жрет проект, если вы пишет...   Oct 24 2007, 12:20
|- - Сергей Борщ   Цитата(_dem @ Oct 24 2007, 15:20) скольк...   Oct 24 2007, 15:43
- - Angle   У меня такая проблема не могу записать во внутренн...   Nov 21 2007, 09:10
- - Сергей Борщ   Цитата(Angle @ Nov 21 2007, 11:10) Прогам...   Nov 21 2007, 11:20
- - Angle   Цитата(Сергей Борщ @ Nov 21 2007, 16:20) ...   Nov 21 2007, 11:36
- - Сергей Борщ   Цитата(Angle @ Nov 21 2007, 13:36) А как ...   Nov 21 2007, 12:22


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

 


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


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