Odczyt z rejestrów I2C: adresowanie a odczyt

Protokół I2C wymaga zapisu adresu rejestru przed odczytem jego zawartości z urządzenia podrzędnego (slave). Odczyt bez uprzedniego zapisu adresu jest niezgodny ze standardem I2C.

Aby odczytać zawartość konkretnego rejestru, należy najpierw zapisać do urządzenia podrzędnego adres rejestru, który chcemy odczytać.

Kroki odczytu rejestru w protokole I2C:

START -> 7-bitowy adres slave -> R/W=0 (Zapis) -> ACK -> Adres rejestru (1 bajt) -> ACK -> Sr (Restart) -> 7-bitowy adres slave -> R/W=1 (Odczyt) -> ACK -> Dane z rejestru -> NACK (od slave, brak więcej danych) -> STOP.

Więcej informacji na temat protokołu I2C znajdziesz w dokumencie „Understanding the I2C Bus” firmy Texas Instruments: Understanding the I2C Bus

Funkcja readReg odczytuje 2 bajty z urządzenia podrzędnego. Jeśli chcesz odczytać tylko 1 bajt, sprawdź, czy rozmiar został zmieniony na 1 bajt.

Rejestr Reg0 to zazwyczaj rejestr EN/RESET. Przed odczytem Reg0 sprawdź poprzednie operacje, np. czy do tego rejestru zostały zapisane jakieś dane.

Spróbuj odczytać zawartość innego rejestru, np. Reg4, aby sprawdzić, czy można odczytać zapisane w nim dane.

Przykład odczytu temperatury z rejestru 0x05 czujnika MCP9808 na RA6M4: Najpierw następuje zapis – do urządzenia podrzędnego wysyłany jest adres rejestru 0x05. Po około 100ms (z powodu pętli while sprawdzającej timeout) następuje odczyt danych z tego rejestru.

Comments

No comments yet. Why don’t you start the discussion?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *