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

 
 
> как работать с IAP?
cornflyer
сообщение Jan 28 2009, 14:26
Сообщение #1


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

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Кто-нибудь научился работать с флеш-памятью LPC2148 через IAP?
Пока я лучше и проще выхода не нашел как поставить внешний i2c eeprom....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bigarmer
сообщение Feb 7 2009, 07:32
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 52
Регистрация: 5-12-08
Пользователь №: 42 221



CODE


===========IAP.C=============



#include "IAP.h"

#define IAP_CLK Fcclk

#define IAP_LOCATION 0x7FFFFFF1
#define iap_entry(a, cool.gif ((void (*)())(IAP_LOCATION))(a, cool.gif

unsigned long command[5] = {0,0,0,0,0};
unsigned long result[3]= {0,0,0};


/*************************************************************************
* Function Name: IAP_PrepareSec
* Parameters: unsigned long StartSecNum -- Start Sector Number
* unsigned long EndSecNum -- End Sector Number
* Return: unsigned long -- Status Code
*
* Description: This command must be executed before executing "Copy RAM to Flash" or
* "Erase Sector(s)" command.
*
*************************************************************************/
unsigned long IAP_PrepareSec (unsigned long StartSecNum, unsigned long EndSecNum)
{
if (EndSecNum < StartSecNum)
return IAP_STA_INVALD_PARAM;

command[0] = IAP_CMD_PrepareSec;
command[1] = StartSecNum;
command[2] = EndSecNum;
iap_entry(command, result);

return result[0];
}

/*************************************************************************
* Function Name: IAP_CopyRAMToFlash
* Parameters: unsigned long dst -- Destination Flash address, should be a 256 byte boundary.
* unsigned long src -- Source RAM address, should be a word boundary
* unsigned long number -- 256 | 512 |1024 |4096
* Return: unsigned long -- Status Code
*
* Description: This command is used to program the flash memory.
*
*************************************************************************/
unsigned long IAP_CopyRAMToFlash (unsigned long dst, unsigned long src,
unsigned long number)
{
command[0] = IAP_CMD_CopyRAMToFlash;
command[1] = dst;
command[2] = src;
command[3] = number;
command[4] = IAP_CLK / 1000; // Fcclk in KHz
iap_entry(command, result);

return result[0];
}


/*************************************************************************
* Function Name: IAP_EraseSec
* Parameters: unsigned long StartSecNum -- Start Sector Number
* unsigned long EndSecNum -- End Sector Number
* Return: unsigned long -- Status Code
*
* Description: This command is used to erase a sector or multiple sectors of on-chip Flash
* memory.
*
*************************************************************************/
unsigned long IAP_EraseSec (unsigned long StartSecNum, unsigned long EndSecNum)
{
if (EndSecNum < StartSecNum)
return IAP_STA_INVALD_PARAM;

command[0] = IAP_CMD_EraseSec;
command[1] = StartSecNum;
command[2] = EndSecNum;
command[3] = IAP_CLK / 1000;
iap_entry(command, result);

return result[0];
}

/*************************************************************************
* Function Name: IAP_BlankChkSec
* Parameters: unsigned long StartSecNum -- Start Sector Number
* unsigned long EndSecNum -- End Sector Number
* Return: unsigned long -- Status Code
*
* Description: This command is used to blank check a sector or mutilple sectors of on-chip
* Flash memory.
*
*************************************************************************/
unsigned long IAP_BlankChkSec (unsigned long StartSecNum, unsigned long EndSecNum,
unsigned long * pResult)
{
if (EndSecNum < StartSecNum)
return IAP_STA_INVALD_PARAM;

command[0] = IAP_CMD_BlankChkSec;
command[1] = StartSecNum;
command[2] = EndSecNum;

iap_entry(command, result);

if (result[0] == IAP_STA_SECTOR_NOT_BLANK)
{
*pResult = result[0];
*(pResult+1) = result[1];
}

return result[0];
}

/*************************************************************************
* Function Name: IAP_ReadParID
* Parameters: unsigned long * PartID
* Return: unsigned long -- Status Code
*
* Description: This command is used to read the part identification number.
*
*************************************************************************/
unsigned long IAP_ReadParID (unsigned long * PartID)
{

command[0] = IAP_CMD_ReadParID;
iap_entry(command, result);
*PartID = result[1];

return result[0];
}

/*************************************************************************
* Function Name: IAP_ReadBootVer
* Parameters: char * MajorVer
* char * MinorVer
* Return: unsigned long -- Status Code
*
* Description: This command is used to read the boot code version number.
*
*************************************************************************/
unsigned long IAP_ReadBootVer (unsigned long * MajorVer, unsigned long * MinorVer)
{
command[0] = IAP_CMD_ReadBootVer;
iap_entry(command, result);
*MajorVer = (result[1] & 0xff00)>>8;
*MinorVer = result[1] & 0xff;

return result[0];
}

