Mam zamiar po trochu przetrawić cały Twój post ...
Powiedzmy, że Slave lub Master wysyła wiele bajtów do odbiornika
na magistrali I2C, a liczba bajtów nie jest wcześniej zdefiniowana.
Ale należy to zdefiniować. Jeśli wysyłano lub otrzymywano losowe informacje, nigdy nie będziesz w stanie ich zinterpretować.
Zatem w jaki sposób nadawca powie odbiorcy, że nie ma więcej danych
wysłać?
Producent określa, ile bitów musi otrzymać od slave'a. Master jest zwykle zapisywany przez jakieś urządzenie logiczne, takie jak mikrokontroler, procesor itp.
Jak dotąd rozumiem, że w przypadku, gdy jest to nadawca
Następnie Master wysyła NACK, aby powiedzieć Slave (odbiornikowi), że jest
nie ma więcej danych do wysłania.
Nie, nie do końca dobrze, prawda. „NACK” występuje, gdy master nie „słyszy” niczego od slave'a po wysłaniu tego bitu do slave'a. To tak, jakby rozmawiać przez telefon i mówić: „Cześć, jesteś tam?”
Ale zastanawiam się, jak przebiega ten uścisk dłoni między Mistrzem
i Slave, gdy Slave jest nadawcą, a Master jest tylko odbiorcą
Slave (nadawca) wie, kiedy nie ma już danych do wysłania do
odbiornik?
Twoja definicja nadawcy i odbiorcy jest wypaczona. Zarówno master, jak i slave działają zarówno jako nadawca, jak i odbiorca. Master może zarówno wysyłać, jak i odbierać, w zależności od operacji zapisu lub odczytu.
HPomocna rada: Rozważ przeczytanie dowolnego arkusza danych I2C slave. Poszukaj słowa kluczowego „wiadomość”. To jest informacja, którą master wysyła do slave'a.
Zdjęcie z tutaj... nie moje zdjęcie.
Master powinien być zaprogramowany tak, aby odczytywał taką samą długość ramki adresowej jak slave, która jest zdefiniowana w arkuszu danych slave.Możesz także ustawić adres slave'a, ale zwykle nie za dużo.Pomoże to rozwiązać konflikt, jeśli dwa slave'y mają ten sam adres.
Oto przykład części, z którą ostatnio pracowałem, jest to kontroler ADM1276 typu hot-swap.Jest zgodny ze specyfikacjami PMBUS, ale topologia I2C nadal obowiązuje.Informuje o interakcjach master i slave podczas wysyłania, odbierania, odczytywania i zapisywania bajtów.