Logic Analyzer 2 σε 1

Ψάχνοντας για USB logic analyzers στο ebay έπεσε το μάτι μου σε ένα development board με την ονομασία CY7C68013A mini board από την LCSOFT με κόστος €5. Στην περιγραφή του προϊόντος ανέφερε ότι είναι ένα 24MHz 8 channels USB logic analyzer. Σε άλλα listings στο ebay για το ίδιο development board αναφέρεται ότι πρόκειται για ένα Saleae logic analyzer, οπότε κατάλαβα πως πρόκειται για κλώνο του Saleae. Αφού το παρήγγειλα ξεκίνησα να ψάχνω για τις δυνατότητές και την αξιοπιστία του.

Τα περισσότερα ευρήματα μου ανέφεραν πως κάποτε λειτουργούσε ως Saleae logic analyzer αλλά οι τελευταίες εκδόσεις του software εντοπίζουν ότι δεν είναι γνήσια συσκευή αλλά κλώνος και δεν λειτουργεί. Μόλις το παρέλαβα άνοιξα το software του Saleae για OS X και αφού σύνδεσα την πλακέτα στον υπολογιστή, το πρόγραμμα κράσαρε. Επιβεβαιώθηκαν όσα διάβασα για την δυσλειτουργία του αλλά για να κράσαρε το πρόγραμμα σημαίνει πως αναγνωρίστηκε έστω ως κλώνος.

Πάνω στην πλακέτα βρίσκεται μία EEPROM (24LC128) που έχει αποθηκευμένα τα VID/PID του Saleae. Αυτό κάνει τον υπολογιστή να αναγνωρίζει τι συσκευή έχει συνδεθεί. Αναζητώντας λύσεις διάβασα πως με την αντικατάσταση της EEPROM το πρόβλημα έχει λυθεί σε αρκετούς αλλά όχι σε όλους. Θα μπορούσε, όπως ανέφεραν πολλά σχόλια, να αναγνωρίζεται η διαφορετική EEPROM του κλώνου από την ταχύτητα ανάγνωσης της μνήμης. Το πρόβλημα όμως δεν οφείλεται εκεί αλλά στο διαφορετικό memory addressing της μνήμης 24LC128 (16-bit) από την 24C00 (8-bit) του γνήσιου Saleae. Έτσι όσοι δοκίμασαν EEPROMs με 8-bit memory addressing κατάφεραν να χρησιμοποιήσουν τον κλώνο ως Saleae logic analyzer.

Αν αλλαχθεί η EEPROM θα πρέπει να γράψουμε τα VID/PID για να αναγνωριστεί η συσκευή όπως περιγράφεται εδώ. Στο jwandrews βρήκα οδηγίες για μετατροπή της συσκευής από Saleae σε USBee ZX, αλλάζοντας τα VID/PID της EEPROM. Στο Spiralbrain’s Blog παρουσιάζεται μία μετατροπή της συσκευής με δύο EEPROMs. Αφαιρέθηκε η 24LC128 από την πλακέτα και χρησιμοποιήθηκαν δύο εξωτερικές 24C16, μία με τα VID/PID για το Saleae και μία με τα VID/PID για το USBee ZX. Με ένα jumper επιλέγεται ποια από τις δύο μνήμες θα συνδεθεί με την πλακέτα και ως τι logic analyzer θα αναγνωριστεί από τον υπολογιστή. Στο Solara’s Post παρουσιάζεται μία ακόμη πιο ενδιαφέρουσα κατασκευή που δεν χρειάστηκε καν να αφαιρεθεί η EEPROM από το board, παρά μόνο η προσθήκη μίας εξωτερικής EEPROM και ενός διακόπτη για την επιλογή της μνήμης που θα χρησιμοποιηθεί. Μιας που το Saleae έχει πρόβλημα με την 16-bit μνήμη, χρησιμοποιήθηκε η εξωτερική μνήμη (8-bit) για το Saleae και η ενσωματωμένη 24LC128 για το USBee ZX.

Το Saleae χρησιμοποιεί μία 8-bit 24C00. To driver του Saleae διαβάζει την EEPROM στην θέση 0xA0 και ελέγχει αν ανταποκρίνεται σε αίτημα 8-bit μνήμης. Υπάρχει ένα jumper στο CY7C68013A dev board (κάτω δεξιά). Αφαιρώντας το κάνει boot σε default mode ενώ με το jumper στη θέση του διαβάζεται το configuration από την 24LC128 στην θέση 0xA2. Για να χρησιμοποιηθεί ως boot rom πρέπει να βρίσκεται στη θέση 0xA2 (τοποθετημένο jumper). Ακόμη κι αν συνδέσουμε την συσκευή στον υπολογιστή με τοποθετημένο το jumper και το αφαιρέσουμε πριν το ελέγξει το driver του Saleae, θα αναγνωριστεί ως 16-bit μνήμη και δεν θα ανταποκρίνεται σε αιτήματα 8-bit. Έτσι ο μόνος τρόπος να λειτουργήσει ως Saleae είναι με 8-bit μνήμη αλλά δεν είναι απαραίτητη η αφαίρεση της EEPROM από το board. Με τοποθετημένο το jumper η 24C128 είναι στη θέση 0xA2 αφήνοντας ελεύθερη τη θέση 0xA0 για μία 8-bit που μπορούμε να συνδέσουμε εξωτερικά στα SCL, SDA. Το CY7C68013A κάνει boot από την θέση 0xA0 αν είναι διαθέσιμη. (kudos to BWF2 για την έρευνά του)