/*************************************************************************
* Function Name: IAP_Compare
* Parameters: unsigned long dst -- Destination Flash address
* unsigned long src -- Source RAM address
* unsigned long number -- Should be in mutilple of 4
* Return: unsigned long -- Status Code
*
* Description: This command is used to compary the memory contents at two locations.
*
* NOTE: Compary result may not be correct when source or destination address contains
* any of the first 64 bytes starting from address zero. First 64 bytes can be re-mapped
* to RAM.
*
*************************************************************************/
unsigned long IAP_Compare (unsigned long dst, unsigned long src,
unsigned long number, unsigned long *offset)
{
command[0] = IAP_CMD_Compare;
command[1] = dst;
command[2] = src;
command[3] = number;
iap_entry(command, result);

if (result[0] == IAP_STA_COMPARE_ERROR)
*offset = result[1];

return result[0];
}

void IAP_ReinvokeISP(void)
{
command[0] = IAP_CMD_REINVOKEISP;
iap_entry(command, result);;
}

=====================================
===========IAP.H=============
#ifndef __IAP_H
#define __IAP_H

/* IAP Command */
#define IAP_CMD_PrepareSec 50 //select sector
#define IAP_CMD_CopyRAMToFlash 51 //copy data from ram to flash
#define IAP_CMD_EraseSec 52 //erase sector
#define IAP_CMD_BlankChkSec 53 //check if sector is blank
#define IAP_CMD_ReadParID 54 //read chip ID
#define IAP_CMD_ReadBootVer 55 //read BOOT version
#define IAP_CMD_Compare 56 //compare
#define IAP_CMD_REINVOKEISP 57 //reinvoke ISP command

/* IAP Status Codes */
#define IAP_STA_CMD_SUCCESS 0
#define IAP_STA_INVALID_COMMAND 1
#define IAP_STA_SRC_ADDR_ERROR 2
#define IAP_STA_DST_ADDR_ERROR 3
#define IAP_STA_SRC_ADDR_NOT_MAPPED 4
#define IAP_STA_DST_ADDR_NOT_MAPPED 5
#define IAP_STA_COUNT_ERROR 6
#define IAP_STA_INVALID_SECTOR 7
#define IAP_STA_SECTOR_NOT_BLANK 8
#define IAP_STA_SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 9
#define IAP_STA_COMPARE_ERROR 10
#define IAP_STA_BUSY 11

#define IAP_STA_INVALD_PARAM 12

extern unsigned long IAP_PrepareSec (unsigned long, unsigned long);
extern unsigned long IAP_CopyRAMToFlash (unsigned long dst, unsigned long src,
unsigned long number);
extern unsigned long IAP_EraseSec (unsigned long StartSecNum, unsigned long EndSecNum);
extern unsigned long IAP_BlankChkSec (unsigned long StartSecNum, unsigned long EndSecNum,
unsigned long * pResult);
extern unsigned long IAP_ReadParID (unsigned long * PartID);
extern unsigned long IAP_ReadBootVer (unsigned long * MajorVer, unsigned long * MinorVer);
extern unsigned long IAP_Compare (unsigned long dst, unsigned long src,
unsigned long number, unsigned long *offset);
extern void IAP_ReinvokeISP(void);


