前言
手里有个比较早的时候买的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
枚举内容如下
  1. =========================== USB Port1 ===========================

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

  14.       ========================== Summary =========================
  15. Vendor ID                : 0x21A9 (Saleae LLC)
  16. Product ID               : 0x1001
  17. USB Version              : 2.0
  18. Port maximum Speed       : High-Speed (Companion Port 2-13 supports SuperSpeed)
  19. Device maximum Speed     : High-Speed
  20. Device Connection Speed  : High-Speed
  21. Self powered             : no
  22. Demanded Current         : 100 mA
  23. Used Endpoints           : 1

  24.       ======================== USB Device ========================

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

  51.         +++++++++++++++++ Registry USB Flags +++++++++++++++++
  52. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags
  53. GlobalDisableSerNumGen  : REG_BINARY 00
  54. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\21A910010000
  55. osvc                    : REG_BINARY 00 00

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

  67.         --------------- Connection Information V2 -------------
  68. Connection Index         : 0x01 (1)
  69. Length                   : 0x10 (16 bytes)
  70. SupportedUsbProtocols    : 0x03
  71. Usb110                  : 1 (yes, port supports USB 1.1)
  72. Usb200                  : 1 (yes, port supports USB 2.0)
  73. Usb300                  : 0 (no, port not supports USB 3.0) -> but Companion Port 2-13 does
  74. ReservedMBZ             : 0x00
  75. Flags                    : 0x00
  76. DevIsOpAtSsOrHigher     : 0 (Device is not operating at SuperSpeed or higher)
  77. DevIsSsCapOrHigher      : 0 (Device is not SuperSpeed capable or higher)
  78. DevIsOpAtSsPlusOrHigher : 0 (Device is not operating at SuperSpeedPlus or higher)
  79. DevIsSsPlusCapOrHigher  : 0 (Device is not SuperSpeedPlus capable or higher)
  80. ReservedMBZ             : 0x00
  81. Data (HexDump)           : 01 00 00 00 10 00 00 00 03 00 00 00 00 00 00 00   ................

  82.     ---------------------- Device Descriptor ----------------------
  83. bLength                  : 0x12 (18 bytes)
  84. bDescriptorType          : 0x01 (Device Descriptor)
  85. bcdUSB                   : 0x200 (USB Version 2.0)
  86. bDeviceClass             : 0xFF (Vendor Specific)
  87. bDeviceSubClass          : 0xFF
  88. bDeviceProtocol          : 0xFF
  89. bMaxPacketSize0          : 0x40 (64 bytes)
  90. idVendor                 : 0x21A9 (Saleae LLC)
  91. idProduct                : 0x1001
  92. bcdDevice                : 0x0000
  93. iManufacturer            : 0x00 (No String Descriptor)
  94. iProduct                 : 0x00 (No String Descriptor)
  95. iSerialNumber            : 0x00 (No String Descriptor)
  96. bNumConfigurations       : 0x01 (1 Configuration)
  97. Data (HexDump)           : 12 01 00 02 FF FF FF 40 A9 21 01 10 00 00 00 00   .......@.!......
  98.                            00 01                                             ..

  99.     ------------------ Configuration Descriptor -------------------
  100. bLength                  : 0x09 (9 bytes)
  101. bDescriptorType          : 0x02 (Configuration Descriptor)
  102. wTotalLength             : 0x00AB (171 bytes)
  103. bNumInterfaces           : 0x01 (1 Interface)
  104. bConfigurationValue      : 0x01 (Configuration 1)
  105. iConfiguration           : 0x00 (No String Descriptor)
  106. bmAttributes             : 0x80
  107. D7: Reserved, set 1     : 0x01
  108. D6: Self Powered        : 0x00 (no)
  109. D5: Remote Wakeup       : 0x00 (no)
  110. D4..0: Reserved, set 0  : 0x00
  111. MaxPower                 : 0x32 (100 mA)
  112. Data (HexDump)           : 09 02 AB 00 01 01 00 80 32 09 04 00 00 00 FF FF   ........2.......
  113.                            FF 00 09 04 00 01 06 FF FF FF 00 07 05 01 02 00   ................
  114.                            02 00 07 05 81 02 00 02 00 07 05 02 02 00 02 00   ................
  115.                            07 05 04 02 00 02 00 07 05 86 02 00 02 00 07 05   ................
  116.                            88 02 00 02 00 09 04 00 02 06 FF FF FF 00 07 05   ................
  117.                            01 03 40 00 01 07 05 81 03 40 00 01 07 05 02 03   ..@......@......
  118.                            00 02 01 07 05 04 02 00 02 00 07 05 86 03 00 02   ................
  119.                            01 07 05 88 02 00 02 00 09 04 00 03 06 FF FF FF   ................
  120.                            00 07 05 01 03 40 00 01 07 05 81 03 40 00 01 07   .....@......@...
  121.                            05 02 01 00 02 01 07 05 04 02 00 02 00 07 05 86   ................
  122.                            01 00 02 01 07 05 88 02 00 02 00                  ...........

  123.         ---------------- Interface Descriptor -----------------
  124. bLength                  : 0x09 (9 bytes)
  125. bDescriptorType          : 0x04 (Interface Descriptor)
  126. bInterfaceNumber         : 0x00 (Interface 0)
  127. bAlternateSetting        : 0x00
  128. bNumEndpoints            : 0x00 (Default Control Pipe only)
  129. bInterfaceClass          : 0xFF (Vendor Specific)
  130. bInterfaceSubClass       : 0xFF
  131. bInterfaceProtocol       : 0xFF
  132. iInterface               : 0x00 (No String Descriptor)
  133. Data (HexDump)           : 09 04 00 00 00 FF FF FF 00                        .........

  134.         ---------------- Interface Descriptor -----------------
  135. bLength                  : 0x09 (9 bytes)
  136. bDescriptorType          : 0x04 (Interface Descriptor)
  137. bInterfaceNumber         : 0x00 (Interface 0)
  138. bAlternateSetting        : 0x01
  139. bNumEndpoints            : 0x06 (6 Endpoints)
  140. bInterfaceClass          : 0xFF (Vendor Specific)
  141. bInterfaceSubClass       : 0xFF
  142. bInterfaceProtocol       : 0xFF
  143. iInterface               : 0x00 (No String Descriptor)
  144. Data (HexDump)           : 09 04 00 01 06 FF FF FF 00                        .........

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

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

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

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

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

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

  193.         ---------------- Interface Descriptor -----------------
  194. bLength                  : 0x09 (9 bytes)
  195. bDescriptorType          : 0x04 (Interface Descriptor)
  196. bInterfaceNumber         : 0x00 (Interface 0)
  197. bAlternateSetting        : 0x02
  198. bNumEndpoints            : 0x06 (6 Endpoints)
  199. bInterfaceClass          : 0xFF (Vendor Specific)
  200. bInterfaceSubClass       : 0xFF
  201. bInterfaceProtocol       : 0xFF
  202. iInterface               : 0x00 (No String Descriptor)
  203. Data (HexDump)           : 09 04 00 02 06 FF FF FF 00                        .........

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

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

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

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

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

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

  264.         ---------------- Interface Descriptor -----------------
  265. bLength                  : 0x09 (9 bytes)
  266. bDescriptorType          : 0x04 (Interface Descriptor)
  267. bInterfaceNumber         : 0x00 (Interface 0)
  268. bAlternateSetting        : 0x03
  269. bNumEndpoints            : 0x06 (6 Endpoints)
  270. bInterfaceClass          : 0xFF (Vendor Specific)
  271. bInterfaceSubClass       : 0xFF
  272. bInterfaceProtocol       : 0xFF
  273. iInterface               : 0x00 (No String Descriptor)
  274. Data (HexDump)           : 09 04 00 03 06 FF FF FF 00                        .........

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

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

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

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

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

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

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

  346.     ------------ Other Speed Configuration Descriptor -------------
  347. bLength                  : 0x09 (9 bytes)
  348. bDescriptorType          : 0x07 (Other_speed_configuration Descriptor)
  349. wTotalLength             : 0x00AB (171 bytes)
  350. bNumInterfaces           : 0x01 (1 Interface)
  351. bConfigurationValue      : 0x01 (Configuration 1)
  352. iConfiguration           : 0x00 (No String Descriptor)
  353. bmAttributes             : 0x80
  354. D7: Reserved, set 1     : 0x01
  355. D6: Self Powered        : 0x00 (no)
  356. D5: Remote Wakeup       : 0x00 (no)
  357. D4..0: Reserved, set 0  : 0x00
  358. MaxPower                 : 0x32 (100 mA)
  359. Data (HexDump)           : 09 07 AB 00 01 01 00 80 32 09 04 00 00 00 FF FF   ........2.......
  360.                            FF 00 09 04 00 01 06 FF FF FF 00 07 05 01 02 40   ...............@
  361.                            00 00 07 05 81 02 40 00 00 07 05 02 02 40 00 00   ......@......@..
  362.                            07 05 04 02 40 00 00 07 05 86 02 40 00 00 07 05   ....@......@....
  363.                            88 02 40 00 00 09 04 00 02 06 FF FF FF 00 07 05   ..@.............
  364.                            01 03 40 00 0A 07 05 81 03 40 00 0A 07 05 02 03   ..@......@......
  365.                            40 00 0A 07 05 04 02 40 00 00 07 05 86 03 40 00   @......@......@.
  366.                            0A 07 05 88 02 40 00 00 09 04 00 03 06 FF FF FF   .....@..........
  367.                            00 07 05 01 03 40 00 0A 07 05 81 03 40 00 0A 07   .....@......@...
  368.                            05 02 01 40 00 01 07 05 04 02 40 00 00 07 05 86   ...@......@.....
  369.                            01 40 00 01 07 05 88 02 40 00 00                  .@......@..

  370.         ---------------- Interface Descriptor -----------------
  371. bLength                  : 0x09 (9 bytes)
  372. bDescriptorType          : 0x04 (Interface Descriptor)
  373. bInterfaceNumber         : 0x00 (Interface 0)
  374. bAlternateSetting        : 0x00
  375. bNumEndpoints            : 0x00 (Default Control Pipe only)
  376. bInterfaceClass          : 0xFF (Vendor Specific)
  377. bInterfaceSubClass       : 0xFF
  378. bInterfaceProtocol       : 0xFF
  379. iInterface               : 0x00 (No String Descriptor)
  380. Data (HexDump)           : 09 04 00 00 00 FF FF FF 00                        .........

  381.         ---------------- Interface Descriptor -----------------
  382. bLength                  : 0x09 (9 bytes)
  383. bDescriptorType          : 0x04 (Interface Descriptor)
  384. bInterfaceNumber         : 0x00 (Interface 0)
  385. bAlternateSetting        : 0x01
  386. bNumEndpoints            : 0x06 (6 Endpoints)
  387. bInterfaceClass          : 0xFF (Vendor Specific)
  388. bInterfaceSubClass       : 0xFF
  389. bInterfaceProtocol       : 0xFF
  390. iInterface               : 0x00 (No String Descriptor)
  391. Data (HexDump)           : 09 04 00 01 06 FF FF FF 00                        .........

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

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

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

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

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

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

  440.         ---------------- Interface Descriptor -----------------
  441. bLength                  : 0x09 (9 bytes)
  442. bDescriptorType          : 0x04 (Interface Descriptor)
  443. bInterfaceNumber         : 0x00 (Interface 0)
  444. bAlternateSetting        : 0x02
  445. bNumEndpoints            : 0x06 (6 Endpoints)
  446. bInterfaceClass          : 0xFF (Vendor Specific)
  447. bInterfaceSubClass       : 0xFF
  448. bInterfaceProtocol       : 0xFF
  449. iInterface               : 0x00 (No String Descriptor)
  450. Data (HexDump)           : 09 04 00 02 06 FF FF FF 00                        .........

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

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

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

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

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

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

  499.         ---------------- Interface Descriptor -----------------
  500. bLength                  : 0x09 (9 bytes)
  501. bDescriptorType          : 0x04 (Interface Descriptor)
  502. bInterfaceNumber         : 0x00 (Interface 0)
  503. bAlternateSetting        : 0x03
  504. bNumEndpoints            : 0x06 (6 Endpoints)
  505. bInterfaceClass          : 0xFF (Vendor Specific)
  506. bInterfaceSubClass       : 0xFF
  507. bInterfaceProtocol       : 0xFF
  508. iInterface               : 0x00 (No String Descriptor)
  509. Data (HexDump)           : 09 04 00 03 06 FF FF FF 00                        .........

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

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

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

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

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

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

  558.       -------------------- String Descriptors -------------------
  559. 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的方案,硬件设计没有什么特殊的,核心技术在嵌入式软件和上位机,这也是国产仪器的一个弱点,不过现在国产的也有很多性价比比较高的逻分,示波器等仪器,这方面也做的越来越好了。