本帖最后由 文少 于 2013-9-8 13:13 编辑
铁电EEPROM最大优势是写入不用延时,用在实时性强的机器上面很方便。
同样的代码用在24C64上完全正常,套用在FM24C512上,并且把原来的写入延时10ms去掉,发现并不能写入数据,必须要加最少2ms的延时,这就让人郁闷了。
尝试更改SCL和SDA的上拉电阻以提高I2C总线速度,也没改善,不知何解?
以下是相关说明的代码
#include <Wire.h> //库文件
int addr=0; //EEPROM地址
void setup(){
Wire.begin();
}
void loop(){
....
write_byte(0x50,addr,1); //地址0写入1
delay(2);
...
}
//-------------字节写---------------
void write_byte( int d_add, unsigned int e_add, byte data ) {
int rdata = data;
Wire.beginTransmission(d_add);
Wire.send((int)(e_add >> 8)); // MSB
Wire.send((int)(e_add & 0xFF)); // LSB
Wire.send(rdata);
Wire.endTransmission();
}
//-------------字节读-----------------
byte read_byte( int d_add, unsigned int e_add ) {
byte rdata = 0xFF;
Wire.beginTransmission(d_add);
Wire.send((int)(e_add >> 8)); // MSB
Wire.send((int)(e_add & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(d_add,1);
if (Wire.available()) rdata = Wire.receive();
return rdata;
} |