Hacking the ScanaQuad SQ50: upgrade to SQ200 - Page 1
Forum section: electronics / testgear

author: sys64738
author_rank: Newbie
timestamp: May 27, 2025, 11:38:12 pm
content: Here's a fun thing I finished up last Friday evening:NOTE: everything I know has only been tested with PCB rev. 1.4, and ScanaStudio 4(5 doesn't run on my computer for some reason). My SQ50 is already a few years old, and thus mightn't be running the newest bitstream either.This is also only about the SQ50 and up, I'm less certain about the SQ25 because the specs differ quite a bit and I don't have one to check.But with that out of the way,Ikalogic ScanaQuad devices share the same Spartan 3AN bitstreamandPCB design. The only way they differ are fewer or more SRAM chips on the PCB (for sample data), and the USB product and serial number strings reported by the FT240X chip, which is configured in its EEPROM. (My SQ50 is also missing a single MSOP8(?) chip on the bottom side, I don't know if it's used for anything useful in higher-end devices.)And yes, ScanaStudio only checks these values, nothing from the FPGA itself. A friend and I reversed the entire USB protocol used by the SQ series to check this. I have written a half-finished sigrok driver for it somewhere, but abandoned it when I discovered sigrok and PulseView kinda suck to use, actually. But asking my SQ50 to sample at 200 MSPS and it happily complying is how I discovered all this in the first place.Upgrading it is thus relatively simple:Solder extra sample SRAM chips onto the board (original part number on mine was ISSI IS61WV25616EDBLL-10TLI, but I guess any compatible RAM will work).Note that with bad soldering (shorts), the FT240X will still enumerate, but the FPGA most likely won't work, making it annoying to debug.Flash the FT240X EEPROM with the new desired product string and serial number.BACK UP YOUR EEPROM BEFORE CHANGING IT, AS WRITING IT MAY CAUSE A BRICK. For example, change theScanaQuad SQ50product string toScanaQuad SQ200, and the1003050XXXXXXserial number to1003200XXXXXX. (Most bricks were caused by me fumbling around withftdi_eeprombefore moving topyftdi, though.)This can be done relatively easily withpyftdi(a more elaborate version of this script, with extra command line arguments to specify stuff and recover from a broken/wiped FTDI EEPROM, has been attached below):Code:import os, pyftdi.eeprom, pyftdi.misc, usbNEWID = 200 # change to 50, 100 or 200eeprom = pyftdi.eeprom.FtdiEeprom()eeprom.open(usb.core.find(idVendor=0x0403, idProduct=0x7fd0))eeprom.dump_config()if not os.path.exists("eeprom-backup.bin"): with open("eeprom-backup.bin", "wb") as f: f.write(eeprom.data)eeprom.set_product_name("ScanaQuad SQ%d" % NEWID)eeprom.set_serial_number(eeprom.serial[:4] + ("%03d"%NEWID) + eeprom.serial[6:])eeprom.commit(dry_run=True) # set to false if you're confident enough and have made a backupprint(pyftdi.misc.hexdump(eeprom.data)); eeprom.dump_config()I've done this to my SQ50, and ScanaStudio now enumerates it as an SQ200 device, and can sample at 200 MSPS and use the full sample memory depth. Not too shabby for only ~€100 total cost (SQ50+extra RAM). Enjoy.(For extra tinfoil hattery, I do run ScanaStudio in aFirejailinstance that disables networking (firejail --noprofile --net=none path/to/ScanaStudio), to make sure the software doesn't call home and reports the edited serial number.)