Universal Logic Analyzer Board

I think i don’t need to convince anybody, how great device the logic analyzer is. This one leaves far behind every old-fashion LPT versions, as well as AVR with external RAM based ones. Depending on chosen PC application (the real analyzer part, actually), it can collect for an example, up to 24 millions of samples per second from 8 channels at the same time, and the buffer capacity is just our PC free RAM space…


Introduction

2Performance is impressive, completely sufficient for the hobbyist or even for professionals. It offers instant switching between over a dozen devices with one single button. Samples are sent in a real time by the Hi-Speed USB – it is recommended to use a short, high-quality USB cable. Since this is device cloning someones hard work (but how many of these are available on local or China market), so i won’t mention the names of these devices… but such information can be easily found on the web :) All these construction uses almost the same solution, and differs by additional elements such as buffers or protections. The main chip, CY7C68013A, can present itself to the system with any identifier, which is taken from external eeprom memory. So if we want to use this board with multiple PC applications (one is better than another), we need to change the content of this eeprom. Some of clones which are sell on the market, have two eeprom chips and a jumper, which allows the user to change identifier. This kind of solution is not very convenient, and it allows to set only two identifiers, or we can always solder additional eeproms and jumpers sets. Version presented here allows rapid switching between over a dozen identifiers with a single button hit, and also for each one, it automatically sets a direction of buffers, so it can work as analyzer or as generator.

How it works:

Identifiers switching is made using a tiny uC AVR, Attiny25. Attiny13 can be also used, it’s much more cheaper. Attiny25 was picked at the begining, because the first assumption was that, it would just EMULATE the I2C eeprom chip with help of built in USI module (universal serial interface) which can be also configured to work in I2C mode – it would be fast enough to work in his role. It internal eeprom was supposed to be divided for 16 or 8 byte fragments, used to saving identifiers. It task would be to rely on switching these memory fragments, and taking care for saving and reading while emulating mentioned I2C eeprom. That is – we press the button, Cypress chip is resetting, while in the same time our Attiny increases offset pointing at next memory fragment. Cypress i starting and read this memory as a standard eeprom chip, new device appears in system.

However this idea was abandoned because it wasn’t specially hard or impossible to make, but the new idea was born, much simpler. And it works like this:
1. Press of the button, Cypress chip reset and signal for the Attiny.
2. Attiny holds down this reset state with its own pin, until whole operation is finished.
3. Attiny communicates with our physical I2C eeprom on board (common I2C bus), and same like before offset is being increased, it reads new (next) identifier from internal eeprom memory, but this time it writes down these data in to physical eeprom.
4. Attiny switches his I2C lines in to input mode and releases Cypress reset.
5. Cypress starts and reads identifier from physical eeprom, as usual.

The benefits from that kind of solution are, much simpler realization, and a fact, that application sent in to main chip has a free access to the eeprom memory. In case of emulating, this would be very limited both from program side and capacity (small internal Attiny eeprom).

PCB:

1Two fast bi-directional 74LVC245A buffers are placed on the pcb, which can accept high state voltage from 2V to 5.5V, and low state from 0V to 0.8V, which allows analysis in basically every each logic circuits working with TTL voltages. Additionally, every each buffer output and input has an ESD protection (electrostatic discharge). Buffer has ability to switch the direction of all data lines, depending if our device is supposed to work as generator or analyzer. This task is also for Attiny, his two pins are controlling the direction of both buffers.

Eeprom size selector jumper is also on board, which must be connected accordingly with the CY7C68013 chip datasheet eeprom size table. This table says that for 16B to 256B memories (byte addressed), address pin A0 has to be set low, and for 4KB to 16KB (word addressed) up. If our memory will respond at address 160, main chip will now that it must to work with byte addressing. If memory won’t respond, then main chip will ask at address 162 – after respond it will know that it must to use word addressing. Small advice here, not every cloned devices will work with bigger memories, before soldering check what size of memory is used in original device.

