我正在使用带有PIC18F4550微控制器的24C256 eeprom和xc8 i2c库函数。我可以随机读取任何给定的地址,但是当我尝试进行顺序读取时,它只能在地址0x0000和0x0031之间工作。
如果尝试从0x0032到0x003F进行顺序读取,eeprom在读完后停止响应,如果微控制器尝试进行任何其他读操作,则微控制器挂起。我正在使用的顺序读取功能的代码是
StartI2C();
IdleI2C();
putcI2C(0b10100000);//write eeprom
__delay_us(20);
IdleI2C();
putcI2C(address_h);
__delay_us(20);
IdleI2C();
putcI2C(address_l);
IdleI2C();
__delay_us(20);
StartI2C();
IdleI2C();
putcI2C(0b10100001);//read eeprom
__delay_us(20);
IdleI2C();
while(bytes_to_read){ //it starts with the amount of bytes to read
IdleI2C();
*string_received_data++ = ReadI2C();
if(--bytes_to_read)AckI2C();//only gives ack if there's more data to read
}
NotAckI2C();
StopI2C();