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

 
 
> Никак не пойму как работае IAP, Никак не пойму как работае IAP
Metallist64
сообщение Jun 14 2011, 08:36
Сообщение #1


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

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Добрый день уважаемый ALL!
Использую LPC2367 + Keil+RL. Встал вопрос обновления прошивки.
Планирую записывать ее во внешнюю флэшку. Затем читать и программировать механизмом IAP.
Проблема в следующем: не въеду как работает этот IAP.
Понял, что есть область адресов для программы, есть кокой-то загрузчик. Но не понимаю как осуществляется переход между ними.
Кто сталкивался, прошу помощи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Metallist64
сообщение Jun 16 2011, 10:32
Сообщение #2


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

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Цитата
Функции, модифицирующие Flash, следует расположить в ОЗУ, чтобы не было конфликтов и зависаний при одновременной модификации Flash и выборки из нее кодов команд или данных ..


На сколько я понимаю физически флэш память одна. Она просто логически разделена(судя по карте памяти) на разелы BOOT и скажем так пользовательский код?

Сам код, который будет обновлять флэш будет находиться в области зарузчика ? И писать пользовательский код туда нельзя. Судя по карте памяти в нем есть как ROM так FLASH области?

Таким образом общий объем памяти складывается из = BOOT ROM + BOOT FLASH + USER CODE FLASH ?

Опять таки, насколько я понял, что для LPC2367 объем BOOT области = 8кб. И писать тудо ничего ненадо? Там лежат именно те самые функции IAP, я должен только использовать их, вызывая и передавая аргументы?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 19 2011, 12:21
Сообщение #3


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Metallist64 @ Jun 16 2011, 13:32) *
На сколько я понимаю физически флэш память одна. Она просто логически разделена(судя по карте памяти) на разелы BOOT и скажем так пользовательский код?

Сам код, который будет обновлять флэш будет находиться в области зарузчика ? И писать пользовательский код туда нельзя. Судя по карте памяти в нем есть как ROM так FLASH области?

Таким образом общий объем памяти складывается из = BOOT ROM + BOOT FLASH + USER CODE FLASH ?

Опять таки, насколько я понял, что для LPC2367 объем BOOT области = 8кб. И писать тудо ничего ненадо? Там лежат именно те самые функции IAP, я должен только использовать их, вызывая и передавая аргументы?


FLASH одна и имеет линейное адресное пространство от и до.
Вы можете выделить под Ваш загрузчик скажем первые 8к (2 первых сектора по 4к, если их будет мало добавите сколько нужно - для lpc23хх нет разграничений flash на boot не boot области как у атмег). В этой области разместите код загрузчика который будет каким-либо образом принимать прошивку (по uart или как сделано у меня 122к зашифрованной прошивки хранятся во внешней flash-памяти). Код загрузчика анализирует наличие прошивки, закидывает в буффер скажем 4к блок прошивки приложения, из IAP вызывает процедуру подготовки соотв. сектора, процедуру стирания и потом процедуру записи. Там по сути всё настолько просто что работает с первого раза (скажем у меня за полдня получилось полностью освоить код работы с IAP и написать загрузчик для lpc2368).

CODE
//-----------------------------------------
//стирание выбранного сектора
unsigned int eraseSector(unsigned int SECTOR)
{
unsigned int status=0;

//---------------------------------------
//подготовка сектора
status = iapSelectSector(SECTOR, SECTOR);
if(status != IAP_CMD_SUCCESS)
{
return 0; //сбой подготовки
}
//---------------------------------------


//---------------------------------------
//стирание сектора
__disable_interrupt();
status = iapEraseSector(SECTOR, SECTOR);
__enable_interrupt();

if(status != IAP_CMD_SUCCESS)
{
return 0; //сбой стирания
}
else
{
return 1; //стирание OK
}
//---------------------------------------
}
//-----------------------------------------

//-----------------------------------------
//запись вектора
unsigned int writeSector(unsigned int* pData, unsigned int SECTOR, unsigned int addr, unsigned int size)
{
unsigned int status=0;

//---------------------------------------
//подготовка сектора
status = iapSelectSector(SECTOR, SECTOR);
if(status != IAP_CMD_SUCCESS)
{
return 0; //сбой подготовки
}
//---------------------------------------

//---------------------------------------
//запись сектора
__disable_interrupt();
status = iapRamToFlash( addr, (unsigned int) pData, size);
__enable_interrupt();
if(status != IAP_CMD_SUCCESS)
{
return 0; //сбой записи
}
else
{
return 1; //запись OK
}
//---------------------------------------

}
//-----------------------


Сообщение отредактировал mempfis_ - Jun 19 2011, 12:23
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Metallist64   Никак не пойму как работае IAP   Jun 14 2011, 08:36
- - kovigor   Цитата(Metallist64 @ Jun 14 2011, 11:36) ...   Jun 14 2011, 09:26
|- - Metallist64   ЦитатаВызываются функции загрузчика через указател...   Jun 14 2011, 10:13
|- - kovigor   Цитата(Metallist64 @ Jun 14 2011, 13:13) ...   Jun 14 2011, 10:26
|- - Metallist64   Цитата(kovigor @ Jun 14 2011, 14:26) 1. И...   Jun 14 2011, 11:29
|- - kovigor   Цитата(Metallist64 @ Jun 14 2011, 14:29) ...   Jun 14 2011, 11:52
- - Metallist64   Большое спасибо за пример и пояснение. С функциями...   Jun 20 2011, 06:29
|- - mempfis_   Цитата(Metallist64 @ Jun 20 2011, 09:29) ...   Jun 20 2011, 16:34
- - Metallist64   Большое спасибо! Пойду разбираться!   Jun 21 2011, 05:54
- - Lexy_one   Здраствуйте я прочитал топик... вроде большынство ...   Jul 11 2011, 11:34
|- - kovigor   Цитата(Lexy_one @ Jul 11 2011, 14:34) Здр...   Jul 12 2011, 08:26
- - skripach   ЦитатаИли можно коду загрузчика работать из флеш? ...   Jul 12 2011, 08:43
- - Lexy_one   И еще пара вопросиков 1) допустим у меня приложен...   Jul 12 2011, 10:40
- - Lexy_one   И еще подскажите как корректно перейти из основно...   Jul 13 2011, 09:08


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

 


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


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