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

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


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

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



Цитата(Annuta @ Jul 9 2007, 09:27) *
Код
//*************************************************************************
// 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)

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


Ругается т.к. Вы ему РАМ урезали до 64 Кб. А стек обычно лежит в конце РАМы, а теперь там неопределенная память... Надеюсь понятно выразил. smile.gif



Вот кусов моего бутлоадера под at91sam7x256 может поможет



Код
/*
********************************************************************************
*************************
*                                               AT91_PageWrite
********************************************************************************
*************************
*                         Writers len page to flash
*                           Addr - start sector num
*                           pBuff - data to write
*                           len - page count to write
*                         Return:
*                           >0 - bytes flashed
*                           -1 - outside flash adr.
********************************************************************************
*************************
*/

__ramfunc int AT91_PageWrite(unsigned int Addr, const char *pBuff, unsigned int len)
  {
  unsigned int *pSource;
  unsigned int *pDest;
  unsigned int i;
  unsigned int Page;

  pSource = (unsigned int*) pBuff;
  pDest = (unsigned int*) (AT91C_IFLASH_PAGE_SIZE * Addr + AT91C_IFLASH);
  Page = Addr;
  while (Page < Addr + len)
    {
    i = 0;
    while (i < AT91C_IFLASH_PAGE_SIZE)
      {
      *pDest = *pSource;
      pDest++;
      pSource++;
      i += 4;
      }
    AT91C_BASE_MC->MC_FCR |= AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | ((Page << 8) & AT91C_MC_PAGEN);
    while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
    Page++;
    }
  return (len * AT91C_IFLASH_PAGE_SIZE);
  }




/*
********************************************************************************
*************************
*                                     flash init
********************************************************************************
*************************
*/

void AT91_FlashInit()
  {
  AT91C_BASE_MC->MC_FMR = (((MCK*2/1000000)<< 16) & AT91C_MC_FMCN) | AT91C_MC_FWS_1FWS;
  AT91C_BASE_MC->MC_FMR = ((100 <<16)&(AT91C_MC_FMCN)) | AT91C_MC_FWS_1FWS;
  while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
  }




Тут главное правильно проинициализировать регистры MC, особенно задержки.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
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
- - 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 Текстовая версия Сейчас: 28th July 2025 - 08:56
Рейтинг@Mail.ru


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