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

 
 
 
Reply to this topicStart new topic
> операции IAP и АРМ2388, Не удается запрограммировать flash-память методом IAP
M0HAX
сообщение Mar 28 2012, 07:40
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



Привет всем!
Возникла проблема. Почему-то не программируется flash-память с помощью оперции IAP.
Использую стандартный код
Код
#define IAP_LOCATION 0x7ffffff1

unsigned long iap_command[5];
unsigned long iap_result[3];
...........
iap_entry(iap_command, iap_result); // и др.команды


Чтение версии загрузчика с помощью дает нужный результат,т.е. операция срабатывает.
Например, хочу запрограммировать один 7-й сектор:
Код
  iap_command[0] = 50;
  iap_command[1] = 7;
  iap_command[2] = 7;
  iap_entry(iap_command, iap_result);

  iap_command[0] = 51;
  iap_command[1] = 0x7000;
  iap_command[2] = (unsigned long)RAMbuffer;
  iap_command[3] = 4096;                                                                                                
  iap_command[4] = SYS_GetFsclk()/1000;
  iap_entry(iap_command, iap_result);


Перед выполнением этих операций считываю содержимое сектора 7 и выбрасываю через com-порт на терминал
После выполнения каждой операции на комп отправляется результат операции. Получаю код CMD_SUCCESS = 0,т.е. все хорошо, а
затем считываю вновь содержимое сектора 0x7000. Получаю те же самые нули, что и были до программирования,т.е. сектор не запрограммировался...

Не понимаю, что не так...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 28 2012, 10:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Предварительно стереть не забываете? Разрешить запись не забываете? Запретить прерывания не забываете?
Стирание секторов:
CODE
typedef void (__thumb *iap_entry_typ)(u32 *, u32 *);
#define iap_entry ((iap_entry_typ)0x7FFFFFF1)
__thumb __interwork u32 ClearFlash(uint beginSector, uint endSector)
{
u32 ibuf[5], obuf[3];
ibuf[0] = 50;
ibuf[1] = beginSector;
ibuf[2] = endSector;
iap_entry(ibuf, obuf);
if (!obuf[0]) {
ibuf[0] = 52;
ibuf[3] = CCLK / 1000;
iap_entry(ibuf, obuf);
}
return obuf[0];
}
Go to the top of the page
 
+Quote Post
M0HAX
сообщение Mar 28 2012, 11:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



1. Как я понял, стирать (командой 52) предварительно нет необходимости(но счас попробую), по крайней мере, написано в даташите, что
Цитата
The affected sectors should be prepared first by calling "Prepare Sector for Write Operation" command. The
affected sectors are automatically protected again once the copy command is successfully executed.
Это цитата к команде "IAP Copy RAM to flash command". Т.е. как и показано в начальном посте,сначала выполняю команду 50, потом команду 51.

2. Прерывания запрещал тоже - эффекта не было.

3. "Разрешить запись" - это через CRP? Опять же,возможно, я неправильно понял, но написано,что CRP не влияет на IAP команды.
Код
IAP commands are not affected by the code read protection


-------------------------------
Да,так и есть - после команды 52 запись сработала. Спасибо! Странно,что в даташите не написали,что для записи надо последовательно выполнить 4 команды: 50,52,50,51...

Сообщение отредактировал M0HAX - Mar 28 2012, 12:00
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 29 2012, 01:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(M0HAX @ Mar 28 2012, 17:49) *
Да,так и есть - после команды 52 запись сработала. Спасибо! Странно,что в даташите не написали,что для записи надо последовательно выполнить 4 команды: 50,52,50,51...

По-моему - это очевидно, что перед записью флешку надо предварительно стереть.
Go to the top of the page
 
+Quote Post

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

 


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


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