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

 
 
> как работать с 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
Ответов
cornflyer
сообщение Feb 2 2009, 07:21
Сообщение #2


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

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



внутренний flash стоит использовать для хранения редкоменяющейся инфы...
часто писать во внутренний flash - плохой стиль
у него ресурс всего 100000 циклов записи....
запись через IAP занимает время, причем проц не обрабатывает прерывания....
если 100 раз в сутки приходица сохранять инфу - лучше писать во внешний eeprom
у него ресурс 1000000 циклов
вот например можно поставить i2c eeprom M24C64
код для чтения/записи приведен ниже:
Код
#include "lpc214x.h"
/*-------------------------------------------------------------------------*/
#define SDA_BIT    (1<<3)//for olimex board
#define SCL_BIT    (1<<2)//for olimex board
#define I2C_ADDR (0x50)//I2C Slave Address
/*-------------------------------------------------------------------------*/
void I2C_DELAY(void){
    volatile z=1000;
    while(z) z--;
}
/*-------------------------------------------------------------------------*/
unsigned char I2C_SDA(void){
    return (IOPIN0&SDA_BIT);    
}
/*-------------------------------------------------------------------------*/
void I2C_SDA_HIGH(void){
    IODIR0 &=~ SDA_BIT;//input    
}
/* -------------------------------------------------------------------------*/
void I2C_SDA_LOW(void){
    IOCLR0 = SDA_BIT;
    IODIR0 |= SDA_BIT;//output low
}
/*-------------------------------------------------------------------------*/
void I2C_SCL_HIGH(void){
    IODIR0 &=~ SCL_BIT;//input
}
/*-------------------------------------------------------------------------*/
void I2C_SCL_LOW(void){
    IOCLR0 = SCL_BIT;
    IODIR0 |= SCL_BIT;//output low
}
/*-------------------------------------------------------------------------*/
unsigned char i2c_send_byte(unsigned char b){
    unsigned char result = 0;
    unsigned int i = 0;
    for(i=0;i<8;i++){
        //Set Data
        if(b&0x80){// == 1000 0000
            I2C_SDA_HIGH();
        }else{
            I2C_SDA_LOW();
        }
        b = b<<1;//shift left by one position
        I2C_DELAY();
        I2C_SCL_HIGH();//make clock pulse
        I2C_DELAY();
        I2C_SCL_LOW();
        I2C_DELAY();    
    }
    //Acknowledge
    I2C_SDA_HIGH();
    I2C_DELAY();
    I2C_SCL_HIGH();//make clock pulse
    I2C_DELAY();
    if(I2C_SDA()){//check i2c slave acknowledge
        result = 1;
    }else{
        result = 0;
    }
    I2C_SCL_LOW();
    I2C_DELAY();
    return result;
}
/*-------------------------------------------------------------------------*/
unsigned char i2c_write(unsigned int addr,unsigned char b){
    unsigned char result = 0;
    //Initial state (stop condition)
    I2C_SCL_HIGH();
    I2C_DELAY();
    I2C_SDA_HIGH();
    I2C_DELAY();
    //Start (start condition)
    I2C_SDA_LOW();
    I2C_DELAY();
    I2C_SCL_LOW();
    I2C_DELAY();
    //Send i2c address
    if(i2c_send_byte(I2C_ADDR<<1)){//RW=0
        result = 1;
    }else{
        if(i2c_send_byte(addr>>8))result = 1;//high addr
        if(i2c_send_byte(addr))result = 1;//low addr
        if(i2c_send_byte(b))result = 1;
    }
    //Stop (stop condition)
    I2C_SDA_LOW();
    I2C_DELAY();
    I2C_SCL_HIGH();
    I2C_DELAY();
    I2C_SDA_HIGH();
    I2C_DELAY();
    return result;
}
/*-------------------------------------------------------------------------*/
void i2c_write_byte(unsigned int addr, unsigned char b){
    unsigned char result = 1;
    while(result)result = i2c_write(addr,b);
}
/*-------------------------------------------------------------------------*/
void i2c_read_page(unsigned int addr, unsigned char *page_buff, unsigned int page_length){
    unsigned char data_byte = 0;
    int b;
    //Initial state
    I2C_SCL_HIGH();
    I2C_DELAY();
    I2C_SDA_HIGH();
    I2C_DELAY();
    //Start (start condition)
    I2C_SDA_LOW();
    I2C_DELAY();
    I2C_SCL_LOW();
    I2C_DELAY();
    //Send address
    i2c_send_byte(I2C_ADDR<<1);//RW=0
    i2c_send_byte(addr>>8);//high addr
    i2c_send_byte(addr);//low addr
    //Start (start condition)
    I2C_SCL_HIGH();
    I2C_DELAY();
    I2C_SDA_LOW();
    I2C_DELAY();
    I2C_SCL_LOW();
    I2C_DELAY();
    i2c_send_byte((I2C_ADDR<<1)|0x01);//RW = 1
    while(page_length){//read page    
        I2C_SDA_HIGH();
        for(b=8;b--;){
            I2C_DELAY;
            I2C_SCL_HIGH();
            I2C_DELAY();
            data_byte = (data_byte<<1)|((I2C_SDA())?0x01:0x00);
            I2C_DELAY();
            I2C_SCL_LOW();
            I2C_DELAY();
        }
        *page_buff = data_byte;
        page_buff++;
        data_byte = 0;
        page_length--;
        //Acknowledge
        if(page_length) I2C_SDA_LOW(); else I2C_SDA_HIGH();
        I2C_DELAY();
        I2C_SCL_HIGH();
        I2C_DELAY();
        I2C_DELAY();
        I2C_SCL_LOW();
        I2C_DELAY();
    }
    //Stop (stop condition)
    I2C_SDA_LOW();
    I2C_DELAY();
    I2C_SCL_HIGH();
    I2C_DELAY();
    I2C_SDA_HIGH();
    I2C_DELAY();
}
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Feb 2 2009, 07:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(cornflyer @ Feb 2 2009, 10:21) *
вот например можно поставить i2c eeprom M24C64
код для чтения/записи приведен ниже:

А почему софтовый I2C???
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Feb 2 2009, 08:22
Сообщение #4


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

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



По поводу IAP можно посмотреть здесь:

http://www.tnkernel.com/usb_fw_upgrader.html
(usb-fwu-1-0-1-lpc214x.zip -> fwu_asm.s)

По поводу I2C - здесь:
Прикрепленные файлы
Прикрепленный файл  LPC2xx_I2Clib.zip ( 9.04 килобайт ) Кол-во скачиваний: 88
 
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   преимущества софтового 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
- - bigarmer   RE: как работать с IAP?   Feb 7 2009, 07:32
- - 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 Текстовая версия Сейчас: 23rd July 2025 - 00:14
Рейтинг@Mail.ru


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