Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Interfejs I2C !

Mess-gd 11 Nov 2004 11:20 2234 5
  • #1
    Mess-gd
    Level 14  
    Znam się posdtawowo na tym interfejsie. Czy ktoś mogłby wytłumaczyć mi kilka zagadnieńktórych nie rozumiem?

    1. Jak to jest z tymi bitami potwierdzenia.
    2. Jak ogólnie wygląda wysyłanie danych (czy procek wrzuca dane do rejestru i program czeka aż dane zostaną wysłane)?
    3. Adresowanie jest w tym samym rejestrze co wysyłanie danych ?
  • #2
    BoskiDialer
    Level 34  
    1: bit potwierdzenia jest wysylany zawsze po poprawnie odebranym bajcie.. np slave odbierze bajt danych, i na 9 bicie ramki wymusza stan niski czyli potwierdzenie.. podobnie master.. master jak odbierze bajt to musi wystawić stan niski na jako potwierdzenie, inaczej użądzenie sie rozadresuje i niebędzie wykonywało poleceń do czasu kolejnego nadania sekwencji start + wpisanie adresu..
    2: właściwie często i2c jest programowe.. wywołuje się funkcje z parametrem typu bajt, który ma zostać wysłany.. master wystawia bity danych i dla każdego z nich wystawia zbocze narastające i opadające aby wpisać bit do rejestru przesówanego w odbiorniku slave...
    3: adresowanie to również wysłanie danych.. wysyła sie bajt danych w którym jest zawarty adres układu slave z którym ma być nawiązana komunikacja, oraz kierunek wymiany danych. tutaj potwierdzenie master otrzyma zawsze gdy pod konkretnym adresem znajduje się jakiś odbiornik slave, i niejest on zajęty (np eeprom podczas zapisu)
  • #3
    Mess-gd
    Level 14  
    Co do:
    1. Czyli procek bedzie wysylal dane dopuki nie otrzyma bitu potwierdzenia? Czytrzeba do tego pisać program czy to bedzie automatyczne w procku z I2C (chodzi o to czy program przerwie dzialanie az wyśle te dane czy trzeba to robić programowo -czyli jak nie odbierze bitu powtierdzenia to wraca i wysyla na nowo)?
    2. Czyli jest polecenie które zajmuje iles komurek pamieci w ktorych wysyla dane na szyne?
    3. Dzieki to juz kumam.
  • #4
    BoskiDialer
    Level 34  
    1: procesor to zabawka sekwencyjna a nie strumieniowa.. jeśli nie nastąpi bit potwiedzenia w momencie gdy powinien wystąpić, procesor powinien uznać bajt za zaginiony i całą sekwencje powtórzyć, o ile w danej chwili jest to potrzebne.. z innej strony bit potwierzenia jest bardzo często ignorowany gdyż odległość do odbiornika jest wystarczająco mała aby żaden bit nie zaginął...
  • #5
    DosinskY
    Level 18  
    No wlasnie. Jak to jest w koncu z tymi bitami potwierdzenia bo ja to rozumiem tak:

    - master odbiera bajt danych i jezeli wystawi bit potwierdzenia (stan niski na SDA) tzn ze jest gotowy do odebrania nastepnego bajtu
    - master odbiera bajt danych i nie wystawia bitu potwierdzenia (linie SDA pozostawia w stanie wysokim) informujac urzadzenie wysylajace, ze nie odbierze kolejnego bajtu i nalezy zwolnic szyne, aby master mogl wykonac i2c_stop (wytworzyc zbocze narastajace na SDA w czasie gdy na SCL jest stan wysoki)

    ...no to jak to jest bo ja juz sie zamotalem :)

    Pozdr
    ---------
    dodalem:

    Co moze byc przyczyna tego, ze slave nie wystawi bitu potwierdzenia, bo do tej pory sprawdzam go programowo, ale jeszcze sie nie spotkalem, zeby bit potwierdzajacy nie zostal wystawiony....wiec moze by tak troche skrocic software ;) ???