Udostępnij za pośrednictwem


Funkcja I2CMaster_WriteThenRead

Nagłówek: #include <applibs/i2c.h>

Wykonuje połączoną operację zapisu i odczytu w interfejsie głównym I2C. Operacja jest wyświetlana jako pojedyncza transakcja autobusowa z następującymi krokami:

  1. warunek rozpoczęcia
  2. Napisz
  3. powtarzający się warunek rozpoczęcia
  4. Odczytu
  5. warunek zatrzymania
ssize_t I2CMaster_WriteThenRead(int fd, I2C_DeviceAddress address, const uint8_t *writeData, size_t lenWriteData, uint8_t *readData, size_t lenReadData);

Parametry

  • fd Deskryptor plików interfejsu głównego I2C.

  • address Adres docelowego urządzenia I2C dla tej operacji.

  • writeData Dane przesyłane do urządzenia docelowego.

  • lenWriteData Długość bajtów przesyłanych danych.

  • readData Bufor wyjściowy, który odbiera dane z urządzenia docelowego. Ten bufor musi zawierać wystarczającą ilość miejsca do odbierania lenReadData bajtów.

  • lenReadData Długość bajtów danych, które mają zostać odebrane.

Błędy

Zwraca wartość -1 w przypadku napotkania błędu i ustawia errno wartość błędu.

  • EBUSY: interfejs jest zajęty lub linia I2C jest utrzymywana na niskim poziomie.

  • ENXIO: operacja nie otrzymała ACK z urządzenia podrzędnego.

  • ETIMEDOUT: przekroczona została przekroczona limit czasu operacji przed ukończeniem operacji; możesz użyć funkcji I2CMaster_SetTimeout , aby dostosować czas trwania limitu czasu.

Mogą być również określone inne errno błędy; takie błędy nie są deterministyczne i to samo zachowanie może nie być zachowane za pośrednictwem aktualizacji systemu.

Zwracana wartość

Zwraca połączoną liczbę bajtów pomyślnie napisanych i przeczytanych lub -1 dla niepowodzenia, w którym to przypadku errno jest ustawiona wartość błędu. Częściowy wynik, w tym transfer 0 bajtów, jest uważany za sukces.

Wymagania dotyczące manifestu aplikacji

Aby uzyskać dostęp do interfejsu I2c, aplikacja musi zidentyfikować go w polu I2cMaster manifestu aplikacji.