|
как работать с IAP? |
|
|
|
 |
Ответов
|
Feb 2 2009, 07:21
|

Частый гость
 
Группа: Свой
Сообщений: 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(); }
|
|
|
|
|
Feb 2 2009, 07:46
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(cornflyer @ Feb 2 2009, 10:21)  вот например можно поставить i2c eeprom M24C64 код для чтения/записи приведен ниже: А почему софтовый I2C???
|
|
|
|
|
Feb 2 2009, 08:22
|
Частый гость
 
Группа: Свой
Сообщений: 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 - здесь:
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|