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

 
 
> работа с внутренней флэш, 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
Ответов
Annuta
сообщение Jul 9 2007, 05:27
Сообщение #2


Участник
*

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



Моя переменная
#define EFC_PAGE_SIZE 128
Я просто не совсем может правильно чего понимаю, народ ? Но у меня ж никак не должна затираться прошивка данными...
При попытке поменять в xcl файле адреса на такие /скопировала в аналогичной проге/
Код
//*************************************************************************
// Read-only segments mapped to Flash 256K.
//*************************************************************************
-DROMSTART=00000000
-DROMEND=0003FFFF
//*************************************************************************
// Read/write segments mapped to 64K RAM.
//*************************************************************************
-DRAMSTART=00000000
-DRAMEND=0000FFFF

получаю ошибку...
Fatal Error[e72]: Segment SVC_STACK must be defined in a segment definition option (-Z,
-b or -P)

Чего он ругается !????

Сообщение отредактировал Annuta - Jul 9 2007, 05:28


--------------------
Из комбинации лени и логики - получается программист! /народная мудрость/
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 9 2007, 09:59
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(Annuta @ Jul 9 2007, 11:27) *
Моя переменная
#define EFC_PAGE_SIZE 128

Размер страницы что у SAM7X128 что у SAM7X256 равен 256 байт (согласно даташиту)
Цитата(Annuta @ Jul 9 2007, 11:27) *
При попытке поменять в xcl файле адреса на такие /скопировала в аналогичной проге/

верните прежние значения, просто смотрите куда вы пишете, то есть какой начальный адрес вы передаете в функцию void EFCWrite(u32 adr, u8 *pbuf, u32 Len, u32 NeedReset)
Если вы передадите туда допустим адрес 0х00001000 а размер программы у вас более 4 кб, то собственно все что свыше этих 4 кб будет затерто вашими данными ... Поэтому просто ограничиваете размер флэшки в xlc файле (как тут советовали) и пишете в ту область. Допустим пишете тут
-DROMSTART=00000000
-DROMEND=0002FFFF
(размер программы при этом не может быть более 196607 байт)
и уже в функцию записи передаете адрес 00030000.
И еще: вместо page = (0x00310000)/EFC_PAGE_SIZE;
напишите page = (adr & 0x3FFFF)/EFC_PAGE_SIZE;

Сообщение отредактировал Timofey - Jul 9 2007, 10:11
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
|- - AlexBoy   Цитата(Annuta @ Jul 9 2007, 08:27) Моя пе...   Jul 9 2007, 09:30
- - 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   Какой у Вас MCK? Далее EFC_WritePage: зачем Вы выз...   Jul 12 2007, 11:46
- - 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 Текстовая версия Сейчас: 27th July 2025 - 19:06
Рейтинг@Mail.ru


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