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

 
 
> Проблемы с записью/считыванием во/из Flash, Коряво пишутся или считываются данные
Redaer
сообщение Nov 1 2006, 15:14
Сообщение #1


Участник
*

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



Проблема состоит в том, что по уарту приходят данные и записываются в буфер, который я пытаюсь записать во флеш и, соответственно, считать из флеша.

Так вот записываю я одни данные, а считываются другие, вернее, происходит какая-то странная подмена одних байтов другими. К примеру(все в шестнадцатиричном виде):



| Записываю | Считываю |

| 0F | F0 |

| EA | 57 |

| FE | 7F |

и т.п.



Вот функции, которыми пользуюсь для записи, считывани во и из flash

Код
  

__ramfunc void EFC_Init(void)
{
  while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
  AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN)&(100 << 16)) | AT91C_MC_FWS_1FWS;
  while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
}




Код


__ramfunc unsigned int EFC_WritePage(unsigned int adr, unsigned int *pbuf)
{
  unsigned int *pflash;
  unsigned int page;
  unsigned int region;
  unsigned int i;

  pflash = (unsigned int *)adr;
  page = (adr & 0x3FFFF) / 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++)
    if (pbuf[i] != 0) {
      *(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 TestEFC(unsigned int adr) {

  AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_US1);
  AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);



  while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
  EFC_WritePage(0x100000 | adr, (unsigned int*)tryInt);



  AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
  AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);




Код
__ramfunc ReadFromAddress(unsigned int address) {
  AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_US1);
  AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);



    while (!(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY));
    EFC_ReadPage(address, buff_tx);

    while(!(AT91F_US_TxReady(AT91C_BASE_US1)));
    AT91F_US_Put(buff_tx, EFC_PAGE_SIZE);


  AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
  AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);

  COM1->US_TPR = (unsigned char)&buff_tx[0];
  COM1->US_TCR = 0;

}




Прогаю sam7s256 в iar.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Redaer   Проблемы с записью/считыванием во/из Flash   Nov 1 2006, 15:14
- - Edmundo   Цитата(Redaer @ Nov 1 2006, 18:14) ... Би...   Nov 1 2006, 15:43
|- - Redaer   Ха! Действительно, как не заметил... Если пос...   Nov 1 2006, 20:09
|- - Edmundo   Цитата(Redaer @ Nov 1 2006, 23:09) Получа...   Nov 1 2006, 20:27
|- - Timofey   Я впринципе пишу также, у меня все нормально, не в...   Nov 2 2006, 12:12
|- - Redaer   Цитата(Edmundo @ Nov 1 2006, 23:27) Цитат...   Nov 2 2006, 14:00
|- - Edmundo   Цитата(Redaer @ Nov 2 2006, 17:00) если п...   Nov 2 2006, 14:10
- - Redaer   Может быть... В общем, просто реверс в проге, кото...   Nov 2 2006, 18:43
|- - Edmundo   Цитата(Redaer @ Nov 2 2006, 21:43) Может ...   Nov 2 2006, 21:07
|- - Alex03   Цитата(Edmundo @ Nov 3 2006, 02:07) Я в с...   Nov 3 2006, 03:56
|- - Edmundo   Цитата(Alex03 @ Nov 3 2006, 06:56) А что ...   Nov 3 2006, 05:08
- - Redaer   Я реверсию битов сделал Вот ещё вопрос, когда, во...   Nov 3 2006, 07:19
|- - Edmundo   Цитата(Redaer @ Nov 3 2006, 10:19) Вот ещ...   Nov 4 2006, 15:58
- - vmp   Посмотри внимательно, ты случайно не ставишь бит M...   Nov 3 2006, 07:28
- - Redaer   2vmp, MSBF в нуле... 2Edmundo, как я понял, ре...   Nov 14 2006, 12:48
- - SpiritDance   Похоже проблема с настройками таймингов флеш КодA...   Nov 14 2006, 14:58
- - Redaer   SpiritDance, да че-то все равно не хотит...   Nov 15 2006, 14:32
- - Redaer   Чтобы не открывать новую тему... считываю содерж...   Nov 21 2006, 17:04


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

 


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


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