Difference between revisions of "ChronoVu LA8"

From sigrok
Jump to navigation Jump to search
(→‎Protocol: Sampling info)
(link to the LA16 device page)
 
(23 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[File:Chronovu la8 device.jpg|thumb|right|ChronoVu LA8]]
{{Infobox logic analyzer
| image            = [[File:Chronovu_la8_front.png|180px]]
| name            = ChronoVu LA8
| status          = supported
| source_code_dir  = chronovu-la
| channels        = 8
| samplerate      = 100MHz
| samplerate_state = —
| triggers        = high, low, dont-care
| voltages        = -0.5 — 5V
| threshold        = Fixed: VIH=2V—5V, VIL=0V—0.8V
| memory          = 8Mbyte (SDRAM)
| compression      = none
| website          = [http://www.chronovu.com/ chronovu.com]
}}


The [http://www.chronovu.com/ ChronoVu LA8] is a USB-based 8-channel logic analyzer with up to 100MHz sampling rate. It features a Xilinx CPLD for sampling, 8MB of built-in SDRAM to store the samples, and can trigger on low or high states of any combination of probes. After the 8MB sample buffer is full, the data is transferred to the host using an FTDI USB-to-serial chip.
The '''ChronoVu LA8''' is a USB-based 8-channel logic analyzer with up to 100MHz sampling rate. See [[ChronoVu LA16]] for the 16 channel version.


See [[ChronoVu LA8/Info]] for more details (such as '''lsusb -vvv''' output) about the device.
It features a Xilinx CPLD for sampling, 8MByte of built-in SDRAM to store the samples, and can trigger on low or high states of any combination of probes. After the 8MByte sample buffer is full, the data is transferred to the host via an FTDI FT245RL chip.


== Thanks ==
See [[ChronoVu LA8/Info]] for more details (such as '''lsusb -v''' output) about the device.


<div style="margin-top:0.5em; margin-bottom:0.5em; padding:0.5em 0.5em 0.5em 0.5em; background-color:#55ee55; align:right; border:1px solid #aabbcc;">
<em style="color:green">
Many thanks to the vendor ([http://www.chronovu.com/ ChronoVu]) for freely providing information on the protocol used to communicate with the device. This helped us implement the sigrok hardware driver more quickly. We're happy to see more open-source friendly vendors support sigrok!
Many thanks to the vendor ([http://www.chronovu.com/ ChronoVu]) for freely providing information on the protocol used to communicate with the device. This helped us implement the libsigrok hardware driver more quickly. We're happy to see more open-source friendly vendors support sigrok!
</div>
</em>


== Hardware ==
== Hardware ==
Line 16: Line 30:
* Micron MT48LC4M16A2 SDRAM (8 MByte)
* Micron MT48LC4M16A2 SDRAM (8 MByte)
* FTDI FT245RL
* FTDI FT245RL
* LXH244A (buffer)
* Level shifter: [http://www.ti.com/product/sn74lvth244a Texas Instruments SN74LVTH244A], marking: LXH244A, [http://www.ti.com/lit/gpn/sn74lvth244a datasheet]
* PT70151
* PT70151
== Photos ==
<gallery>
File:Chronovu la8 device.jpg|<small>Device with probes</small>
File:Chronovu la8 front.jpg|<small>Device, front</small>
File:Chronovu la8 back.jpg|<small>Device, back</small>
File:Chronovu la8 usb.jpg|<small>USB and LEDs</small>
File:Chronovu la8 probes.jpg|<small>Probe connector</small>
File:Chronovu la8 pcb front.jpg|<small>PCB, front</small>
File:Chronovu la8 pcb back.jpg|<small>PCB, back</small>
File:Chronovu la8 xilinx.jpg|<small>Xilinx CPLD</small>
File:Chronovu la8 sdram mt48lc4m16a2.jpg|<small>SDRAM chip</small>
File:Chronovu la8 ftdi ft245rl.jpg|<small>FTDI chip</small>
File:Chronovu la8 lxh244a.jpg|<small>LXH244A</small>
File:Chronovu la8 pt70151.jpg|<small>PT70151</small>
File:Chronovu la8 wires.jpg|<small>Custom wire</small>
</gallery>
See also [http://www.flickr.com/photos/uwehermann/sets/72157626537516956/ this flickr set] for more photos of the device.
== Usage ==
The default samplerate is 100MHz (which results in a sampling time of 0.084s). In order to get 8MB of samples (max.) at 100MHz in binary format use:
$ '''sigrok-cli --driver chronovu-la8 --output-format binary --output-file samples.dat \'''
  '''--samples 8m'''
To select another sampling rate use this syntax:
$ '''sigrok-cli --driver chronovu-la8 --config samplerate=1mhz \'''
  '''--output-format binary --output-file samples.dat --samples 8m'''
In order to save the data in the file format which the ChronoVu LA8 software can read (usually using the '''.kdt''' file extension):
$ '''sigrok-cli --driver chronovu-la8 --config samplerate=1mhz \'''
  '''--output-format chronovu-la8 --output-file samples.kdt --samples 8m'''


== Protocol ==
== Protocol ==
The ChronoVu LA8 is a USB-based device and presents itself as an FTDI device with vendor ID / device ID of '''0403:6001''' (see also [[ChronoVu LA8/Info|the full lsusb]]). Newer versions of the device use the VID/PID '''0403:8867'''. Talking to the device is thus done using libftdi's '''ftdi_read()''' and '''ftdi_write()''' functions.
=== Starting an acquisition ===
The data acquisition is started by sending 4 specific bytes to the device via '''ftdi_write()'''. This configures the sampling and trigger setup and initiates the acquisition.
{| border="0" style="font-size: smaller"
|- bgcolor="#6699ff"
!Byte
!Value
!Comment
|- bgcolor="#eeeeee"
| 0
| divcount
| This byte must contain the '''divcount''' value which determines the samplerate/sampletime/sampleperiod (see below).
|- bgcolor="#dddddd"
| 1
| 0xff
| This byte must always be 0xff.
|- bgcolor="#eeeeee"
| 2
| Trigger pattern
| This byte contains the '''trigger pattern''' (MSB = channel 7, LSB = channel 0). A 1 bit matches a high signal, 0 matches a low signal on a probe. Only low/high triggers (but not e.g. rising/falling) are supported.
|- bgcolor="#dddddd"
| 3
| Trigger mask
| This byte contains the '''trigger mask''' (MSB = channel 7, LSB = channel 0). A 1 bit means "must match trigger pattern", 0 means "don't care".
|}
After these bytes have been sent you need to wait a certain minimal amount of time, then grab the 8MByte buffer data from the LA8 using '''ftdi_read()'''.
=== Demangling data ===
However, the data received from the device is not directly usable as it is "mangled" a bit due to internal hardware reasons. So it's required to de-mangle the data first, in order to get it into the final format, i.e., one byte per sample, MSB is the value of channel 7, LSB is the value of channel 0.
=== Stopping an acquisition ===
TODO
=== Triggers ===


TODO
TODO
Line 25: Line 117:
=== Sampling ===
=== Sampling ===


The device has an 8MB buffer (SDRAM) which is always filled completely with samples. Using the '''divcount''' divider value (valid range: 0x00 - 0xfe) samplerates between 100MHz and 392.15kHz can be selected. Depending on the samplerate different total sampling times (from 0.084s up to 21.391s) can be achieved.
The device has an 8MByte buffer (SDRAM) which is always filled completely with samples. Using the '''divcount''' divider value (valid range: 0x00 - 0xfe) samplerates between 100MHz and 392.15kHz can be selected. Depending on the samplerate different total sampling times (from 0.084s up to 21.391s) can be achieved.


The formula for the sample period (not to be confused with the samplerate) is:
The formula for the sample period (not to be confused with the samplerate) is:
Line 31: Line 123:
  sample period = (divcount + 1) * 10ns
  sample period = (divcount + 1) * 10ns


The following table shows a small part of the valid divcount values and resulting samplerates and sampling times.
The following table shows a small part of the valid divcount values and resulting sample periods, samplerates, and sampling times.


{| border="0" style="font-size: smaller"
{| border="0" style="font-size: smaller"
Line 45: Line 137:
| 0.084s
| 0.084s
|- bgcolor="#dddddd"
|- bgcolor="#dddddd"
| 0x01
| 20ns
| 50MHz
| 0.168s
|- bgcolor="#eeeeee"
| ...
| ...
| ...
| ...
| ...
| ...
| ...
| ...
|- bgcolor="#dddddd"
| 0xfd
| 2540ns
| 393.7kHz
| 21.307s
|- bgcolor="#eeeeee"
|- bgcolor="#eeeeee"
| 0xfe
| 0xfe
| 2550ns
| 2550ns
| 392.15kHz
| 392.156kHz
| 21.391s
| 21.391s
|}
|}
== Usage ==
$ '''sigrok-cli -d chronovu-la8 --samples 8388603 -f binary > samples.dat'''
The default samplerate is 100MHz (which results in a sampling time of 0.084s). To select another sampling rate use this syntax:
$ '''sigrok-cli -d chronovu-la8:samplerate=1mhz --samples 8388603 -f binary > samples.dat'''


== TODO ==
== TODO ==


* Implement input and output file format support for the ChronoVu LA8 software for interoperability.
* Test trigger support, might work already.
* Implement proper trigger support.
* Finish input and output file format support for the ChronoVu LA8 software for interoperability.
* Implement --time and --samples correctly, currently you can only get exactly 8388603 (8MB) samples.
** Trigger support and some smaller fixes are pending.
** For sampling of less than 8MByte of data, padding is needed.
** For less than 8 probes, padding is needed too.
* Implement --time support, currently only --samples works correctly.
* Check if the 8MByte 'final_buf' buffer can be replaced by a static 4kB buffer (if data is sent in 4kB chunks).


== More photos ==
== Resources ==


<gallery>
* [http://www.chronovu.com/downloads/ReadMeFile%20LA8-4.00.pdf Manual]
File:Chronovu la8 device.jpg|<small>Device with probes</small>
* [http://www.chronovu.com/help/docs/faq/ Vendor FAQ]
File:Chronovu la8 usb.jpg|<small>USB and LEDs</small>
* [http://www.chronovu.com/download/ Vendor software]
File:Chronovu la8 probes.jpg|<small>Probe connector</small>
File:Chronovu la8 pcb front.jpg|<small>PCB, front</small>
File:Chronovu la8 pcb back.jpg|<small>PCB, back</small>
File:Chronovu la8 xilinx.jpg|<small>Xilinx CPLD</small>
File:Chronovu la8 sdram mt48lc4m16a2.jpg|<small>SDRAM chip</small>
File:Chronovu la8 ftdi ft245rl.jpg|<small>FTDI chip</small>
</gallery>


See also [ this flickr set] for more PCB photos of the device.
[[Category:Device]]
[[Category:Logic analyzer]]
[[Category:Supported]]

Latest revision as of 17:36, 24 May 2018

ChronoVu LA8
Chronovu la8 front.png
Status supported
Source code chronovu-la
Channels 8
Samplerate 100MHz
Samplerate (state)
Triggers high, low, dont-care
Min/max voltage -0.5 — 5V
Threshold voltage Fixed: VIH=2V—5V, VIL=0V—0.8V
Memory 8Mbyte (SDRAM)
Compression none
Website chronovu.com

The ChronoVu LA8 is a USB-based 8-channel logic analyzer with up to 100MHz sampling rate. See ChronoVu LA16 for the 16 channel version.

It features a Xilinx CPLD for sampling, 8MByte of built-in SDRAM to store the samples, and can trigger on low or high states of any combination of probes. After the 8MByte sample buffer is full, the data is transferred to the host via an FTDI FT245RL chip.

See ChronoVu LA8/Info for more details (such as lsusb -v output) about the device.

Many thanks to the vendor (ChronoVu) for freely providing information on the protocol used to communicate with the device. This helped us implement the libsigrok hardware driver more quickly. We're happy to see more open-source friendly vendors support sigrok!

Hardware

Photos

See also this flickr set for more photos of the device.

Usage

The default samplerate is 100MHz (which results in a sampling time of 0.084s). In order to get 8MB of samples (max.) at 100MHz in binary format use:

$ sigrok-cli --driver chronovu-la8 --output-format binary --output-file samples.dat \
  --samples 8m

To select another sampling rate use this syntax:

$ sigrok-cli --driver chronovu-la8 --config samplerate=1mhz \
  --output-format binary --output-file samples.dat --samples 8m

In order to save the data in the file format which the ChronoVu LA8 software can read (usually using the .kdt file extension):

$ sigrok-cli --driver chronovu-la8 --config samplerate=1mhz \
  --output-format chronovu-la8 --output-file samples.kdt --samples 8m

Protocol

The ChronoVu LA8 is a USB-based device and presents itself as an FTDI device with vendor ID / device ID of 0403:6001 (see also the full lsusb). Newer versions of the device use the VID/PID 0403:8867. Talking to the device is thus done using libftdi's ftdi_read() and ftdi_write() functions.

Starting an acquisition

The data acquisition is started by sending 4 specific bytes to the device via ftdi_write(). This configures the sampling and trigger setup and initiates the acquisition.

Byte Value Comment
0 divcount This byte must contain the divcount value which determines the samplerate/sampletime/sampleperiod (see below).
1 0xff This byte must always be 0xff.
2 Trigger pattern This byte contains the trigger pattern (MSB = channel 7, LSB = channel 0). A 1 bit matches a high signal, 0 matches a low signal on a probe. Only low/high triggers (but not e.g. rising/falling) are supported.
3 Trigger mask This byte contains the trigger mask (MSB = channel 7, LSB = channel 0). A 1 bit means "must match trigger pattern", 0 means "don't care".

After these bytes have been sent you need to wait a certain minimal amount of time, then grab the 8MByte buffer data from the LA8 using ftdi_read().

Demangling data

However, the data received from the device is not directly usable as it is "mangled" a bit due to internal hardware reasons. So it's required to de-mangle the data first, in order to get it into the final format, i.e., one byte per sample, MSB is the value of channel 7, LSB is the value of channel 0.

Stopping an acquisition

TODO

Triggers

TODO

Sampling

The device has an 8MByte buffer (SDRAM) which is always filled completely with samples. Using the divcount divider value (valid range: 0x00 - 0xfe) samplerates between 100MHz and 392.15kHz can be selected. Depending on the samplerate different total sampling times (from 0.084s up to 21.391s) can be achieved.

The formula for the sample period (not to be confused with the samplerate) is:

sample period = (divcount + 1) * 10ns

The following table shows a small part of the valid divcount values and resulting sample periods, samplerates, and sampling times.

Divider Sample period Samplerate Sampling time
0x00 10ns 100MHz 0.084s
0x01 20ns 50MHz 0.168s
... ... ... ...
0xfd 2540ns 393.7kHz 21.307s
0xfe 2550ns 392.156kHz 21.391s

TODO

  • Test trigger support, might work already.
  • Finish input and output file format support for the ChronoVu LA8 software for interoperability.
    • Trigger support and some smaller fixes are pending.
    • For sampling of less than 8MByte of data, padding is needed.
    • For less than 8 probes, padding is needed too.
  • Implement --time support, currently only --samples works correctly.
  • Check if the 8MByte 'final_buf' buffer can be replaced by a static 4kB buffer (if data is sent in 4kB chunks).

Resources