Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

snifowanie szyny i2c przy pomocy bascomu

solar1 19 Nov 2005 18:44 3154 15
  • #1
    solar1
    Level 15  
    witam mam panel z przyciskami wpietymi w 2 pfc8574 jeden ma adres 32 a drogi 36 (tak wnioskuje z nog zwartych do masy lub do 1) chce sobie podsluchac co ten proceor wysyla do jakiegos tam urzadzenia i napislem sobie progrm oparty o komende I2creceive
    listing :
    Code:

    Dim A As Bit
    Dim C As Bit
    Dim D As Bit
    Dim E As Bit

    Config Sda = P0.1
    Config Scl = P0.0
    Dim Value1 As Byte
    Dim Value2 As Byte




    Do

    I2creceive 32 , Value1                                       
    If Value1 = 1 Then                                           
    End If
    If Value1 = 2 Then
    End If
     If Value1 = 4 Then
     End If
     If Value1 = 8 Then
     End If
     If Value1 = 128 Then
      End If
      If Value1 = 64 Then
      End If
      If Value1 = 32 Then
      End If
      If Value1 = 16 Then
      End If
      I2creceive 36 , Value 2
      If Value2 = 1 Then
      End If
      If Value2 = 2 Then
       End If
       If Value2 = 128 Then
       End If
     Loop
    End


    czy taki program nie bedzie "zabieral" danych ktore che podsluchac docelowemu procesorowi ? czy program jest napisany wmiare poprawnie?[/code]
  • #2
    genetix
    Level 24  
    Nie znam się kompletnie na Bascomie, ale wydaje mi się, że pomiędzy "Then" a "End If" powinna być jakaś instrukcja.
  • #3
    zumek
    Level 39  
    solar1 wrote:
    witam mam panel z przyciskami wpietymi w 2 pfc8574 jeden ma adres 32 a drogi 36 (tak wnioskuje z nog zwartych do masy lub do 1) chce sobie podsluchac co ten proceor wysyla do jakiegos tam urzadzenia ...

    Zapomnij o podłuchiwaniu , przy użyciu standardowych instrukcji I2C Bascoma.Zawsze możesz napisać własny soft , by Twój proc robił za "niewolnika" na szynie I2C.Istnieje biblioteka do takich sztuczek dla AVR-ów, czy jest dla MCS-51 - nie wiem :|

    Piotrek
  • #4
    solar1
    Level 15  
    a czemu ? basom nie daje takiej mozliwosci ? znam adresy poszczegolnych przyciskow i znam wartosci jakie one wysylaja .. poporstu chce wykonac dodatkowa czynnosc... glupim rozwiazniem bylo by wpiecie sie w przyciski ale nie che tego zrobic

    i tak pomiedzy if i end if bedzie cos proceor robil

    nadal zadaje pytanko czy procesor bedzie "zabieral " komendy procesorowi docelowemu ? czy i2crevive nadaje jakis adres mojemu procesorowi ?
    uprzejmie prosze o odpowiedz na zadane przezemie pytanie ;/
  • #5
    frohme
    Level 21  
    i2creceive jak nazwa wskazuje odbiera i tylko to. Ten układ co nadaje to podaje do kogo nadaje (adres) i właściwą treść informacji. Twój sniffer tylko to odbiera niczego nie zmieniając, a przecież wszystkie informacje są dostępne - wniosek on widzi wszystko, niczego nie zmienia i formalnie nic nowego w układzie się nie pojawiło (w sensie logicznym).
  • #6
    solar1
    Level 15  
    dziekuje :) o taka odpowiedz mi chodzilo :)
  • #7
    zumek
    Level 39  
    frohme wrote:
    i2creceive jak nazwa wskazuje odbiera i tylko to. Ten układ co nadaje to podaje do kogo nadaje (adres) i właściwą treść informacji. Twój sniffer tylko to odbiera niczego nie zmieniając, a przecież wszystkie informacje są dostępne - wniosek on widzi wszystko, niczego nie zmienia i formalnie nic nowego w układzie się nie pojawiło (w sensie logicznym).

    Drogi kolego frohme , chyba przespałeś lekcję o magistrali I2C i Bascomie ;) Wszystkie instrukcje dotyczące magistrali I2c w Bascomie , są zaimplementowane dla urządzenia master , a to oznacza , że generują własny sygnał zegara na linii SCL , bez względu na to czy zapisują , czy czytają.Użycie ich w trybie slave(np.podsłuch) , wprowadza tylko zamęt i totalny bałagan na takiej magistrali i nic poza tym.

    Pozdrawiam
    Piotrek
  • #8
    solar1
    Level 15  
    czyli moj porgram nie bedzie dzialal tak jak ja che;/ bedzie kradl dane dla docelowego procesora ? .. ;/ jak to rozwiazac inaczej ? ;/ ten program juz mnie meczyl niemal tydzien ;/
  • #9
    And!
    Admin of Design group
    I2C nie jest specjalnie skomplikowane, nie ma również problemów z rygorami czasowymi, polecam zostawić te bascomowe gotowce.
    Opis I2C np. taki:
    http://cyna.barlinek.biz/index.php?strona=i2c
    napisanie programu snifującego nie będzie zbyt trudne...
  • #10
    solar1
    Level 15  
    mam pytanko czy jezeli mam zwarte 3 nogi adresujace do GND dla ukladu pfc8574 to zgodnie z tabela powien on miec adres 32 ? a jak noga A0 jest zwarta do +5v to 33 ? moje pytanie z tad bo znalzlem na elektordzie jakies tam programy obslugujace tego scalaka ale adresowanie bylo zawsze wiesze niz 100 np 132 itd itd (ja sie sugeruje tym co mam w tabelce wyciagnietej z noty katalogowej)
  • #11
    And!
    Admin of Design group
    Wprzypadku A0-A2 zwartych na GND adres 64 (65 odczyt)
    W przypadku A0 na +5 adres 66 (67 odczyt)

    Teraz wracjąc do linku do stronki z opisem I2C
    1. oczekuj na I2C start
    Czekaj na SCL=1
    jeżeli jest równy 1 to sprawdź SDA
    gdy SDA=1 to czekamy na SDA=0 i jednocześnie pilnujemy czy SCL=1
    jeżeli SCL=0 to czekamy na SCL=1
    (wykrycie I2C stop to czekanie na zmianę SDA=0 na SDA=1 przy SCL=1
    ale narazie czekamy na I2C start)
    2.transmisja
    -podstawowa sprawa zczytujemy stan SDA gdy SCL=0
    -pobieramy w pętli 8 bitów z SDA przyczym pamiętamy że idą od najstarszego
    3.potwierdzenie
    linia SCL=1 SDA=1 po pewnym czasie któreś z urządzeń zewrze SDA=0
    co oznacza potwerdzenie ACK
    4. I2c stop opisane w pkt 1.
  • #12
    solar1
    Level 15  
    ok a taka konstukjca programu jak podalem w 1 poscie umozliwa zapis i odczyt na liczbach 10sietnych ? .. nie poradze sobie softwerowo ze snifowaniem daltego wepne sie pfceami w te orginalne..noga do nogi i pociagne 2 odzielna szyne i2c do mojego proca .mam nadzieje ze to sie sprawdzi ;/ i czemu w tej tabeli wyciagnietej przeciez z noty katalogowej pisze co innego ? jezeli wszystkie piny do gnd to 32decymal z kad sie wziela 2 krotnie wieksza wartosc ?
  • #13
    zumek
    Level 39  
    Widzisz , to tak jest , jak się nie wie , z czym ma sie do czynienia :(
    Adresy z tabelki ADDRESS REFERENCE , podane są w postaci 7 bitów. Musisz dołożyć jeszcze 8 najmłodzy bit R/W , a wtedy adres przesuwa się o jedno miejsce w lewo i ... z 32 robi się 64+bit R/W.Dla linii adresowych A0,A1,A2 podłączonych do GND , adres bazowy do zapisu=64(0x40) , a do odczytu = 65(0x41).
    Teraz chyba zrozumiesz , tę ... jakże pokrętną tabelkę :D

    Piotrek
  • #14
    And!
    Admin of Design group
    Ok masz słownie przedstawione algorytmy dla snifowania I2C start stop i stransmisji (wprowadzanie danych możesz zrobić przy pomocy shift right w bascom)

    Teraz musisz z tych elementarnych procedur poskładać snifowanie transmisji
    dla PCF8574.
    1. procesor zaadresuje PCF i wedle tego adresu możesz uzyskać czy jest to zapis czy też odczyt i do którego z układów. Potem idą dane.
    I to w zasadzie tyle trzeba rozpoznawać start i stop aby nie zliczać ich jako danych. A resztę wprowadzasz jako daną 8bit.
    MOżesz ją przesłać przez RS-232 na port COM PC i zapisać do logu w dowolnym programie terminalowym.
    Uzyskujesz kolejne dane bez start i stop.
    Ponieważ ilość danych nie jest przytłaczająca można to "ręcznie" rozczytać.
  • #15
    frohme
    Level 21  
    :arrow: zumek

    Jak napisałem gdzieś na początku tego wątku bascom jest mi ideologicznie obcy i taki pozostanie. Jeżeli dla procesora i2creceive ma go od razu wprowadziś w tryb mastera to tylko potwierdza moje odczucia o tym "systemie". Tak dla wiadomości - miałem taką konieczność aby oprogramować sniffer i2c dawno temu i musiałem to zrobić jeszcze na .....Z80 w asemblerze wzorując się na notach Philipsa. Z tego co wiem do dzisiaj działa bez zarzutu.
  • #16
    zumek
    Level 39  
    frohme wrote:
    :arrow: zumek
    Jak napisałem gdzieś na początku tego wątku bascom jest mi ideologicznie obcy i taki pozostanie...

    Jakoś nie mogę tego nigdzie wyczytać ;)
    frohme wrote:

    ... Jeżeli dla procesora i2creceive ma go od razu wprowadziś w tryb mastera to tylko potwierdza moje odczucia o tym "systemie"...

    W jakim trybie pracuje uC na magistrali I2C , jest jednoznacznie określone w dokumentacji Bascoma.
    Tak wygląda składnia dla "spornej" instrukcji:
    I2CRECEIVE adres, zmienna
    I2CRECEIVE adres, zmienna, bajty_zapisywane, bajty_odczytywane
    Jak widać , ta instrukcja nie tylko czytac potrafi ;) i zawsze rozpoczyna się generowaniem (a nie oczekiwaniem) sekwencji START , a kończy STOP , co wyklucza jej użycie przy snifowaniu :D
    frohme wrote:

    ... Tak dla wiadomości - miałem taką konieczność aby oprogramować sniffer i2c dawno temu i musiałem to zrobić jeszcze na .....Z80 w asemblerze wzorując się na notach Philipsa. Z tego co wiem do dzisiaj działa bez zarzutu.

    I ja również , zrobił bym to w asemblerze - gdybym musiał podsłuchiwać - używając Bascoma :D

    Pozdrawiam
    Piotrek