Κόλλησα σε μία διάτρητη πλακέτα μία μνήμη 24C01 και έναν διακόπτη. Ο διακόπτης συνδέει το pin 5 της εξωτερικής 24C01 με το SDA pin. Όταν είναι ανοικτός η πλακέτα αναγνωρίζεται ως USBee ZX και όταν κλείσει αναγνωρίζεται ως Saleae. Το pin 6 συνδέεται με το SCL pin, το pin 8 με το 3.3V, και τα pins 1,2,3,4,7 με το GND. Όπως και στο Solara’s Post αποθήκευσα τα VID/PID του USBee ZX στην ενσωματωμένη EEPROM (γιατί να πάει χαμένη;) και τα VID/PID του Saleae στην εξωτερική.

Η διαδικασία που ακολούθησα σε Windows 7:

  1. Απεγκατάσταση του Saleae Logic Driver
  2. Εγκατάσταση του Cypress EZ-USB development kit (cy3684_ez_usb_fx2lp_development_kit_15.exe).
  3. Εγκατάσταση του Cypress Suite USB (CySuiteUSB_3_4_7_B204.exe) που περιέχει το driver για το development board για Windows 7
  4. Επεξεργασία του αρχείου C:\Cypress\Cypress Suite USB 3.4.7\Driver\bin\wlh\x64\cyusb.inf για να περιλαμβάνει τα VID/PID του development board και να αναγνωριστεί από το CyConsole. Αντικατάσταση των USB\VID_XXXX&PID_XXXX με USB\VID_0925&PID_3881. Uncomment (αφαίρεση ερωτηματικών) από τις γραμμές %VID_0925&PID_3881.DeviceDesc%=CyUsb, USB\VID_0925&PID_3881.
  5. Disable Driver Signature Enforcement για να μπορεί να εγκατασταθεί το driver του cypress.
  6. Εγκατάσταση του driver.
  7. Εκκίνηση του CyConsole, επιλογή EZ-USB Interface από το μενού Options.
  8. Πατάμε Download για να φορτώσουμε το firmware: C:\Cypress\USB\Examples\FX2LP\Vend_ax\Vend_Ax.hex
  9. Ανάγνωση του περιεχομένου της EEPROM: Στο ‘Req‘ επιλέγουμε ‘0xA2‘, στο ‘Length‘ βάζουμε ‘8‘ και στο ‘Dir‘ επιλέγουμε ‘1 IN‘. Πατάμε ‘Vend Req‘ και θα πρέπει να δούμε 8 bytes σε δεκαεξαδική μορφή που ξεκινάνε με ‘C0’. Π.χ. αν είναι κλώνος Saleae πρέπει να δούμε ‘C0 25 09 81 38 1B 00 00′ (VID: 0925 και PID: 3881).
  10. Επαναπρογραμματίζουμε την ενσωματωμένη μνήμη μετατρέποντάς το σε κλώνο USBee ZX (VID: 08A9 και PID: 0005). Στο ‘Dir‘ βάζουμε ‘0 OUT‘, εισάγουμε τα bytes ‘C0 A9 08 05 00 84 23 00‘ και πατάμε ‘Vend Req‘.
  11. Επανεγκατάσταση του Cypress USB driver βάζοντας τα VID/PID του USBee ZX στο cyusb.inf (βήμα 4) ώστε να αναγνωριστεί η συσκευή από το CyConsole.
  12. Προσθήκη της εξωτερικής EEPROM (κλείσιμο διακόπτη).
  13. Με τον ίδιο τρόπο όπως στο βήμα 10 γράφουμε στη θέση ‘0xA2‘ τα bytes ‘C0 25 09 81 38 1B 00 00‘ κάνοντάς το κλώνο του Saleae.

Η συσκευή πλέον πρέπει να αναγνωρίζεται ως USBee ZX ή ως Saleae όταν κλείνουμε τον διακόπτη και συνδέεται η εξωτερική EEPROM με το board. (εφόσον εγκαταστήσουμε το USBee Suite, το USBee ZX Digital Test Pod Software και το Saleae software)

Ενδιαφέρον φαίνεται το open source project sigrok που είναι συμβατό με το CY7C68013A mini board.

Αργότερα θα προσθέσω αντιστάτες και διόδους για προστασία του board.

Leave a Reply

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