我正在使用带有 PIC18F4550 微控制器和 xc8 i2c 库函数的 24C256 eeprom。我可以随机读取任何给定的地址,但是当我尝试进行顺序读取时,它只能在地址 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();