Difference between revisions of "SainSmart DDS120/Info"
(Add SainSmart DDS120 usb info) |
Uwe Hermann (talk | contribs) (Moved firmware info.) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== lsusb ( | == lsusb (vendor firmware from I²C EEPROM, not uploaded from PC, PCB jumper fitted) == | ||
<small> | <small> | ||
$ '''lsusb -v -d 8102:8102''' | |||
$ '''lsusb -v -d 8102:8102''' | Bus 006 Device 052: ID '''8102:8102''' | ||
Bus 006 Device 052: ID 8102:8102 | |||
Device Descriptor: | Device Descriptor: | ||
bLength 18 | bLength 18 | ||
Line 23: | Line 15: | ||
idProduct 0x8102 | idProduct 0x8102 | ||
bcdDevice 0.00 | bcdDevice 0.00 | ||
iManufacturer 1 BUUDAI | iManufacturer 1 '''BUUDAI''' | ||
iProduct 2 USB102 | iProduct 2 '''USB102''' | ||
iSerial 0 | iSerial 0 | ||
bNumConfigurations 1 | bNumConfigurations 1 | ||
Line 43: | Line 35: | ||
bAlternateSetting 0 | bAlternateSetting 0 | ||
bNumEndpoints 4 | bNumEndpoints 4 | ||
bInterfaceClass 255 Vendor Specific Class | bInterfaceClass 255 '''Vendor Specific Class''' | ||
bInterfaceSubClass 0 | bInterfaceSubClass 0 | ||
bInterfaceProtocol 0 | bInterfaceProtocol 0 | ||
Line 50: | Line 42: | ||
bLength 7 | bLength 7 | ||
bDescriptorType 5 | bDescriptorType 5 | ||
bEndpointAddress 0x82 EP 2 IN | bEndpointAddress 0x82 '''EP 2 IN''' | ||
bmAttributes 3 | bmAttributes 3 | ||
Transfer Type Interrupt | Transfer Type '''Interrupt''' | ||
Synch Type None | Synch Type None | ||
Usage Type Data | Usage Type Data | ||
Line 60: | Line 52: | ||
bLength 7 | bLength 7 | ||
bDescriptorType 5 | bDescriptorType 5 | ||
bEndpointAddress 0x04 EP 4 OUT | bEndpointAddress 0x04 '''EP 4 OUT''' | ||
bmAttributes 2 | bmAttributes 2 | ||
Transfer Type Bulk | Transfer Type '''Bulk''' | ||
Synch Type None | Synch Type None | ||
Usage Type Data | Usage Type Data | ||
Line 70: | Line 62: | ||
bLength 7 | bLength 7 | ||
bDescriptorType 5 | bDescriptorType 5 | ||
bEndpointAddress 0x86 EP 6 IN | bEndpointAddress 0x86 '''EP 6 IN''' | ||
bmAttributes 2 | bmAttributes 2 | ||
Transfer Type Bulk | Transfer Type '''Bulk''' | ||
Synch Type None | Synch Type None | ||
Usage Type Data | Usage Type Data | ||
Line 80: | Line 72: | ||
bLength 7 | bLength 7 | ||
bDescriptorType 5 | bDescriptorType 5 | ||
bEndpointAddress 0x88 EP 8 IN | bEndpointAddress 0x88 '''EP 8 IN''' | ||
bmAttributes 2 | bmAttributes 2 | ||
Transfer Type Bulk | Transfer Type '''Bulk''' | ||
Synch Type None | Synch Type None | ||
Usage Type Data | Usage Type Data | ||
Line 98: | Line 90: | ||
Device Status: 0x0000 | Device Status: 0x0000 | ||
(Bus Powered) | (Bus Powered) | ||
</small> | |||
== lsusb (before firmware upload, PCB jumper removed) == | |||
<small> | |||
$ '''lsusb -v''' | |||
Bus 001 Device 026: ID '''04b4:8613 Cypress Semiconductor Corp. CY7C68013 EZ-USB FX2 USB 2.0 Development Kit''' | |||
Device Descriptor: | |||
bLength 18 | |||
bDescriptorType 1 | |||
bcdUSB 2.00 | |||
bDeviceClass 255 Vendor Specific Class | |||
bDeviceSubClass 255 Vendor Specific Subclass | |||
bDeviceProtocol 255 Vendor Specific Protocol | |||
bMaxPacketSize0 64 | |||
idVendor 0x04b4 '''Cypress Semiconductor Corp.''' | |||
idProduct 0x8613 '''CY7C68013 EZ-USB FX2 USB 2.0 Development Kit''' | |||
bcdDevice a0.01 | |||
iManufacturer 0 | |||
iProduct 0 | |||
iSerial 0 | |||
bNumConfigurations 1 | |||
Configuration Descriptor: | |||
bLength 9 | |||
bDescriptorType 2 | |||
wTotalLength 171 | |||
bNumInterfaces 1 | |||
bConfigurationValue 1 | |||
iConfiguration 0 | |||
bmAttributes 0x80 | |||
(Bus Powered) | |||
MaxPower 100mA | |||
Interface Descriptor: | |||
bLength 9 | |||
bDescriptorType 4 | |||
bInterfaceNumber 0 | |||
bAlternateSetting 0 | |||
bNumEndpoints 0 | |||
bInterfaceClass 255 Vendor Specific Class | |||
bInterfaceSubClass 255 Vendor Specific Subclass | |||
bInterfaceProtocol 255 Vendor Specific Protocol | |||
iInterface 0 | |||
Interface Descriptor: | |||
bLength 9 | |||
bDescriptorType 4 | |||
bInterfaceNumber 0 | |||
bAlternateSetting 1 | |||
bNumEndpoints 6 | |||
bInterfaceClass 255 Vendor Specific Class | |||
bInterfaceSubClass 255 Vendor Specific Subclass | |||
bInterfaceProtocol 255 Vendor Specific Protocol | |||
iInterface 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x01 EP 1 OUT | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x81 EP 1 IN | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x02 EP 2 OUT | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x04 EP 4 OUT | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x86 EP 6 IN | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x88 EP 8 IN | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Interface Descriptor: | |||
bLength 9 | |||
bDescriptorType 4 | |||
bInterfaceNumber 0 | |||
bAlternateSetting 2 | |||
bNumEndpoints 6 | |||
bInterfaceClass 255 Vendor Specific Class | |||
bInterfaceSubClass 255 Vendor Specific Subclass | |||
bInterfaceProtocol 255 Vendor Specific Protocol | |||
iInterface 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x01 EP 1 OUT | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0040 1x 64 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x81 EP 1 IN | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0040 1x 64 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x02 EP 2 OUT | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x04 EP 4 OUT | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x86 EP 6 IN | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x88 EP 8 IN | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Interface Descriptor: | |||
bLength 9 | |||
bDescriptorType 4 | |||
bInterfaceNumber 0 | |||
bAlternateSetting 3 | |||
bNumEndpoints 6 | |||
bInterfaceClass 255 Vendor Specific Class | |||
bInterfaceSubClass 255 Vendor Specific Subclass | |||
bInterfaceProtocol 255 Vendor Specific Protocol | |||
iInterface 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x01 EP 1 OUT | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0040 1x 64 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x81 EP 1 IN | |||
bmAttributes 3 | |||
Transfer Type Interrupt | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0040 1x 64 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x02 EP 2 OUT | |||
bmAttributes 1 | |||
Transfer Type Isochronous | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x04 EP 4 OUT | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x86 EP 6 IN | |||
bmAttributes 1 | |||
Transfer Type Isochronous | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 1 | |||
Endpoint Descriptor: | |||
bLength 7 | |||
bDescriptorType 5 | |||
bEndpointAddress 0x88 EP 8 IN | |||
bmAttributes 2 | |||
Transfer Type Bulk | |||
Synch Type None | |||
Usage Type Data | |||
wMaxPacketSize 0x0200 1x 512 bytes | |||
bInterval 0 | |||
Device Qualifier (for other device speed): | |||
bLength 10 | |||
bDescriptorType 6 | |||
bcdUSB 2.00 | |||
bDeviceClass 255 Vendor Specific Class | |||
bDeviceSubClass 255 Vendor Specific Subclass | |||
bDeviceProtocol 255 Vendor Specific Protocol | |||
bMaxPacketSize0 64 | |||
bNumConfigurations 1 | |||
Device Status: 0x0000 | |||
(Bus Powered) | |||
</small> | |||
== Vendor firmware == | |||
We use an open-source firmware that is part of [[fx2lafw|sigrok-firmware-fx2lafw]] for this device (i.e., not the vendor firmware). The section below contains some historic information about the vendor firmware for those interested, though. | |||
The vendor firmware is contained on the I²C EEPROM. The FX2 boots directly into that firmware. It uses the following protocol: | |||
{| border="0" style="font-size: smaller" class="alternategrey sortable sigroktable" | |||
|- | |||
!Oscilloscope command | |||
!bRequest value | |||
!Notes | |||
|- | |||
|Set CH0 coupling ||0x24 ||Possible values: 0x00, 0x08 (AC-coupling, DC-coupling). | |||
|- | |||
|Set CH1 coupling ||0x25 ||Possible values: 0x20, 0x10 (AC-coupling, DC-coupling). | |||
|- | |||
|Set CH0 voltage range ||0x22 ||Possible values: 0x08, 0x04, 0x00, 0x06, 0x02 (50mV, 100mV, 200mV, 500mV, 1-5V). | |||
|- | |||
|Set CH1 voltage range ||0x23 ||Possible values: 0x20, 0x10, 0x00, 0x12, 0x02 (50mV, 100mV, 200mV, 500mV, 1-5V). | |||
|- | |||
|Set sampling rate ||0x94 ||Possible values: 0x11, 0x01, 0x10 (240kHz, 2.4MHz, 48MHz). | |||
|- | |||
|Trigger oscilloscope ||0x33 ||Possible values: 0x00 == start sampling. | |||
|- | |||
|} | |||
== Open-source firmware details == | |||
The vendor firmware is contained on the I²C EEPROM. The FX2 boots directly into that firmware. However, we replace it (only in RAM, the EEPROM is never modified) with an open-source firmware that is part of [[fx2lafw|sigrok-firmware-fx2lafw]] when the device is attached to USB. | |||
The open source firmware is currently missing the following planned features: | |||
* <1MHz, 2, 3, 5, 6, 7.5, 9.6, 10, 15, 24, 30 MHz sampling rate support | |||
* Turn on/off the calibration pulse | |||
* Change frequency of the calibration pulse (add 10kHz, 100kHz and 1MHz) | |||
==== Gain stage ==== | |||
The gain stage is 2 stage approach. -6dB and -20dB on the first stage (attentuator). The second stage is then doing the gain by 3 different resistor values switched into the feedback loop. The following does not correlate with measure on real hardware, there is a 6th gain position that is working though. It is very similar to another gain and was most likely omitted because of that. | |||
<small> | |||
# Channel 0: | |||
PC1=1; PC2=0; PC3= 0 -> Gain x0.1 = -20dB -> 0x02 (1V) | |||
PC1=1; PC2=0; PC3= 1 -> Gain x0.2 = -14dB -> 0x0A (0.5V) | |||
PC1=1; PC2=1; PC3= 0 -> Gain x0.4 = -8dB -> 0x06 (0.250V) | |||
PC1=0; PC2=0; PC3= 0 -> Gain x0.5 = -6dB -> 0x00 (0.200V) | |||
PC1=0; PC2=0; PC3= 1 -> Gain x1 = 0dB -> 0x08 (0.100V) | |||
PC1=0; PC2=1; PC3= 0 -> Gain x2 = +6dB -> 0x04 (0.050V) | |||
# Channel 1: | |||
PE1=1; PC4=0; PC5= 0 -> Gain x0.1 = -20dB -> 0x02 (1V) | |||
PE1=1; PC4=0; PC5= 1 -> Gain x0.2 = -14dB -> 0x22 (0.5V) | |||
PE1=1; PC4=1; PC5= 0 -> Gain x0.4 = -8dB -> 0x12 (0.250V) | |||
PE1=0; PC4=0; PC5= 0 -> Gain x0.5 = -6dB -> 0x00 (0.200V) | |||
PE1=0; PC4=0; PC5= 1 -> Gain x1 = 0dB -> 0x20 (0.100V) | |||
PE1=0; PC4=1; PC5= 0 -> Gain x2 = +6dB -> 0x10 (0.050V) | |||
</small> | |||
==== AC/DC coupling ==== | |||
The coupling is controlled via 2 PhotoMOS chips. | |||
<small> | |||
# Channel 0: | |||
PE3=0 Disable AC-coupling capacitor (DC-coupling) | |||
PE3=1 Enable AC-coupling capacitor | |||
# Channel 1: | |||
PE0=0 Disable AC-coupling capacitor (DC-coupling) | |||
PE0=1 Enable AC-coupling capacitor | |||
</small> | |||
==== 1kHz calibration square wave ==== | |||
Pin PE2 controls the frequency of the calibration output on the PCB. It is driven by an ISR timer from the 8051 core of the FX2 chip. |
Latest revision as of 20:24, 1 November 2016
lsusb (vendor firmware from I²C EEPROM, not uploaded from PC, PCB jumper fitted)
$ lsusb -v -d 8102:8102 Bus 006 Device 052: ID 8102:8102 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x8102 idProduct 0x8102 bcdDevice 0.00 iManufacturer 1 BUUDAI iProduct 2 USB102 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 46 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xc0 Self Powered MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 4 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x86 EP 6 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x88 EP 8 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0000 (Bus Powered)
lsusb (before firmware upload, PCB jumper removed)
$ lsusb -v Bus 001 Device 026: ID 04b4:8613 Cypress Semiconductor Corp. CY7C68013 EZ-USB FX2 USB 2.0 Development Kit Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 255 Vendor Specific Subclass bDeviceProtocol 255 Vendor Specific Protocol bMaxPacketSize0 64 idVendor 0x04b4 Cypress Semiconductor Corp. idProduct 0x8613 CY7C68013 EZ-USB FX2 USB 2.0 Development Kit bcdDevice a0.01 iManufacturer 0 iProduct 0 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 171 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 6 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x86 EP 6 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x88 EP 8 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 2 bNumEndpoints 6 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x86 EP 6 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x88 EP 8 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 3 bNumEndpoints 6 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x86 EP 6 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x88 EP 8 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 255 Vendor Specific Subclass bDeviceProtocol 255 Vendor Specific Protocol bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0000 (Bus Powered)
Vendor firmware
We use an open-source firmware that is part of sigrok-firmware-fx2lafw for this device (i.e., not the vendor firmware). The section below contains some historic information about the vendor firmware for those interested, though.
The vendor firmware is contained on the I²C EEPROM. The FX2 boots directly into that firmware. It uses the following protocol:
Oscilloscope command | bRequest value | Notes |
---|---|---|
Set CH0 coupling | 0x24 | Possible values: 0x00, 0x08 (AC-coupling, DC-coupling). |
Set CH1 coupling | 0x25 | Possible values: 0x20, 0x10 (AC-coupling, DC-coupling). |
Set CH0 voltage range | 0x22 | Possible values: 0x08, 0x04, 0x00, 0x06, 0x02 (50mV, 100mV, 200mV, 500mV, 1-5V). |
Set CH1 voltage range | 0x23 | Possible values: 0x20, 0x10, 0x00, 0x12, 0x02 (50mV, 100mV, 200mV, 500mV, 1-5V). |
Set sampling rate | 0x94 | Possible values: 0x11, 0x01, 0x10 (240kHz, 2.4MHz, 48MHz). |
Trigger oscilloscope | 0x33 | Possible values: 0x00 == start sampling. |
Open-source firmware details
The vendor firmware is contained on the I²C EEPROM. The FX2 boots directly into that firmware. However, we replace it (only in RAM, the EEPROM is never modified) with an open-source firmware that is part of sigrok-firmware-fx2lafw when the device is attached to USB.
The open source firmware is currently missing the following planned features:
- <1MHz, 2, 3, 5, 6, 7.5, 9.6, 10, 15, 24, 30 MHz sampling rate support
- Turn on/off the calibration pulse
- Change frequency of the calibration pulse (add 10kHz, 100kHz and 1MHz)
Gain stage
The gain stage is 2 stage approach. -6dB and -20dB on the first stage (attentuator). The second stage is then doing the gain by 3 different resistor values switched into the feedback loop. The following does not correlate with measure on real hardware, there is a 6th gain position that is working though. It is very similar to another gain and was most likely omitted because of that.
# Channel 0: PC1=1; PC2=0; PC3= 0 -> Gain x0.1 = -20dB -> 0x02 (1V) PC1=1; PC2=0; PC3= 1 -> Gain x0.2 = -14dB -> 0x0A (0.5V) PC1=1; PC2=1; PC3= 0 -> Gain x0.4 = -8dB -> 0x06 (0.250V) PC1=0; PC2=0; PC3= 0 -> Gain x0.5 = -6dB -> 0x00 (0.200V) PC1=0; PC2=0; PC3= 1 -> Gain x1 = 0dB -> 0x08 (0.100V) PC1=0; PC2=1; PC3= 0 -> Gain x2 = +6dB -> 0x04 (0.050V) # Channel 1: PE1=1; PC4=0; PC5= 0 -> Gain x0.1 = -20dB -> 0x02 (1V) PE1=1; PC4=0; PC5= 1 -> Gain x0.2 = -14dB -> 0x22 (0.5V) PE1=1; PC4=1; PC5= 0 -> Gain x0.4 = -8dB -> 0x12 (0.250V) PE1=0; PC4=0; PC5= 0 -> Gain x0.5 = -6dB -> 0x00 (0.200V) PE1=0; PC4=0; PC5= 1 -> Gain x1 = 0dB -> 0x20 (0.100V) PE1=0; PC4=1; PC5= 0 -> Gain x2 = +6dB -> 0x10 (0.050V)
AC/DC coupling
The coupling is controlled via 2 PhotoMOS chips.
# Channel 0: PE3=0 Disable AC-coupling capacitor (DC-coupling) PE3=1 Enable AC-coupling capacitor # Channel 1: PE0=0 Disable AC-coupling capacitor (DC-coupling) PE0=1 Enable AC-coupling capacitor
1kHz calibration square wave
Pin PE2 controls the frequency of the calibration output on the PCB. It is driven by an ISR timer from the 8051 core of the FX2 chip.