0

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();
4

0 に答える 0