Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Tester urządzeń i2c, skaner i2c na FT232

mlodedrwale 24 Cze 2013 16:37 18039 16
  • Dzień dobry!
    Dzisiaj chciałbym przedstawić skaner urządzeń na i2c oparty o układ FT232.
    Moduł FT232 podłączamy bezpośrednio do urządzenia/magistrali bez pośrednictwa mikrokontrolera! Wystarczy podłączyć którekolwiek (z następującyh pinów: TXD; RXD; RTS#; CTS#; DTR#; DSR#; DCD#; RI#) FT232 do linii SCL i SDA, podpiąć rezystory pullup i gotowe!

    Tester urządzeń i2c, skaner i2c na FT232

    Oprócz możliwości skanowania magistrali w celu wykrycia urządzeń, za pomocą programu można też przeprowadzić podstawowe testy urządzeń, zapisywać i odczytywać z nich dane. Do opisu komunikacji służy prosty "para - język" składający się z następujących komend:

    Code:
    start adres r/w (noack)
    
    write bajt_do_zapisania (noack)
    read Etykieta
    repstart adres r/w (noack)
    stop

    cls
    delay czas_w_ms


    bardziej szczegółowy opis komend znajduje się na stronie programu.

    Tester urządzeń i2c, skaner i2c na FT232

    Do wad programu należy z pewnością bardzo wolne działanie. Nie udało mi się zmusić FT232, by w trybie bitbang działał szybciej :( Jeśli ktoś ma jakiś pomysł, to proszę o pomoc!

    W załączniku umieszczam program - instalator i pliki źródłowe.
    Mam nadzieję, że program się komuś przyda!

    Pozdrawiam!

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    mlodedrwale
    Poziom 12  
    Offline 
    mlodedrwale napisał 94 postów o ocenie 153, pomógł 1 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #3
    mlodedrwale
    Poziom 12  
    Masz całkowitą rację!
    Poniżej zamieszczam schemat blokowy takiego podłączenia:

    Tester urządzeń i2c, skaner i2c na FT232

    Mam nadzieję, że teraz jest wszystko zrozumiałe.
  • #4
    sylwek_b86

    Poziom 15  
    Witam, Projekt bardzo fajny i przydatny, jednak mam pewno pytanie, a mianowicie czemu linia SDA jest podłączona tylko do RXD ? Przecież jest to linia dwukierunkowa... A RXD jest tylko wejściem. W jaki sposób odbywa się komunikacja do ukłądu na I2C... Jak zapisywany jest np adres do układu I2C?
  • #5
    mlodedrwale
    Poziom 12  
    sylwek_b86. FT232, oprócz zwykłego trybu przejściówki USB-RS232 ma tryb bitbang, w którym 8 wymienionych w pierwszym poście tego wątku pinów działo jako porty wejścia - wyjścia. Jeśli przełączymy się na bitbang mode i ustawimy stan wysoki na dowolnym z tych 8 pinów, np na TXD, możemy badać, czy na tej linii jest rzeczywiście stan wysoki, czy badane urządzenie zwarło ją do masy :)

    Funkcja bitbang jest niestety dość powolna.
  • #6
    sylwek_b86

    Poziom 15  
    mlodedrwale napisał:
    sylwek_b86. FT232, oprócz zwykłego trybu przejściówki USB-RS232 ma tryb bitbang, w którym 8 wymienionych w pierwszym poście tego wątku pinów działo jako porty wejścia - wyjścia. Jeśli przełączymy się na bitbang mode i ustawimy stan wysoki na dowolnym z tych 8 pinów, np na TXD, możemy badać, czy na tej linii jest rzeczywiście stan wysoki, czy badane urządzenie zwarło ją do masy :)

    Funkcja bitbang jest niestety dość powolna.


    Dzięki za cenną informacje.
  • #7
    JarekC
    Poziom 28  
    Wolne działanie to problem FT232R, FTDI nie zaleca stosowanie tego trybu w tym układzie.
    Polecany jest FT2232D lub H. Dla tych układów są specjalne biblioteki.
    Szczegóły tutaj:
    http://www.ftdichip.com/Support/SoftwareExamples/MPSSE.htm

    Pomimo wolnego działania, programik fajny.
    Jedynie czego mi brakuje to opcji/rozkazu pozwalającego na blokowy odczyt.
    Bo jak aktualnie odczytać np 32kB z pamięci 24LC256.

    Pozdrawiam
    JarekC
  • #8
    mlodedrwale
    Poziom 12  
    JarekC, czyli tak jak myślałem, z popularnych FT232 za wiele się nie wyciśnie w trybie bitbang. Niestety większość tanich przejściówek bazuje na tym właśnie układzie. Dzięki za informacje, jak będę kupował kiedyś przejściówkę, to spróbuję właśnie taką szybszą znaleźć i zobaczyć jakie ma możliwości.

    Co do blokowego odczytu, to myślałem o dodaniu jakichś prostych pętli, które by umożliwiały np odczyt większej ilości danych. Na razie muszę sobie przemyśleć jak to zrobić (dopiero uczę się programować) i może dodam tę funkcję, skoro jest zainteresowanie :)

    A co do odczytu/ zapisu pamięci, to wydaje mi się, że lepszy byłby dedykowany program, nawet myślałem, żeby taki napisać, ale zniechęciło mnie powolne działanie :(, ale zastanowię sie jeszcze nad tym!
  • #9
    bodzio667
    Poziom 18  
    Do autora tematu.
    Jak ustawić tryb BitBang w scalaku FT232BL ? FT Prog wyświetla go jako FT232/FT245BM.

    Chce zbudować interfejs by przeskanować szynę I2C, jako linie chce użyć TxD i RxD.

    Programik sie przy próbie komunikacji wywala

    Code:
    Szczegółowe informacje na temat wywoływania debugowania w trybie JIT (just in time)
    
    zamiast tego okna dialogowego znajdują się na końcu tego komunikatu.

    ************** Tekst wyjątku **************
    FTD2XX_NET.FTDI+FT_EXCEPTION: An unexpected error has occurred when trying to communicate with the FTDI device.
       w FTD2XX_NET.FTDI.ErrorHandler(FT_STATUS ftStatus, FT_ERROR ftErrorCondition)
       w FTD2XX_NET.FTDI.SetBitMode(Byte Mask, Byte BitMode)
       w IICTester.Form1.buttonScan_Click(Object sender, EventArgs e)
       w System.Windows.Forms.Control.OnClick(EventArgs e)
       w System.Windows.Forms.Button.OnClick(EventArgs e)
       w System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       w System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       w System.Windows.Forms.Control.WndProc(Message& m)
       w System.Windows.Forms.ButtonBase.WndProc(Message& m)
       w System.Windows.Forms.Button.WndProc(Message& m)
       w System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       w System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       w System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** Zestawy załadowane **************
    mscorlib
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.296 (RTMGDR.030319-2900)
        CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    IICTester
        Wersja zestawu: 1.0.0.0
        Wersja Win32: 1.0.0.0
        CodeBase: file:///C:/Users/Bodzio/AppData/Local/Apps/2.0/OOODV2JW.JEY/PBP1CYAO.E3J/iict..tion_411c6e3b5f1f12cc_0001.0000_e21108ec1b210281/IICTester.exe
    ----------------------------------------
    System.Windows.Forms
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.1002 built by: RTMGDR
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.1001 built by: RTMGDR
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.1001 built by: RTMGDR
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    FTD2XX_NET
        Wersja zestawu: 1.0.14.0
        Wersja Win32: 1.0.14.0
        CodeBase: file:///C:/Users/Bodzio/AppData/Local/Apps/2.0/OOODV2JW.JEY/PBP1CYAO.E3J/iict..tion_411c6e3b5f1f12cc_0001.0000_e21108ec1b210281/FTD2XX_NET.DLL
    ----------------------------------------
    System.Data
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.237 (RTMGDR.030319-2300)
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
    ----------------------------------------
    System.Core
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.233 built by: RTMGDR
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
    ----------------------------------------
    System.Xml
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.233 built by: RTMGDR
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Numerics
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.1 built by: RTMRel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
    ----------------------------------------
    System.Windows.Forms.resources
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.1 built by: RTMRel
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_pl_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    mscorlib.resources
        Wersja zestawu: 4.0.0.0
        Wersja Win32: 4.0.30319.1 (RTMRel.030319-0100)
        CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_pl_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------

    ************** Debugowanie w trybie JIT **************
    Aby włączyć debugowanie w trybie JIT (just-in-time), plik .config tej
    aplikacji lub komputera (machine.config) musi mieć
    wartość jitDebugging ustawioną w sekcji system.windows.forms.
    Aplikacja musi być również skompilowana z włączonym
    debugowaniem.

    Na przykład:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>

    Gdy debugowanie JIT jest włączone, wszystkie nieobsługiwane wyjątki
    są wysyłane do debugera JIT zarejestrowanego na komputerze
    i nie są obsługiwane w tym oknie dialogowym.



    Dzięki.
  • #10
    mlodedrwale
    Poziom 12  
    bodzio667, przypuszczem, że wygląda to tak samo(bardzo podobnie) jak w przypadku FT232R, najlepiej sprawdzić to w dokumentacji producenta. Zobacz jakie są różnice między obsługą tego FT232BL a FT232R, przypuszczam że różnice są znikome, a jak to jest zrobione dla FT232R możesz zobaczyć przeglądając kod źródłowy mojego projektu :)

    EDIT:
    Widzę, że w moim programie brakuje obsługi wyjątków :)

    Spróbuj w Ft232r_bitbang.cs, w linii 47 zamienić FT_BIT_MODE_SYNC_BITBANG na FT_BIT_MODE_ASYNC_BITBANG ?
  • #11
    bodzio667
    Poziom 18  
    Cześć, można prosić o kompilacje uwzględniająca tryb asynchroniczny ? Moje środowisko nie ma jakiegoś certyfikatu i nie chce się skompilować.

    Dzięki.
  • #13
    dominon
    Poziom 18  
    Sprawdzał ktoś może czy działa to z innymi przejściówkami USB -> RS232 ?
    W końcu FT232 identyfikuje sie jako zwykły COM.
  • #14
    mlodedrwale
    Poziom 12  
    Ale ta przejściówka nie korzysta z wirtualnego coma, tylko komunikuje się bezpośrednio z układem FT232.

    Pozdrawiam!
  • #15
    bodzio667
    Poziom 18  
    Musze przyznać że ten program namieszał mi w systemie. Nie mogę go uruchomić bo od razu się wywala, usunąć tez go nie mogę bo się pojawia że jest już zainstalowany z innej lokalizacji ? WTF nie wiem o co chodzi.

    Code:
    SZCZEGÓŁY BŁĘDÓW
    
       Podczas tej operacji zostały wykryte następujące błędy.
       * [2013-07-05 00:20:25] System.Deployment.Application.DeploymentException (InvalidShortcut)
          - Format skrótu jest nieprawidłowy.
          - Źródło: System.Deployment
          - Ślad stosu:
             w System.Deployment.Application.ShellExposure.ParseAppShortcut(String shortcutFile, DefinitionIdentity& subId, Uri& providerUri)
             w System.Deployment.Application.ApplicationActivator.ProcessOrFollowShortcut(String shortcutFile, String& errorPageUrl, TempFile& deployFile)
             w System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
             w System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)
  • #16
    mlodedrwale
    Poziom 12  
    bodzio667 napisał:
    Cześć, można prosić o kompilacje uwzględniająca tryb asynchroniczny ? Moje środowisko nie ma jakiegoś certyfikatu i nie chce się skompilować.


    bodzio667 napisał:
    Nie mogę go uruchomić bo od razu się wywala, usunąć tez go nie mogę bo się pojawia że jest już zainstalowany z innej lokalizacji ?


    Hej! Możesz napisać coś o swoim środowisku? Jaka wersja frameworka jaki system?

    Żeby Ci pomoc muszę mieć chociaż podstawowe informacje :|
  • #17
    kosster
    Poziom 12  
    Ciekawe ale jakoś nie działa tak jak powinno. Problem pojawia się z bardzo nierównym CLK tzn częstotliwość jest bardzo różna (teoretycznie nie ma wpływu na pracę) ale nie ładne jest to. Skanowanie urzadzeń podłączonych z błędnym odczytem adresu na poziomie 20-30%. Próba odczytu kilku bajtów z eepromu kończy się niepowodzeniem. Maksymalna ilość odczytanych danych to 1 bajt. Próba ponowienia transmisji startem lub repstart kończy się brakiem ACK ze strony układu badanego (24C128). Polecenie delay nie działa. Być może to wina windowsa 8.1 64bit.