Double-sided pcb with 41mm x 61mm dimensions, aligned for small Z-24A casing type. Board seen on pictures is in first revision, so it differs from board from the attachment (rev 1.1) and you can help yourself with those pictures because changes are not so big – mounting holes have been moved for better compatibility with Z-24A casing, I2C line selector (eeprom/attiny) jumper was removed, and the main chip reset pin was changed to not collide with ISP lines. Board seen on pictures has only one buffer, reason is silly – i made a mistake in parts ordering :) Applications that i use however do not makes a use from the second channel. In matter of fact, second channel has been added in reserve.

Identifiers:

Every each device identifier consist of VID and PIN numbers, presenting our device in the system. Change of these identifiers will cause device to present in the system as something else, f.e. as other analyzer or generator. Entry for CY7C68013 looks as follows:
C0 B4 04 13 86 00 00 00
C0 – says that after this VID i PID are placed
B4 04 – VID number
13 86 – PID number
00 00 00 – chip settings, not significant, set them to zeros.
Above identifier for “EZ-USB FX2LP”, our Cypress chip (also when eeprom will be empty) – thanks to this, it will be seen in EZ-USB console.
Please remember, switch the bytes when typing in identifiers words – LITTLE ENDIAN form. Real identifiers in above example are “04B4 8613” and in this way they will be seen in the system.

Identifiers list have been placed in the Attiny eeprom memory, not because it can’t fit in flash memory (program takes only 462 bytes or so), but because this kind of memory can be easily read and edited in usual binary editor. Not everyone wants to recompile the code, not everyone have that kind of compiler. Picture below shows how the identifiers are placed in the memory:

As seen, memory was divided for 8 byte fragments, so when writing down the identifiers, 0xC0 byte should be always placed after every 8 bytes (at 00, 08, 10, 18 addresses (hex)). First, code checks if the first byte is 0x0C – if not, then it acknowledges that it arrived to the end of the list and jumps at 00 address. Above example shows eeprom file construction. It contains 7 identifiers of different devices, each one starts from 0x0C byte, each takes 8 bytes in total.

Buffers directions are determined with two less significant bits in of last identifier byte. Bit 0 for buffer 1 (channels 0-7), bit 1 for buffer 2 (channels 8-15). Set low for input, set high for output. If same device / application can work as both analyzer and generator (and original design do not have any buffer), please use two identical identifiers, with different directions set. For example, after one press of the button we get X device working as an input, after second press we get also X device but working as a output. 128B memory of the Attiny25 can fit 15 identifiers – last 8 bytes are used by the code to hold settings (which device was last used, so you don’t have to go trough all of them when re-connected). Attiny13 will fit 7 identifiers, but be aware that code from attachment need changes before it can be used in other chip.


Assembly, getting started:

5Refer to the schematic. Cypress chip can be soldered using some regular flat soldering iron with help of large amount of fluxe. First apply a thin layer of solder on the pads, place the chip, and press all the legs with iron, like shown HERE. Careful soldering will result with less problems with launching. I do not recommend to leave fluxe under the chip, and board itself should be precisely washed, especially in crystal area. CY7C68013 is a bit capricious, it will not identify itself in the system if we make some little mistake. HERE is the AN15456 datasheet in which possible problems are described – it helped me a lot at the first try.

To get started, you just only have to install device driver for chosen device. I recommend to install the EZ-USB console first. It will work with the fabric identifier or without / empty eeprom. Driver is not signed, so you have to bypass this problem on some new systems. You can experience strange problem on vista/7 when device won’t show up in system until we wont manually point out the driver.

Gallery:

And this is how identifiers are changed (changing randomly on the movie, a bug in the early version of the program)

Files:
DOWNLOAD – Eagle 5.10 files: PCB, SCH, alternative PDF revision 1.1
HEX code, BAS source code version 1.03.



5.00 avg. rating (96% score) - 1 vote

