EEVblog Electronics Community Forum
Products => Test Equipment => Topic started by: Scratch.HTF on October 31, 2017, 02:30:37 am
-
This is a good oscilloscope, but it is let down by poor firmware and host software.
From what I know, the interconnection between soft FPGA (Xilinx XC6SLX16FTG256) and SOC (Samsung S3C2416 – 400 MHz) is a HS-SPI bus operating at 1.0 MHz for control with three additional signals for FPGA code loading and has a parallel bus (most likely the OneNAND/SRAM/ROM/NOR flash interface, which could possibly have DMA) for acquisition, but the FPGA should be able to operate on a faster HS-SPI data rate (up to 50 MHz as per the SOC specification).
I noted when I built a simple VGA interface (79.36 Hz - VGA inputs on most LCD controllers and VGA-HDMI converters only handle up to 75 Hz), it only displays a Hantek logo with a QR code (all static), so therefore, internal video activity is not slowing down this unit.
The following enhancements (with different host software - Android host software (with USB OTG) would be good!) can be added without the need to reprogram the soft FPGA, but I am happy to provide a list of enhancements including waveform segmentation on each trigger with FPGA reprogramming (different FPGA definition files can be reloaded without power cycling):
* Address a serious bug where the Sampling Rate does not increase proportionally up to a certain extent when Memory Depth is changed e.g. 1mS/Division has 100K sample rate on 1.6K Memory Depth and should increase to 1M sample rate when changed to 16K Memory Depth for the same Division time.
* Increase frequency of data output to USB Device or Ethernet port e.g. command for sending data continuously until a Stop command is sent.
* Send data packets to USB Device or Ethernet based on Memory Depth e.g. send 16K samples per cycle when Memory Depth is set to 16K.
* Query current Sampling Rate by the connected host.
* Add user programmability of the Sampling Rate.
* Loading (and saving) of waveforms to a storage device on the USB Host port or the SD card.
* FTP server (via USB Device or LAN)
* Remote FPGA code loading (code can be reloaded without power cycling)
* Remote firmware updating
* Direct SPI bus control while retaining original remote control commands
I am also happy to provide detailed hardware information on request.
-
If the Hantek DSO3000A features LAN/VXI and supports screenshot capturing via SCPI commands then I'll happily add screenshot support to lxi-tools (https://lxi.github.io) for this device.
-
I found a Linux console port inside on connector J7 (square pad denotes Pin 1):
1 +3.3V
2 GND
3 TxD (at scope)
4 RxD (at scope)
CAUTION: All inputs and outputs are of the +3.3V type, any other levels will cause damage!
Serial terminal settings are: 115200, 8 Bits, No Parity, 1 Stop Bit, No Flow Control, Terminal Type ANSI
Hardware information which I know of:
S3C2416XH-40 System Controller (400 MHz ARM926EJ with 48 MHz and 12 MHz oscillators with 32.768 kHz RTC oscillator)
D9SBJ System Memory (MT47H32M16NF-25E - 400 MHz 32MB x 16 DDR2-800)
D9RZH Acquisition Memory (MT47H64M16NF-25E - 400 MHz 64MB x 16 DDR2-800)
K9F1G08U0E 128MB x 8 NAND Flash
24L64 I2C EEPROM
DM9000AEP LAN Controller
??? USB Wi-Fi Module (optional)
??? USB Hub (optional)
XC6SLX16FTG256 Control FPGA (under heatsink - has JTAG)
??? 1 GSPS 8-bit Quad ADC (under heatsink - Analog Devices?)
ADF4905 Timebase Generator PLL (with 10 MHz reference oscillator)
LTC2601 x2 (?) 12 Bit Offset DAC
DAC902E 165 MSPS 12 Bit Waveform Generator DAC
74HC595 Channel Relay Switching (1 per channel)
74HC595 Offset Voltage Switching
74HC595 Trigger Source Selection
74HC4051 Offset Voltage Switching
Control FPGA has the following functions:
* Quad ADC interface
* Trigger threshold levels including video trigger
* Timebase control
* Channel relay switching
* Trigger source selection
* Offset voltage DAC interface
* Analog mux control
* Waveform generator DAC interface
* Logic analysis and generation
* DDR2 SDRAM controller
* PLL for waveform generator
Details for a simple VGA DAC on connector J9 is at https://www.eevblog.com/forum/testgear/simple-vga-dac-for-hantek-hdg2000-and-certain-others/ (https://www.eevblog.com/forum/testgear/simple-vga-dac-for-hantek-hdg2000-and-certain-others/)
JTAG ports:
JP1 (FPGA JTAG - Square pad denotes Pin 1)
1 GND
2 TMS
3 TDO
4 TDI
5 TCK
6 +3.3V
PROGRAM_B on the FPGA is LOW during configuration with mode pins on the FPGA being used to determine configruation mode.
ARM JTAG pads
9 7 5 3 1
. . . . . TP71
. . . . . TP70
10 8 6 4 2
1 +3.3V
2 +3.3V
3 /TRST
4 CPU /RESET
5 TDI
6 TDO
7 TMS
8 GND
9 TCK
10 GND
TDI, TCK, TMS, and TRST all have 10K pullups to +3.3V.
-
With regard to the sampling rate not changing proportionally (up to a certain extent), here is the Linux console debug log (for the following, all four channels have been enabled):
Change to 1mS/division with 1.6K memory depth:
[sync_adc_chn_mode]device_sync.adc_chn_mode=ADC_CHN_MODE__QUAD
[sync_dso_sample_rate] physical sample_rate_value=100000
[fpga_acq__set_data_pack_channel_status] cmd:0x1,0x3d
[sync_fpga_data_pack]data_pack=DATA_PACKAGE__125M__1_2_3_4
[sync_dso_sample_rate]pll_freq =800000000,adc_clk_div = 4
[sync_acq_count]trig_time=0,store_depth_value=1600,sample_rate=100000
[sync_acq_count]store_time_pre_trig=8000000000,store_time_after_trig=8000000000,trig_time=0
[sync_acq_count]count_pre=1124034,count_delay=2,count_acq=807966
[dso_resample_set]inter=1,div=1
[sync_get_trig_drop]fpga_value =0,pc_value =0
[sync_resample]read_offset=0,read_len=1600,disp_offset=0,disp_len=1600
Change to 2mS/division with 1.6K memory depth:
[sync_adc_chn_mode]device_sync.adc_chn_mode=ADC_CHN_MODE__QUAD
[sync_dso_sample_rate] physical sample_rate_value=50000
[fpga_acq__set_data_pack_channel_status] cmd:0x1,0x3d
[sync_fpga_data_pack]data_pack=DATA_PACKAGE__125M__1_2_3_4
[sync_dso_sample_rate]pll_freq =800000000,adc_clk_div = 4
[sync_acq_count]trig_time=0,store_depth_value=1600,sample_rate=50000
[sync_acq_count]store_time_pre_trig=16000000000,store_time_after_trig=16000000000,trig_time=0
[sync_acq_count]count_pre=2248034,count_delay=2,count_acq=1615966
[dso_resample_set]inter=1,div=1
[sync_get_trig_drop]fpga_value =0,pc_value =0
[sync_resample]read_offset=0,read_len=1600,disp_offset=0,disp_len=1600
Change to 1.6K memory depth under 1mS/division:
[fpga_acq__set_depth_store] cmd:0x2e,0x1
[sync_acq_count]trig_time=0,store_depth_value=1600,sample_rate=100000
[sync_acq_count]store_time_pre_trig=8000000000,store_time_after_trig=8000000000,trig_time=0
[sync_acq_count]count_pre=1124034,count_delay=2,count_acq=807966
[dso_resample_set]inter=1,div=1
[sync_get_trig_drop]fpga_value =0,pc_value =0
[sync_resample]read_offset=0,read_len=1600,disp_offset=0,disp_len=1600
_store depth__param = 0, ret = 0
Change to 16K memory depth under 1mS/divison:
[fpga_acq__set_depth_store] cmd:0x2e,0x0
[sync_acq_count]trig_time=0,store_depth_value=16000,sample_rate=100000
[sync_acq_count]store_time_pre_trig=80000000000,store_time_after_trig=80000000000,trig_time=0
[sync_acq_count]count_pre=8324032,count_delay=2,count_acq=8007967
[dso_resample_set]inter=1,div=1
[sync_get_trig_drop]fpga_value =0,pc_value =0
[sync_resample]read_offset=7200,read_len=1600,disp_offset=0,disp_len=1600
_store depth__param = 1, ret = 0