Witam wszystkich Elektrodowiczów,
Przestudiowałęm manual blou I2C mikrokontrolera LPC1769 (UM 10360), dokumentację pamięci EEPROM Microchip i schemat płytki LPCXpresso LPC1769 Rev.D.
Napisałem prosty kod w C, który wykonuje komunikację z pamięcią EEPROM (zapisuje jeden bajt i odczytuje jeden bajt).
Do zapisu jednego bajtu wysyłam bajty przez I2C:
1. I2C START CONDITION (to nie jest bajt)
2. 0xA0 (Control Byte + Write bit: 1010 0000)
3. 0x00 (Byte Address High Byte - MSB: 0000 0000)
4. 0x00 (Byte Address Low Byte - LSB: 0000 0000)
5. 0xAA (Data byte value: 1010 1010)
6. I2C STOP CONDITION (to nie jest bajt)
i otrzymuję wartości rejestru Statusu magistrali I2C jak poniżej:
1. 0x08 (START CONDITION has been sent)
2. 0x18 (Slave Address and Write bit has been sent - Control Byte + Write bit)
3. 0x28 (Data in I2DAT has been transmitted - Byte Address High Byte - MSB)
4. 0x28 (Data in I2DAT has been transmitted - Byte Address Low Byte - LSB)
5. 0x28 (Data in I2DAT has been transmitted - Data byte value)
Oscyloskop pokazuje linie I2C (SDA i SCL). Ich wartości wydają się poprawne (zgodnie z wysyłanymi wartościami bajtów)
Do odczytu jednego bajtu z pamięci EEPROM wysyłam bajty przez I2C:
1. I2C START CONDITION (to nie jest bajt)
2. 0xA0 (Control Byte + Write bit: 1010 0000)
3. 0x00 (Byte Address High Byte - MSB: 0000 0000)
4. 0x00 (Byte Address Low Byte - LSB: 0000 0000)
5. I2C START CONDITION (to nie jest bajt)
5. 0xA1 (Control Byte + Read bit: 1010 0001)
-- Here I get/read byte from I2DAT register
6. I2C STOP CONDITION (to nie jest bajt)
i otrzymuję wartości rejestru Statusu magistrali I2C jak poniżej:
1. 0x08 (START CONDITION has been sent)
2. 0x18 (Data in I2DAT has been transmitted - Byte Address High Byte - MSB)
3. 0x28 (Data in I2DAT has been transmitted - Byte Address High Byte - LSB)
4. 0x08 (START CONDITION has been sent)
5. 0x40 (Slave Addres and Read bit has been sent - Control Byte + Read bit)
6. 0x58 (Data byte value has been received)
Oscyloskop pokazuje linie I2C (SDA i SCL). Ich wartości wydają się poprawne (zgodnie z wysyłanymi wartościami bajtów),
ale niestety odbierany (ostatni bajt na przebiegu) bajt - rejestr I2DAT - jest o wartości 0xFF - a przecież zapisywany wcześniej był bajt
o wartości 0xAA, zatem coś jest nie tak.
Będę bardzo wdzięczny za pomoc.
Poniżej przesyłam zrzuty ekranu oscyloskopu na liniach SDA i SCL I2C (pierwszy screen to zapis bajtu, drugi to odczyt bajtu).
Przestudiowałęm manual blou I2C mikrokontrolera LPC1769 (UM 10360), dokumentację pamięci EEPROM Microchip i schemat płytki LPCXpresso LPC1769 Rev.D.
Napisałem prosty kod w C, który wykonuje komunikację z pamięcią EEPROM (zapisuje jeden bajt i odczytuje jeden bajt).
Do zapisu jednego bajtu wysyłam bajty przez I2C:
1. I2C START CONDITION (to nie jest bajt)
2. 0xA0 (Control Byte + Write bit: 1010 0000)
3. 0x00 (Byte Address High Byte - MSB: 0000 0000)
4. 0x00 (Byte Address Low Byte - LSB: 0000 0000)
5. 0xAA (Data byte value: 1010 1010)
6. I2C STOP CONDITION (to nie jest bajt)
i otrzymuję wartości rejestru Statusu magistrali I2C jak poniżej:
1. 0x08 (START CONDITION has been sent)
2. 0x18 (Slave Address and Write bit has been sent - Control Byte + Write bit)
3. 0x28 (Data in I2DAT has been transmitted - Byte Address High Byte - MSB)
4. 0x28 (Data in I2DAT has been transmitted - Byte Address Low Byte - LSB)
5. 0x28 (Data in I2DAT has been transmitted - Data byte value)
Oscyloskop pokazuje linie I2C (SDA i SCL). Ich wartości wydają się poprawne (zgodnie z wysyłanymi wartościami bajtów)
Do odczytu jednego bajtu z pamięci EEPROM wysyłam bajty przez I2C:
1. I2C START CONDITION (to nie jest bajt)
2. 0xA0 (Control Byte + Write bit: 1010 0000)
3. 0x00 (Byte Address High Byte - MSB: 0000 0000)
4. 0x00 (Byte Address Low Byte - LSB: 0000 0000)
5. I2C START CONDITION (to nie jest bajt)
5. 0xA1 (Control Byte + Read bit: 1010 0001)
-- Here I get/read byte from I2DAT register
6. I2C STOP CONDITION (to nie jest bajt)
i otrzymuję wartości rejestru Statusu magistrali I2C jak poniżej:
1. 0x08 (START CONDITION has been sent)
2. 0x18 (Data in I2DAT has been transmitted - Byte Address High Byte - MSB)
3. 0x28 (Data in I2DAT has been transmitted - Byte Address High Byte - LSB)
4. 0x08 (START CONDITION has been sent)
5. 0x40 (Slave Addres and Read bit has been sent - Control Byte + Read bit)
6. 0x58 (Data byte value has been received)
Oscyloskop pokazuje linie I2C (SDA i SCL). Ich wartości wydają się poprawne (zgodnie z wysyłanymi wartościami bajtów),
ale niestety odbierany (ostatni bajt na przebiegu) bajt - rejestr I2DAT - jest o wartości 0xFF - a przecież zapisywany wcześniej był bajt
o wartości 0xAA, zatem coś jest nie tak.
Będę bardzo wdzięczny za pomoc.
Poniżej przesyłam zrzuty ekranu oscyloskopu na liniach SDA i SCL I2C (pierwszy screen to zapis bajtu, drugi to odczyt bajtu).