#endif

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- cornflyer   как работать с IAP?   Jan 28 2009, 14:26
- - zltigo   Цитата(cornflyer @ Jan 28 2009, 17:26) Кт...   Jan 28 2009, 15:10
- - cornflyer   на форуме нет внятного описания как работать с IAP...   Jan 29 2009, 12:47
|- - Сергей Борщ   Цитата(cornflyer @ Jan 29 2009, 14:47) вы...   Jan 29 2009, 15:31
|- - zltigo   Цитата(cornflyer @ Jan 29 2009, 15:47) на...   Jan 30 2009, 08:48
|- - ar__systems   Цитата(cornflyer @ Jan 29 2009, 07:47) на...   Mar 16 2009, 02:31
- - Nixon   Кроме документации существует еще и application no...   Jan 29 2009, 13:14
- - cornflyer   да, я читал application note AN10256 компилятор Ke...   Jan 30 2009, 06:51
- - Сега   Кстати да, интересная тема. Может ктонибудь объясн...   Jan 31 2009, 16:32
|- - Сергей Борщ   Цитата(Сега @ Jan 31 2009, 18:32) то есть...   Jan 31 2009, 16:36
- - cornflyer   внутренний flash стоит использовать для хранения р...   Feb 2 2009, 07:21
|- - Qwertty   Цитата(cornflyer @ Feb 2 2009, 10:21) вот...   Feb 2 2009, 07:46
|- - yuri_t   По поводу IAP можно посмотреть здесь: http://www....   Feb 2 2009, 08:22
- - cornflyer   преимущества софтового i2c : - софтовый i2c меньше...   Feb 2 2009, 11:17
|- - zltigo   Цитата(cornflyer @ Feb 2 2009, 14:17) со...   Feb 2 2009, 12:48
- - cornflyer   согласен. перечитал еррату - действительно с i2с в...   Feb 3 2009, 07:47
- - TanT   Позвольте задать вопрос в этой теме касаемо IAP. В...   Feb 18 2009, 12:27
|- - zltigo   Цитата(TanT @ Feb 18 2009, 15:27) а сколь...   Feb 18 2009, 18:16
- - TanT   Я так и думал . А касаемо стирания одного сектора...   Feb 19 2009, 05:49
|- - MrYuran   Цитата(TanT @ Feb 19 2009, 08:49) И вообщ...   Feb 19 2009, 06:06
- - TanT   Цитата(TanT @ Feb 19 2009, 08:49) И вообще имеет ...   Feb 19 2009, 06:45
- - MikePic   TanT ЦитатаОднако, всё таки кто-нибудь сможет отве...   Feb 19 2009, 07:11
|- - zltigo   Цитата(MikePic @ Feb 19 2009, 10:11) А пр...   Feb 19 2009, 09:59
- - TanT   ЦитатаПроизводитель документирует 400 - их и нужно...   Feb 19 2009, 10:04
|- - zltigo   Цитата(TanT @ Feb 19 2009, 13:04) Сколько...   Feb 19 2009, 10:33
- - TanT   Спасибо большое, именно это хотел услышать. А ра...   Feb 19 2009, 11:22
|- - HARMHARM   Если уж хочется что-то поделать пока идет стирание...   Feb 19 2009, 11:41
- - Denisvak   Позвольте задать вопрос в этой же теме дабы не соз...   Feb 24 2009, 14:18
|- - etoja   Прилагаю подробную инструкцию по IAP для использов...   Feb 24 2009, 15:18
- - Denisvak   Цитата(etoja @ Feb 24 2009, 18:18) Прилаг...   Feb 24 2009, 16:26
|- - Сергей Борщ   Цитата(Denisvak @ Feb 24 2009, 18:26) буд...   Feb 24 2009, 18:32
- - TanT   Вопрос в продолжении темы IAP: команда 56 - сравне...   Feb 26 2009, 05:05
|- - etoja   Цитата(TanT @ Feb 26 2009, 08:05) Вопрос ...   Feb 26 2009, 07:21
- - TanT   Если сравнение гарантирует 100% выявление ошибок, ...   Feb 26 2009, 07:52
|- - KRS   Цитата(TanT @ Feb 26 2009, 10:52) Если ср...   Feb 26 2009, 11:05
|- - etoja   Контрольная сумма нужна обязательно, поскольку в м...   Feb 26 2009, 16:12
- - Denisvak   Цитата(TanT @ Feb 26 2009, 10:52) Если ср...   Feb 26 2009, 17:02
- - TanT   ЦитатаКонтрольная сумма нужна обязательно, посколь...   Mar 2 2009, 06:16
|- - etoja   Цитата(TanT @ Mar 2 2009, 09:16) Большие ...   Mar 2 2009, 08:04
|- - HARMHARM   Цитата(TanT @ Mar 2 2009, 08:16) Вообще з...   Mar 2 2009, 09:56
- - TanT   ЦитатаЗапрет прерываний - требование не обязательн...   Mar 2 2009, 12:23
- - Denisvak   Сергей Борщ и etoja Спасибо Вам за помощь все рабо...   Mar 3 2009, 20:15
- - vesago   Прошу совета по сабжу. Я использую LPC2214. C 0 по...   Mar 15 2009, 17:31
- - GetSmart   Ну дык если стёрли нулевой сектор, то стёрли и век...   Mar 15 2009, 18:02
- - vesago   Я думал, что если начало прошивки сконфигурировано...   Mar 15 2009, 18:10
|- - HARMHARM   Цитата(vesago @ Mar 15 2009, 20:10) Я дум...   Mar 15 2009, 19:23
|- - GetSmart   Цитата(vesago @ Mar 15 2009, 23:10) А как...   Mar 15 2009, 19:34
|- - IgorMarx   Цитата(GetSmart @ Mar 15 2009, 23:34) В в...   Aug 27 2009, 19:57
- - vesago   Спасибо, все понятно.   Mar 15 2009, 19:53
- - TanT   Вопрос к etoja по поводу записи, точнее верификаци...   Mar 17 2009, 06:19
|- - ar__systems   Цитата(TanT @ Mar 17 2009, 01:19) Вопрос ...   Mar 17 2009, 11:42
- - TanT   а вы правы, ar__systems. частота стояла из старого...   Mar 17 2009, 12:14
- - HARMHARM   Цитата(TanT @ Mar 17 2009, 14:14) а вы пр...   Mar 17 2009, 12:16
- - KRS   Цитата(TanT @ Mar 17 2009, 15:14) Паузы н...   Mar 17 2009, 12:17
- - Wano   Подскажите всё ли правильно делаю,чтобы зашить в L...   Aug 3 2009, 09:32


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

 


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


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