前言
手里有个比较早的时候买的100M的逻辑分析仪,参数在当时是比较高的了, 在3/6/9/16 通道时分别可达100/50/32/16MHz的采样率,用的USB2.0高速接口。是国内一家厂商山寨的Saleae Logic16。可惜后面自动升级固件之后,不能使用了。也不能浪费,拆开来分析分析,学习下吧。
拆解
image.png
image.png
常见的JTAG的盒子,直接用一字螺丝刀撬开即可。
image.png
可以看到PCB
image.png
image.png
设备信息
使用UsbTreeView.exe可以查看设备的枚举信息,使用的是厂商自定义设备协议
image.png
枚举内容如下
=========================== USB Port1 ===========================

  • Connection Status        : 0x01 (Device is connected)
  • Port Chain               : 2-1
  • Properties               : 0x01
  • IsUserConnectable       : yes
  • PortIsDebugCapable      : no
  • PortHasMultiCompanions  : no
  • PortConnectorIsTypeC    : no
  • ConnectionIndex          : 0x01 (Port 1)
  • CompanionIndex           : 0
  • CompanionHubSymLnk      : USB#ROOT_HUB30#4&302b2024&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
  • CompanionPortNumber     : 0x0D (Port 13)
  • -> CompanionPortChain   : 2-13

  •       ========================== Summary =========================
  • Vendor ID                : 0x21A9 (Saleae LLC)
  • Product ID               : 0x1001
  • USB Version              : 2.0
  • Port maximum Speed       : High-Speed (Companion Port 2-13 supports SuperSpeed)
  • Device maximum Speed     : High-Speed
  • Device Connection Speed  : High-Speed
  • Self powered             : no
  • Demanded Current         : 100 mA
  • Used Endpoints           : 1

  •       ======================== USB Device ========================

  •         +++++++++++++++++ Device Information ++++++++++++++++++
  • Device Description       : Saleae Logic16 USB Logic Analyzer
  • Device Path 1            : \\?\USB#VID_21A9&PID_1001#5&244f8fa8&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed} (GUID_DEVINTERFACE_USB_DEVICE)
  • Device Path 2            : \\?\USB#VID_21A9&PID_1001#5&244f8fa8&0&1#{dee824ef-729b-4a0e-9c14-b7117d33a817} (GUID_DEVINTERFACE_WINUSB)
  • Device Path 3            : \\?\USB#VID_21A9&PID_1001#5&244f8fa8&0&1#{a6782bce-4376-4de2-8096-70aa9e8fed19}
  • Device Path 4            : \\?\USB#VID_21A9&PID_1001#5&244f8fa8&0&1#{d509886e-3aa5-11df-861e-86b356d89593}
  • Kernel Name              : \Device\USBPDO-7
  • Device ID                : USB\VID_21A9&PID_1001\5&244F8FA8&0&1
  • Hardware IDs             : USB\VID_21A9&PID_1001&REV_0000 USB\VID_21A9&PID_1001
  • Driver KeyName           : {36fc9e60-c465-11cf-8056-444553540000}\0036 (GUID_DEVCLASS_USB)
  • Driver                   : \SystemRoot\System32\drivers\WinUsb.sys (Version: 10.0.22621.608  Date: 2022-10-03)
  • Driver Inf               : C:\WINDOWS\inf\oem36.inf
  • Legacy BusType           : PNPBus
  • Class                    : USB
  • Class GUID               : {36fc9e60-c465-11cf-8056-444553540000} (GUID_DEVCLASS_USB)
  • Service                  : WinUSB
  • Enumerator               : USB
  • Location Info            : Port_#0001.Hub_#0002
  • Location IDs             : PCIROOT(0)#PCI(1400)#USBROOT(0)#USB(1), ACPI(_SB_)#ACPI(PC00)#ACPI(XHCI)#ACPI(RHUB)#ACPI(HS01)
  • Container ID             : {21622f66-2b81-11ee-9f00-e20af6a8ada3}
  • Manufacturer Info        : Saleae LLC
  • Capabilities             : 0x04 (Removable)
  • Status                   : 0x0180600A (DN_DRIVER_LOADED, DN_STARTED, DN_DISABLEABLE, DN_REMOVABLE, DN_NT_ENUMERATOR, DN_NT_DRIVER)
  • Problem Code             : 0
  • Address                  : 1
  • Power State              : D0 (supported: D0, D3, wake from D0)

  •         +++++++++++++++++ Registry USB Flags +++++++++++++++++
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags
  • GlobalDisableSerNumGen  : REG_BINARY 00
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\21A910010000
  • osvc                    : REG_BINARY 00 00

  •         ---------------- Connection Information ---------------
  • Connection Index         : 0x01 (Port 1)
  • Connection Status        : 0x01 (DeviceConnected)
  • Current Config Value     : 0x01 (Configuration 1)
  • Device Address           : 0x0D (13)
  • Is Hub                   : 0x00 (no)
  • Device Bus Speed         : 0x02 (High-Speed)
  • Number Of Open Pipes     : 0x00 (0 pipes to data endpoints)
  • Data (HexDump)           : 01 00 00 00 12 01 00 02 FF FF FF 40 A9 21 01 10   ...........@.!..
  •                            00 00 00 00 00 01 01 02 00 0D 00 00 00 00 00 01   ................
  •                            00 00 00                                          ...

  •         --------------- Connection Information V2 -------------
  • Connection Index         : 0x01 (1)
  • Length                   : 0x10 (16 bytes)
  • SupportedUsbProtocols    : 0x03
  • Usb110                  : 1 (yes, port supports USB 1.1)
  • Usb200                  : 1 (yes, port supports USB 2.0)
  • Usb300                  : 0 (no, port not supports USB 3.0) -> but Companion Port 2-13 does
  • ReservedMBZ             : 0x00
  • Flags                    : 0x00
  • DevIsOpAtSsOrHigher     : 0 (Device is not operating at SuperSpeed or higher)
  • DevIsSsCapOrHigher      : 0 (Device is not SuperSpeed capable or higher)
  • DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher)
  • DevIsSsPlusCapOrHigher  : 0 (Device is not SuperSpeedPlus capable or higher)
  • ReservedMBZ             : 0x00
  • Data (HexDump)           : 01 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................

  •     ---------------------- Device Descriptor ----------------------
  • bLength                  : 0x12 (18 bytes)
  • bDescriptorType          : 0x01 (Device Descriptor)
  • bcdUSB                   : 0x200 (USB Version 2.0)
  • bDeviceClass             : 0xFF (Vendor Specific)
  • bDeviceSubClass          : 0xFF
  • bDeviceProtocol          : 0xFF
  • bMaxPacketSize0          : 0x40 (64 bytes)
  • idVendor                 : 0x21A9 (Saleae LLC)
  • idProduct                : 0x1001
  • bcdDevice                : 0x0000
  • iManufacturer            : 0x00 (No String Descriptor)
  • iProduct                 : 0x00 (No String Descriptor)
  • iSerialNumber            : 0x00 (No String Descriptor)
  • bNumConfigurations       : 0x01 (1 Configuration)
  • Data (HexDump)           : 12 01 00 02 FF FF FF 40 A9 21 01 10 00 00 00 00   .......@.!......
  •                            00 01                                             ..

  •     ------------------ Configuration Descriptor -------------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x02 (Configuration Descriptor)
  • wTotalLength             : 0x00AB (171 bytes)
  • bNumInterfaces           : 0x01 (1 Interface)
  • bConfigurationValue      : 0x01 (Configuration 1)
  • iConfiguration           : 0x00 (No String Descriptor)
  • bmAttributes             : 0x80
  • D7: Reserved, set 1     : 0x01
  • D6: Self Powered        : 0x00 (no)
  • D5: Remote Wakeup       : 0x00 (no)
  • D4..0: Reserved, set 0  : 0x00
  • MaxPower                 : 0x32 (100 mA)
  • Data (HexDump)           : 09 02 AB 00 01 01 00 80 32 09 04 00 00 00 FF FF   ........2.......
  •                            FF 00 09 04 00 01 06 FF FF FF 00 07 05 01 02 00   ................
  •                            02 00 07 05 81 02 00 02 00 07 05 02 02 00 02 00   ................
  •                            07 05 04 02 00 02 00 07 05 86 02 00 02 00 07 05   ................
  •                            88 02 00 02 00 09 04 00 02 06 FF FF FF 00 07 05   ................
  •                            01 03 40 00 01 07 05 81 03 40 00 01 07 05 02 03   ..@......@......
  •                            00 02 01 07 05 04 02 00 02 00 07 05 86 03 00 02   ................
  •                            01 07 05 88 02 00 02 00 09 04 00 03 06 FF FF FF   ................
  •                            00 07 05 01 03 40 00 01 07 05 81 03 40 00 01 07   .....@......@...
  •                            05 02 01 00 02 01 07 05 04 02 00 02 00 07 05 86   ................
  •                            01 00 02 01 07 05 88 02 00 02 00                  ...........

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x00
  • bNumEndpoints            : 0x00 (Default Control Pipe only)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 00 00 FF FF FF 00                        .........

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x01
  • bNumEndpoints            : 0x06 (6 Endpoints)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 01 06 FF FF FF 00                        .........

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 01 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 81 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 02 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x04 (Direction=OUT EndpointID=4)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 04 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x86 (Direction=IN EndpointID=6)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 86 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x88 (Direction=IN EndpointID=8)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 88 02 00 02 00                              .......

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x02
  • bNumEndpoints            : 0x06 (6 Endpoints)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 02 06 FF FF FF 00                        .........

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x40 (64 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 01 03 40 00 01                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x40 (64 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 81 03 40 00 01                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0200
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x200 (512 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 02 03 00 02 01                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x04 (Direction=OUT EndpointID=4)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 04 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x86 (Direction=IN EndpointID=6)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0200
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x200 (512 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 86 03 00 02 01                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x88 (Direction=IN EndpointID=8)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 88 02 00 02 00                              .......

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x03
  • bNumEndpoints            : 0x06 (6 Endpoints)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 03 06 FF FF FF 00                        .........

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x40 (64 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 01 03 40 00 01                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x40 (64 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 81 03 40 00 01                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
  • bmAttributes             : 0x01 (TransferType=Isochronous  SyncType=None  EndpointType=Data)
  • wMaxPacketSize           : 0x0200
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x200 (512 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 02 01 00 02 01                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x04 (Direction=OUT EndpointID=4)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 04 02 00 02 00                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x86 (Direction=IN EndpointID=6)
  • bmAttributes             : 0x01 (TransferType=Isochronous  SyncType=None  EndpointType=Data)
  • wMaxPacketSize           : 0x0200
  • Bits 15..13             : 0x00 (reserved, must be zero)
  • Bits 12..11             : 0x00 (0 additional transactions per microframe -> allows 1..1024 bytes per packet)
  • Bits 10..0              : 0x200 (512 bytes per packet)
  • bInterval                : 0x01 (1 microframe -> 0.125 ms)
  • Data (HexDump)           : 07 05 86 01 00 02 01                              .......

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x88 (Direction=IN EndpointID=8)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0200 (max 512 bytes)
  • bInterval                : 0x00 (never NAKs)
  • Data (HexDump)           : 07 05 88 02 00 02 00                              .......

  •     --------- Device Qualifier Descriptor (for Full-Speed) --------
  • bLength                  : 0x0A (10 bytes)
  • bDescriptorType          : 0x06 (Device_qualifier Descriptor)
  • bcdUSB                   : 0x200 (USB Version 2.00)
  • bDeviceClass             : 0xFF (Vendor Specific)
  • bDeviceSubClass          : 0xFF
  • bDeviceProtocol          : 0xFF
  • bMaxPacketSize0          : 0x40 (64 Bytes)
  • bNumConfigurations       : 0x01 (1 other-speed configuration)
  • bReserved                : 0x00
  • Data (HexDump)           : 0A 06 00 02 FF FF FF 40 01 00                     .......@..

  •     ------------ Other Speed Configuration Descriptor -------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x07 (Other_speed_configuration Descriptor)
  • wTotalLength             : 0x00AB (171 bytes)
  • bNumInterfaces           : 0x01 (1 Interface)
  • bConfigurationValue      : 0x01 (Configuration 1)
  • iConfiguration           : 0x00 (No String Descriptor)
  • bmAttributes             : 0x80
  • D7: Reserved, set 1     : 0x01
  • D6: Self Powered        : 0x00 (no)
  • D5: Remote Wakeup       : 0x00 (no)
  • D4..0: Reserved, set 0  : 0x00
  • MaxPower                 : 0x32 (100 mA)
  • Data (HexDump)           : 09 07 AB 00 01 01 00 80 32 09 04 00 00 00 FF FF   ........2.......
  •                            FF 00 09 04 00 01 06 FF FF FF 00 07 05 01 02 40   ...............@
  •                            00 00 07 05 81 02 40 00 00 07 05 02 02 40 00 00   ......@......@..
  •                            07 05 04 02 40 00 00 07 05 86 02 40 00 00 07 05   ....@......@....
  •                            88 02 40 00 00 09 04 00 02 06 FF FF FF 00 07 05   ..@.............
  •                            01 03 40 00 0A 07 05 81 03 40 00 0A 07 05 02 03   ..@......@......
  •                            40 00 0A 07 05 04 02 40 00 00 07 05 86 03 40 00   @......@......@.
  •                            0A 07 05 88 02 40 00 00 09 04 00 03 06 FF FF FF   .....@..........
  •                            00 07 05 01 03 40 00 0A 07 05 81 03 40 00 0A 07   .....@......@...
  •                            05 02 01 40 00 01 07 05 04 02 40 00 00 07 05 86   ...@......@.....
  •                            01 40 00 01 07 05 88 02 40 00 00                  .@......@..

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x00
  • bNumEndpoints            : 0x00 (Default Control Pipe only)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 00 00 FF FF FF 00                        .........

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x01
  • bNumEndpoints            : 0x06 (6 Endpoints)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 01 06 FF FF FF 00                        .........

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 01 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 81 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 02 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x04 (Direction=OUT EndpointID=4)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 04 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x86 (Direction=IN EndpointID=6)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 86 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x88 (Direction=IN EndpointID=8)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 88 02 40 00 00                              ....@..

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x02
  • bNumEndpoints            : 0x06 (6 Endpoints)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 02 06 FF FF FF 00                        .........

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x0A (10 ms)
  • Data (HexDump)           : 07 05 01 03 40 00 0A                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x0A (10 ms)
  • Data (HexDump)           : 07 05 81 03 40 00 0A                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x0A (10 ms)
  • Data (HexDump)           : 07 05 02 03 40 00 0A                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x04 (Direction=OUT EndpointID=4)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 04 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x86 (Direction=IN EndpointID=6)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x0A (10 ms)
  • Data (HexDump)           : 07 05 86 03 40 00 0A                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x88 (Direction=IN EndpointID=8)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 88 02 40 00 00                              ....@..

  •         ---------------- Interface Descriptor -----------------
  • bLength                  : 0x09 (9 bytes)
  • bDescriptorType          : 0x04 (Interface Descriptor)
  • bInterfaceNumber         : 0x00 (Interface 0)
  • bAlternateSetting        : 0x03
  • bNumEndpoints            : 0x06 (6 Endpoints)
  • bInterfaceClass          : 0xFF (Vendor Specific)
  • bInterfaceSubClass       : 0xFF
  • bInterfaceProtocol       : 0xFF
  • iInterface               : 0x00 (No String Descriptor)
  • Data (HexDump)           : 09 04 00 03 06 FF FF FF 00                        .........

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x01 (Direction=OUT EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x0A (10 ms)
  • Data (HexDump)           : 07 05 01 03 40 00 0A                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
  • bmAttributes             : 0x03 (TransferType=Interrupt)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x0A (10 ms)
  • Data (HexDump)           : 07 05 81 03 40 00 0A                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x02 (Direction=OUT EndpointID=2)
  • bmAttributes             : 0x01 (TransferType=Isochronous  SyncType=None  EndpointType=Data)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x01 (1 ms)
  • Data (HexDump)           : 07 05 02 01 40 00 01                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x04 (Direction=OUT EndpointID=4)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 04 02 40 00 00                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x86 (Direction=IN EndpointID=6)
  • bmAttributes             : 0x01 (TransferType=Isochronous  SyncType=None  EndpointType=Data)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x01 (1 ms)
  • Data (HexDump)           : 07 05 86 01 40 00 01                              ....@..

  •         ----------------- Endpoint Descriptor -----------------
  • bLength                  : 0x07 (7 bytes)
  • bDescriptorType          : 0x05 (Endpoint Descriptor)
  • bEndpointAddress         : 0x88 (Direction=IN EndpointID=8)
  • bmAttributes             : 0x02 (TransferType=Bulk)
  • wMaxPacketSize           : 0x0040 (64 bytes)
  • bInterval                : 0x00 (ignored)
  • Data (HexDump)           : 07 05 88 02 40 00 00                              ....@..

  •       -------------------- String Descriptors -------------------
  • none
  • 复制代码


    根据枚举信息画出如下拓扑结构
    使用了3各接口对应不同的传输方式,每种使用了6各端点。接口0:0没有端点。
    image.png
    原理图分析FPGA
    用的Xilinx(现在属于AMD) Spartan-3A XC3S200A, 拥有200K 门逻辑
    image.png
    CPLD
    用的Altera (现在属于Intel)EPM3032A, 600 门逻辑, 32 宏单元.
    image.png
    其中J3EPM3032AJTAG调试口,定义如下
    1
    2
    3
    4
    5
    6
    TMS
    TDI
    TCK
    TDO
    GND
    3.3V
    EPM3032A的引脚使用如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JTAG TDI
    I/O (FX2 PA7)
    I/O (FX2 PA6)
    GND
    I/O (FX2 PA5)
    I/O (FX2 PA4)
    JTAG TMS
    I/O (FX2 PA3)
    VCC
    I/O (FX2 PA2)
    GND
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    I/O (FX2 PA1)
    I/O (FX2 PA0)
    I/O (FPGA PROG_B)
    I/O (FPGA 94, IO_L05N_0)
    GND
    VCC
    I/O (FPGA 85, IO_L03P_0)
    I/O (FX2 CTL2)
    I/O (FX2 CTL1)
    I/O (FX2 CTL0)
    I/O (FPGA 51, DIN/MISO)
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    I/O (NC?)
    GND
    I/O (FPGA 97, IP0)
    JTAG TCK
    I/O (FPGA 53, CCLK)
    I/O (NC?)
    VCC
    GND
    I/O (FPGA 3, IO_L01P_3)
    JTAG TDO
    I/O (NC?)
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    I/O (NC?)
    I/O (NC?)
    GND
    I/O (NC?)
    I/O (NC?)
    I/O (NC?)
    I/O (NC?)
    VCC
    I/O (NC?)
    I/O (NC?)
    I/O (NC?)
    USB接口芯片
    用的Cypress (现在属于英飞凌)CY7C68013A-56PVXC (FX2LP) ,该芯片有个很牛逼的功能,就是直接将引脚的信号通过USB包发送出去,完全不需要额外的控制器参与,这也是很多低成本的逻辑分析仪的方案,无需其他的FPGACPLDMCU,就一片该芯片即可。
    image.png
    EEPROM
    用的Atmel(现在属于Microchip)24LC02BI,支持400K的速度,工业级,2Kbit的容量。
    EEPROM接到CY7C68013A用于配置USB通讯。
    地址为A0-A2都是0所以IIC地址为0x50
    W2的跳线帽用于配置WP写保护。
    image.png
    3.3V电源
    用的AMS AMS1117-3.3,这是最常用的3.3V电源芯片了。
    image.png
    1.2V电源
    用的AMS AMS1117-1.2
    image.png
    加密芯片
    at88sc0104没有焊接
    image.png
    晶振
    使用的24MHz无源晶体
    image.png
    和普通的对比
    使用了CPLDFPGAIO处理。
    总结
    Saleae的逻辑分析仪当年确实很火,主要是性价比高,上位机做的很好,出了很多山寨的板子。尤其这个100M的型号,当时是热门型号,通过拆解可以看到使用了CPLD+FPGA+USB接口IC的方案,硬件设计没有什么特殊的,核心技术在嵌入式软件和上位机,这也是国产仪器的一个弱点,不过现在国产的也有很多性价比比较高的逻分,示波器等仪器,这方面也做的越来越好了。