46 Comments

  1. Witam. Zainstalowałem znaleziony na stronie Cypress’a sterownik dla win7 64bit. Urządzenie jest poprawnie wykrywane przez system niestety konsola EZ-USB go nie widzi. Masz jakiś pomysł?

    • Hmm ten problem rozwiązałem ale mam inny: w pamięci eeprom mam VID/PID dla USBee AX. Po podpięciu kabla usb wszystko działa, lecz odpalenie USBee powoduje zmianę zapisanego VID/PID i po ponownym podpięciu układ zgłasza się jako nieznane urządzenie i muszę wgrywać od nowa VID/PID. Na płytce mam dwie pamięci eeprom przełączane zworką. Ma ktoś pomysł czemu zmienia mi się VID/PID? Eeprom z numerami od Saleae działa normalnie.

    • Nie wiem czemu tak się dzieje, być może jakieś zabezpieczenie programu… w przypadku przedstawianego tutaj układu nie ma to znaczenia, bo eeprom za każdym razem jest uzupełniany odpowiednimi danymi :)

  2. Witam.
    A jaki program jest do obsługi tego analizatora.
    Jakie parametry ma analizator.
    Czy obsługuje jakieś protokoły tzn. dekoduje?

    • Witaj.

      Żeby była jasność, układ sam w sobie nie jest analizatorem, a jedynie płytką, dzięki której można sklonować komercyjne rozwiązania oparte o ten chip. Zdecydowałem że nie będę publikował szczegółów na ten temat, bo jak by nie patrzeć jest to czyjaś praca – jednakże w sieci można znaleźć mnóstwo informacji na ten temat.

      Ten wątek będzie pomocny: http://diy.elektroda.eu/forum/viewtopic.php?f=1&t=10

      Dwa najpopularniejsze to Saleae oraz Usbee (parametry oraz obsługiwane protokoły znajdują się na ich stronach).

  3. witam,
    czy płytka jest wykonana przez Ciebie? skąd nabyłeś CY7C68013 w tej obudowie???

  4. Zastanawiam się czemu na pcb w rarze projektu nie zawiera warsty miedzi na masę? (przeoczenie czy coś innego).

    Z ciekawości spróbowałem zrobić płytkę termotransferem (płytka nr 2 termotransferem w mojej karierze ;) … o ile nawet się udało to nie zauważyłem owego braku miedzi. Drugi problem z padami przelotek, kłopot z takim tycim wiertełkiem. Chyba skończy się na zamówieniu pcb w jakiejś firmie.

    • Jeśli chodzi o pole miedzi w pliku .brd, to po załadowaniu projektu w eagle, należy kliknąć na przycisk “ratsnest” – podstawy obsługi :)

      Nie podejmowałbym się wykonania takiej płytki w warunkach domowych :)

  5. W domu nawet da radę ją zrobić tylko przelotki trzeba by ciut powiększyć i poprzesuwać bo z nimi (wiercenie) największy wyszedł mi problem. Reszta wyszła całkiem znośnie, w tym pady pod cypressa.

    “ratsnest” – działa choć idea takiego rozwiązania w (podobno taka sama w wielu programach pcb jak i w) eagle jest mi nieznana :-)

    • Wiercenie wierceniem, ale co z połączeniem tych przelotek pod cypressem? Będzie trochę odstawał :)

      A powiedz, zamawiałeś układ z ebay? Ile Ci to wyszło?

  6. Trzeba będzie polutować przelotki na płasko (ew. rezultat trochę spłaszczyć pilnikiem/papierem ściernym). Myślę, że da radę – będzie eksperyment :-)

    Jeszcze nie kupowałem – najpierw próby z płytką, jak coś wyjdzie to na ebayu cypress jest po 40-50zł z przesyłką. Taniej ciężko znaleźć.

  7. … aha, te cypressy są taniej (CY7C68013A-56PVXC – 27zł z przesyłką) no ale to inna obudowa, przerabianie płytki etc.

    • Tak zgadza się płytka została zaprojektowana pod te większe dla tego że takie układy mieliśmy. Myślę że można się pokusić o przeprojektowanie pod te tańsze, wtedy więcej osób by się tym zainteresowało. Nie wiem jednak kiedy znajdę czas bo pewnie calutka płytka do zmiany będzie.

  8. Witam,
    które rezystory 0R należy wlutować dla pamięci AT24C02? Po uruchomieniu płytki i zainstalowaniu sterowników układ przedstawia się jako Cypress EZ-USB FX2LP No EEPROM(3.4.5.000). Wciskanie przycisku nie powoduje żadnych zmian.

    • Na linii SDA obydwa (R7 i R6), a linię A0 ustawić należy zgodnie z pojemnością kości – tj. R5 dla adresowanych bajtem, lub R6 dla adresowanych słowem. Polecam te pierwsze bo nie każdy analizator będzie na dużych chciał pracować.

      Przycisk jest bezpośrednio połączony z nogą reset cypressa, więc układ powinien się przynajmniej rozłączać.

  9. Na linii SDA wlutowałem obydwa, na linii A0 wlutowanie R8 nic nie zmieni gdyż jego pady są połączone, lecz dla pewności przlutowałem. W przypadku wlutowania R5, Vcc i GND zostanie zwarte. Niestety nie rozwiązuje to problemu. Po wciśnięciu przycisku układ się rozłącza i nic się nie zmienia.

    • Tak więc pozostaje źle zaprogramowany procesor.

      …aha, chwileczkę, jeśli masz zwarty R8 to znaczy że wlutowałeś kość eeprom adresowaną słowem? Jakiej pojemności, jeszcze dopytam? Kod z załącznika pracuje z kości adresowanymi bajtem, jak zajrzysz w źródło to zobaczysz zakomentowany fragment kodu który powinien działać z twoim eepromem. Po prostu usuwasz komentarz z “init i2c eeprom (word addressed)” i zakomentowujesz fragment “init i2c eeprom (byte addressed)”.

  10. Wsad dla procesora Attiny 13A należy zmienić czy można wgrać oryginalny z załącznika?

    • Rezystor R8 jest zwarty na stałe. Tak jest w wersji płytki z załącznika. Jego wlutowanie czy wylutowanie nic nie zmieni gdyż jego pady i tak pozostaną zwarte. Rezystora R5 nie można wklutować gdyż zewrze on linie Vcc i GND ponieważ rezystor R8 jest zwarty. Moja pamięć to http://www.tme.eu/pl/details/at24c02c-sshm-b/pamieci-eeprom-szeregowe/atmel/# o pojemności 2kbit.

    • No, to kolego, adres A0 należy ustawić zgodnie z tym co wyżej napisałem, w nocie Twojej pamięci też to będzie. Ścieżka między padami to tylko domyślne ustawienie, jeśli nie odpowiada to scieżkę ciach i ustawiamy po swojemu.

      Program skompilowany pod attiny25 oczywiście nigdy w życiu nie ruszy pod attiny13. Nie uruchamiałem tego kodu na attiny13 i podejrzewam że po za zmianą deklaracji procesora będzie wymagał jeszcze innych zmian takich jak prędkość taktowania i zmianę kolejności portów, niestety nie mam przy sobie żadnych dokumentacji żeby to porównać. Rozumiem że będziesz potrzebował przy tym pomocy?

  11. Piny nie różnią się w obu procesorach. Z przerobieniem programu nie dam rad, nigdy nie pisałem w Bascomie..

    • Ok w poniedziałek postaram się przekompilować to pod T13 ale nie obiecuję.

    • Kupiłem już Attiny25, zaprogramowałem i przylutowałem. Niestety nadal jest kłopot, urządzenie nie zostaje rozpoznane przez system. Jaką pamięć kolega zastosował w układzie? Być może moja jest nieodpowiednia.

    • Pamięć spełnia wymóg 400kHz przy 3.3V więc jest ok. Czy procek na pewno jest dobrze zaprogramowany? Zawartość jego pamięci eeprom również musi zostać zapisana (plik eep).

    • Procesor zaprogramowany, także eeprom, weryfikacja przeszła pomyślnie, fusy takie jak fabryczne. Rezystory 0R przylutowane: R6, R7, R5, ścieżka zwierająca pady lutownicze R8 przecięta. Po sprawdzeniu miernikiem wszystko jest ok. Sprawdziłem wszystko pod względem montażu i nie zaauważyłem błędów. Po podlączeniu do komputera układ przedstawia się jako EZ-USB FX2LP No EEPROM. Przyciśnięcie przycisku powoduje zniknięcie układu z listy menedżera urządzeń, po dłuższej chwili pojawia się komunikat o awarii urządzenia USB następnie pojawia się nieznane urządzenie.

    • Chciałem podesłać Ci link gdzie opisywałem jak ręcznie zmienić zawartość eepromu poprzez konsolę EZ-USB – http://mdiy.pl/forum/viewtopic.php?p=194

      Niestety od przenosin serwera stare załączniki nie działają na forum i nie wiem jak to naprawić, w podlinkowanym poście był jeszcze obrazek z oznaczonymi przyciskami w programie, ale może poradzisz sobie bez niego. Jest też taki link http://www.cypress.com/?id=4&rID=34121 do instrukcji na ich stronie.

      Możesz w ten sposób ręcznie zmienić zawartość eepromu i zobaczyć co się stanie. Najlepiej odepnij I2C attiny wylutowując zworkę, tak aby nie namieszała przy resecie, i będzie wiadomo czy układ w ogóle chce startować z innymi PID i VID.

      Jaki masz system operacyjny w komputerze? Podobno na tych inteligjentnych (powyżej XP) urządzenie potrafi się właśnie przedstawić jako nieznane lub nawet z błędem, jeśli na siłę nie poda się sterowników. Sam tego nie mogę potwierdzić bo jadę na XP ale znajomy który to uruchamiał przeszedł przez masę problemów a chodziło o sterownik. Ewentualnie jak pojawi się jako “nieznane” to zajrzyj w menedżerze, właściwości, i powinien być podany VID i PID.

    • Mój system operacyjny to Windows 7 x64. Po podłączeniu zasilania identyfikator to USB\VID_04B4&PID_8613 więc wszystko się zgadza. Po wciśnięciu przycisku identyfikator zmienia się na USB\VID_0000&PID_0000\5&1E41AFF0&0&4 więc coś jest nietak.. Znalazłem trochę czasu (sesja) i zaprogramowałem procesor (pliki hex i eep), weryfikacja przeszła pomyślnie. Przylutowałem nowy, więc jestem na sto procent pewny, że procesor jest sprawny i odpowiednio zaprogramowany. Pamięć także zmieniłem na AT24C04N. Rezystory 0R wlutowane: R5, R6, R7. Może coś nietak z plikiem eep z załącznika? Sam już nie wiem gdzie szukać błędu.

    • Zajrzałem do pierwszej z brzegu noty AT24C04N napisano w niej że 400kHz jest dostępne przy 5V, przy niższych napięciach tylko 100kHz. A ma być 400kHz przy 3.3V. Ale podejrzewam że nie jest to pełne oznaczenie, musisz odszukać jej właściwą notę i sprawdzić.

      Plik eepromu jest w formacie HEX i taki trzeba wybrać w programatorze, być może był wgrywany jako binarny?

      Po przyciśnięciu przycisku zgłasza się z wyzerowanym PID i VID, ale po odcięciu i ponownym podłączeniu zasilania znów jest identyfikator fabryczny? Jeśli tak, to znaczy że program działa ale nie daje rady nic zapisać do pamięci.

      Czy możesz wykonać instrukcje z mojej wcześniejszej odpowiedzi, wtedy będziemy wiedzieli czy do pamięci jest coś zapisywane i co.

    • Był wgrywany jako binarny niestety..
      Chciałem spróbować wgrać wszystko za pomocą BASCOM jednak gdy kompiluje program wyskakuje błąd w liniach:
      Portb.1 = Buffers.0 ERAM variable can not be esed [BUFFERS.0]
      Portb.3 = Buffers.1 ERAM variable can not be esed [BUFFERS.1]

      Programowałem wcześniej za pomocą AVR Burn-O-Mat w Flash wybierałem plik 1.03.hex, następnie write i werify. Następnie wybierałem eeprom ze wskazaniem pliku 1.03.eep (pliku 1.03.hex nie da się wgrać) i podobnie jak wcześniej write i werify.

      Podejrzewam, że dobrze zaprogramować mogę wszystko przez BASCOM po skompilowaniu programu.

      Za jakiś tydzień będę miał dostęp do programatora EEPROM więc wylutuję pamięć, zaprogramuję i sprawdzę czy działa.

    • No i tu jest pies pogrzebany. Wybierz plik 1.03.eep a obok zmień typ na Intel HEX i pójdzie dobrze. Program może nie rozpoznawać bascomowskiego rozszerzenia eep.

      Program kompiluje się ok, nie pamiętam na jakiej wersji bascoma, ale na pewno coś z tych nowych 2.0.cośtam. Być może masz starszy.

  12. Trafiłem tu przez przypadek w sumie i po pierwszym akapicie mam od razu pytanie:

    “…potrafi np. zbierać 24 miliony próbek na sekundę z 8 kanałów jednocześnie…”
    24*8*8=1,5Gb/s
    jak to możliwe?? A są to tylko dane 8 bitowe. Jeśli przetwornik jest więcej bitowy? powiedzmy 2 bajty a nie jeden (do 16 bitów) to daje nam 3Gb/s, a dolicz jeszcze protokół (warstwa aplikacji, fizyczna…) to prędkość do obsługi takiego próbkowania musiałaby wzrosnąć jeszcze o kilkanaście albo kilkadziesiąt procent….
    Jak to możliwe, żeby przez usb tyle osiągnąć?

    • OK, widzę swój błąd, to nie przetwornik:) a 8 kanałów to jeden bajt, co daje 24*8=192 Mb/s danych + protokół co i tak jest mocno wyśrubowaną prędkością, nawet dla USB3.

  13. P.S. Co ja gadm przez usb, jak pecet to obsłuży???

  14. Nie wnikałem w Twoje obliczenia, ale jeśli 192Mb/s podzielimy jeszcze przez 8 to wyjdzie 24MB/s co USB2.0 obsłuży – chyba że to wcześniejsze to literówka :)

    Masz rację nie da się przesłać tyle próbek, w rzeczywistości wygląda to tak że jeśli walimy na 8 kanałach jednocześnie bardzo gęste zmiany stanów to po chwili program proponuje niższe próbkowanie bo z takim sobie nie radzi. W zacytowanym przez Ciebie opisie jest błąd, powinno być “do 24 milionów próbek” – w angielskiej wersji opisu jest poprawnie a tu się walnąłem.

    Na szczęście, w praktyce nie miałem jeszcze potrzeby badania urządzenia które obracało by taką ilością danych, jeśli było szybko to tylko na jakimś SPI, a jeśli było dużo kanałów to jakaś transmisja równoległa ale wolniejsza. Działa to tak że przesyłane są tylko faktyczne dane a puste próbki omijane, dzięki temu przepustowość USB jest wykorzystywana elastycznie.

    Co do PC, jeśli jest szybki to poradziłby sobie z odbiorem takich danych bez problemu, ale 2GB RAM zapełniłby w kilka sekund.

  15. Masz może do sprzedania pcb i resztę elementów od tego cuda, albo gotową płytkę?

  16. Powielam pytanie o PCB. Odkupiłbym 2szt

  17. Czy analizator działa w trybie 16bit’ow ?

  18. Bardzo mi sie podoba wykonanie tego analizatora, czy jest mozliwosc kupienia od Pana tego urzadzenia i w jakiej cenie??

  19. Skąd można pobrać programy do obsługi tego urządzenia?

  20. Tak dziś przypadkiem mi to w oko wpadło że to Cypress. Mam oryginalną UPA z Elrasoft`u i ją można rozłożyć. Otrzymujemy osobny moduł z Cypressem i gniazdem 40 pinowym. Musze sie temu przyjrzeć albo znaleźć schamat do UPA. Zgłasza się jako EEprom Missing ale można by z UPA jeszcze coś nowego wyciągnąć ;)

  21. Witam,
    Czy nie uzyskam podobnych możliwości z analizatorem 8 kanałowym firmy Saleae (i jego klonowi) ?

  22. Witajcie, planuję budowę tego analizatora i prawdopodobnie będę zamawiał płytki w firmie. Z tego co widzę koszt 10szt to 13$. Gdyby ktoś chciał kupić PCB to proszę o kontakt, o ile cena produkcji się nie zmieni to jedna sztuka będzie po 1.3$ + wysyłka czym kto chce.

Leave a Reply

Your email address will not be published. Required fields are marked *

Please leave these two fields as-is: