Getting Started


Downloads

Below are the links to the latest software versions for both Windows and Linux. Both software versions should run standalone and feature the same functionalities. The Windows version has been tested on Windows 10 and 11. The Linux version is tested on Ubuntu 20.04 and 22.04.


Installation

Windows:

  1. Unzip the downloaded package. It contains the following folders:
    • Drivers
    • SPAD512S_standalone_win64
  2. Install the drivers and the Visual C++ Redistributables from the Drivers folder.
  3. Connect the two USB-B cables to the camera and the PC. Ideally to separate USB host controllers for the best performance.
  4. Connect the 5V power plug to the camera's master power jack. Always use only one power supply for the camera.
  5. Run the software by double clicking the SPAD512S.exe in the SPAD512S_standalone_win64 folder.
  6. The software will run a background calibration task the first time you turn on the camera.
  7. You should now be able to see the live view from the camera.

Linux:

  1. Unzip the downloaded package. It contains the following folders:
    • Install
    • SPADSPAD512S_standalone_linux64
  2. Open a terminal in the Install folder and execute the following command: sudo ./install.sh. You might be prompted for your administrator password to proceed with the installation. The installation file might require execution permissions, set this with sudo chmod +x install.sh
  3. Connect the two USB-B cables to the camera and the PC. Ideally to separate USB host controllers for the best performance.
  4. Connect the 5V power plug to the camera's master power jack. Always use only one power supply for the camera.
  5. Run the software by double clicking the SPAD512S executable in the SPAD512S_standalone_linux64 folder. Alternatively, open a terminal in the SPAD512S_standalone_linux64 folder and execute: ./SPAD512S. The application might require execution permissions, set this with sudo chmod +x SPAD512S
  6. The software will run a background calibration task the first time you turn on the camera.
  7. You should now be able to see the live view from the camera.

Setting up

At the first run, the noise and uniformity calibration data should be automatically downloaded from the remote server. However, it is advised to execute the following steps in order to ensure that the calibration data also matches the current environment conditions:

  1. Keep the system in the dark and run the noise calibration from the menu.
  2. Continue by running the dead pixel calibration from the menu still keeping the system in the dark.
  3. Optionally illuminate the sensor with a uniform light source and install the optics to be used for the experiments, now run the gain calibration to correct for non-uniformities in the sensor.
  4. In case the system will be synchronized to a (pulsed) laser, illuminate the sensor as uniformly as possible with the laser light and run the master/slave offset calibration from the menu. This step might have to be redone on each change of input frequency.

All these parameters will be stored and loaded on each new start-up of the camera.

The software will regularly check for updates and prompt in case new updates are available. One can force an update check from the dropdown menu in the top left corner of the software interface. To use the new software, remove the old software from the PC and extract the files from the new package as described in Installation.


Pile-up correction

Due to the dead time of each pixel, incident photons might be ignored, if detected shortly after the previous photon. This effect is mainly noticeable for higher photon count rates and needs to be corrected for, i.e. using the pile-up correction. This correction transforms the measured amount of photons into the probable amount of photons that hit the SPAD. To correct the images, one can use the following formula to correct the measured number of photons in each pixel Nmeasured into the actual amount of photons Nactual:


Nactual = -ln(1.0 - Nmeasured / 255) × 255

This formula is valid for 8-bit image data. In case a different bit depth is used, the value 255 has to be adapted to reflect this change, e.g. 4-bit requires the value 15.

This correction can now also be applied directly on the data and saved into the images by enabling the pile-up correction from the menu.


Hardware


Sensor

The SPAD512² system contains a sensor with a 512×512 SPAD array. Each pixel contains circuitry for gated operation and a counting memory. Images are read from the sensor into the memory on the FPGA, where the images are integrated into higher multi-bit images. The current version of the firmware allows to read 1, 4 and 6 to 12-bit images streamed to our software package. FLIM images are always using an 8-bit image sequence. The maximum integration time per 1-bit frame is limited by the pixel memory to roughly 1ms.


System

The system is housed in a solid aluminium enclosure measuring 147×105×50mm. It is powered from a single 5V adapters and data can be read from the two USB-B ports. One can also connect only the 'Master' part to read data from half of the sensor. The SMA connectors on the top of the package are shown in the figure below. They have the following functionality:

  • Laser clock input
    Frequency: 10—80MHz, high impedance, maximum input voltage: 5.0V (or 1.8V for systems delivered before July 2022).
  • Frame clock input
    High impedance, maximum input voltage: 5.0V (or 1.8V for systems delivered before July 2022).

Acceptable input voltage ranges: 0—2.5V, 0—3.3V and 0—5.0V (LVTTL/TTL). For systems delivered before July 2022, the acceptable range is 0—1.8V only! The minimum detectable pulse width for the frame trigger is 12ns and for the gate trigger roughly 3ns.

For systems generating negative pulses (such as the NIM synchronization output on several laser drivers), we recommend the use of an active NIM to TTL inverter. We have obtained good results with the following two active inverters:

Mechanical drawing

The system, FPGAs + sensor, consumes in idle operation mode around 7.5W. This is mainly static power consumed by the FPGA resources. Under measurement operation, the power consumption increases to maximum 10W. For optimal thermal performance, the system can be shutdown when unused for an elongated period of time. A proper metal support on the box can help to absorb part of the heat in the large thermal mass of an optical table. Adding a fan to the system is beneficial for cooling and reducing the dark noise.


Graphical user interface


Menu

The options menu is available in the top left corner of the user interface. There are the following options:

  • Set save path
    Changes the folder in which the software is saving the data to a user selected one.
  • Toggle GUI to standard/dark theme
    Switch between a dark themed interface and the classical theming.
  • Toggle plots to linear/log
    Switch the plots on the gated/FLIM tabs to use either a log or linear scale on the y-axis.
  • Toggle images colormap
    Switches the colormap in between colored and greyscale representation. All images are by default saved with a greyscale color map.
  • Disable/enable pile-up correction
    The pile-up correction can be applied on the fly on the images, this will extend the bit-depth of the images. The pile-up correction is only applied for images with a > 4-bit depth.
  • Disable/enable MSB alignment
    The images are now aligned by default to the LSB, giving the actual pixel values without the need for bit shifting the data. However, images will appear visually dark(er). This option allows to align the data with the MSB to make images in all bit depths appear equally bright.
  • Disable/enable calibrated corrections
    For inspection and debug purposes, the image corrections can be disabled.
  • Calibrate noise
    Stores a map of the noisy pixels to be interpolated for further measurements. This requires the system to be in complete darkness. The noise threshold is set to ~2kcps.
  • Calibrate dead
    Stores a map of the dead/broken pixels to be interpolated for further measurements. This requires the system to be kept in the dark.
  • Calibrate gain
    Stores a map of the pixel gain differences to be applied to further measurements to uniformize the image. This requires the system to be uniformly illuminated.
  • Calibrate breakdown
    Measures the breakdown point of the SPADs. This ensures each detector will always be biased at the same excess bias voltage with respect to the breakdown point. The breakdown voltage is stored and loaded on startup.
  • Calibrate master/slave offset [only after calibrate noise is completed]
    Stores the laser clock delay between the two halves. This requires the system to be illuminated with a pulsed light source.
  • Disable/enable fans
    Turn on and off the fans inside the enclosure. In the on state, the fans will run at their maximum speed.
  • Disable/enable VDD
    Turn on and off the detectors power supplies.
  • Check for updates
    Forces an online check for a new software version.
  • Help
    Opens this manual.
  • Quit
    Closes the software.

Live view

SPAD512S live view

The live view tab shows images from the sensor array. The exposure is set automatically to account for changes in the light condition. The auto exposure tries to find a suitable average light intensity, which may give unwanted results in very dark environments. A black—red—yellow—white color scale shows the intensity variation over the array. The color scale can be changed to grey scale in the menu.

The automatic exposure can be disabled by toggling AUTO and M exposure modes. In M mode, the exposure can be adjusted with the scrollbar on the left side of the screen. In any mode, the current exposure time can be copied to measurements in the intensity and gated imaging tabs, populating the integration time fields per ratio to the bit depth and by correcting for the gate width ratio..

A histogram of the current image can be enabled by checking the Live view histogram checkbox below the image. The histogram will update in real-time together with the currently shown image. Two additional checkboxes are available in this operation mode: highlighting saturated and/or dark pixels in blue/green colors in the current live view image. This should help to prevent getting over- or under-exposed images.

A small version of the live view is also available on the other tabs in the bottom left corners.


Intensity imaging

SPAD512S intensity imaging

The second tab provides the intensity imaging capabilities of the system. On the left side, there is a control panel to setup the parameters for the measurements that are displayed on the right. The measurement progression is indicated in the bottom status bar. The following options are available:

  • 1/4/6/7/8/9/10/11/12-bit depth
    Switch between 1, 4, 6, 7, 8, 9, 10, 11 and 12-bit imaging modes. Depths up to 8-bit are rendered out as 8-bit images. Depths above 8-bit are rendered out as 16-bit images, these are internally obtained by summing multiple 8-bit data sets (so the maximum value is not 2^bit depth - 1, but 2^(bit depth - 8) × 255).
  • Integration time (n-bit)
    Set the measurement integration time in milliseconds for the total of an n-bit image. Except for 1-bit imaging, this time is divided by 2n to get the single-bit image exposure time. Each n-bit image is always the sum of 2n binary images (except 1-bit).
  • Overlap expose/read checkbox
    Enables the simultaneous exposure and reading from the chip, which reduces the overhead from reading the single-bit frames.
  • Estimated frame rate
    Displays the estimated frame rate that the sensor will be taken images at. The background of the box will be colored green if the camera is running at its highest pace.
  • Frames
    Set the number of frames to be read from the camera. Setting zero (for 4, 6, 7, 8, 9, 10, 11, 12-bit depths) gives the option to measure an infinite amount of time until the stop button is pressed. The resulting images will be displayed on the right and can be scrolled through with the scrollbar on top of the images. Currently, the maximum number of frames that can be taken in a single acquisition is limited to 130,000.
  • External frame trigger checkbox
    Allows the start of each frame to be synchronized with an external source. On the rising edge of the frame trigger, a new n-bit image is integrated, dependent on the bit depth set by the user. The external trigger is sampled with the internal 100MHz clock, thus requiring the trigger to have a minimum pulse width of roughly 12ns. Requires at least number of frames + 1 triggers to operate successfully. If this mode is activated through the TCP/IP interface, a READY confirmation will be sent before starting the sequence, so you know when it is safe to start triggering the camera.
  • Sparse data checkbox (1-bit)
    Instead of saving the complete image, only the pixels with a count are saved. Data is a binary array (integers) of the activated pixels.
  • Save checkbox
    Saves the measurement to disk. A folder data/intensity_images/acqXXXXX/ is created in the run or user specified directory and images are saved with the name IMGYYYYY.png or RAWYYYYY.bin (1-bit). XXXXX denotes the run iteration, YYYYY is the frame or package number of the measurement. The following metadata is available in the saved images: Author, System, Date taken, Time taken, Mode, Bit shift MSB, Integration time, Overlap, Frame, Frames, External frame trigger, Software version. Images are saved with 8 or 16 bits depth.
    The raw binary data saved in 1-bit depth is a continuous array of bits. Each bit represents a single pixel, with its value either being 0 or 1. Each binary file stores at most 1,000 frames, with each frame taking exactly 512×512 bits.
    The sparse binary data saved in 1-bit depth is a continuous array of the activated pixels. Each four bytes form a single integer representing the pixel number with a value '1'. These binary files store at most 10,000 frames, pixel numbers are increasing. A dummy pixel 512×512 indicates the end of the current frame.
  • Start button
    Launches the chosen measurement.

Gated imaging

SPAD512S gated imaging

The third tab provides the gated imaging capabilities of the system. The control panel is again visible on the left and results are displayed and plotted on the right. The measurement progression is indicated in the bottom status bar. The following options are available:

  • 6/7/8/9/10/11/12-bit depth
    Switch between 6, 7, 8, 9, 10, 11 and 12-bit imaging modes. There are currently no 1 and 4-bit imaging modes available in gated operation. Depths up to 8-bit are rendered out as 8-bit images. Depths above 8-bit are rendered out as 16-bit images, these are internally obtained by summing multiple 8-bit data sets (so the maximum value is not 2^bit depth - 1, but 2^(bit depth - 8) × 255).
  • Integration time (n-bit)
    Set the measurement integration time in milliseconds for the total of an n-bit image. This time is divided by 2n to get the single-bit image exposure time. Each n-bit image is always the sum of 2n binary images.
  • Overlap expose/read checkbox
    Enables the simultaneous exposure and reading from the chip, which reduces the overhead from reading the single-bit frames. This might, however, introduce some artefacts in the resulting image.
  • Estimated exposure time
    Displays the estimated exposure per image. Since the gate is only open for a fraction of the time, the estimated exposure time is the duration in which the gate is actually open.
  • Laser period
    Displays the frequency of the currently connected laser clock. The background of the box will be colored green if a proper clock is detected and the camera is ready for a new acquisition.
  • Estimated frame rate
    Displays the estimated frame rate per gate sequence. The background of the box will be colored green if the camera is running at its highest pace.
  • Frames
    Set the number of gate sequences to be read from the camera. The resulting images will be displayed on the right and can be scrolled through with the scrollbar on top of the images. The intensity profile of any pixel can be shown in the plot on the right by clicking on it in the image (up to 10 graphs). One can turn the plot to log scale through the menu.
  • Gate steps
    Set the number of gates to take for each frame. Each gate step will be shifted away from the laser clock edge by the step size either in positive or negative direction.
  • Gate step size
    Set the step size in picoseconds. The step is calculated based on the provided frequency. This value is dictated by the phase shifting of the PLL. The smallest step size is in the order of 17 to 20ps.
  • Arbitrary step sizes checkbox
    Defines if the gate steps will be uniform or loaded with a user defined sequence. The number of gate steps is defined by the length of the user defined sequence + 1.
  • Arbitrary step sizes
    Input the user defined sequence of steps. Each step is a multiple of the minimum step size. Each value has to be separated with a comma. The values are the delta steps, e.g. putting a value of 0 stays in the current step (and so it doesn't reset to the begin of the sequence). The sequence always starts with a step value of zero at the gate offset. The maximum number of arbitrary steps is 127 steps/frame.
  • Gate width
    Set the exposure opening of the gate with respect to the laser clock period, e.g. 50ns. The width is an integer value from 5ns to a value that depends on the provided frequency. The actual gate width can deviate slight for lower values (<10ns). We guarantee all our systems to be working properly from a gate width setting of 6ns. Setting 5ns gate width can lead to a shorter gate width, but it can also introduce some artefacts. This is dependent on device to device variation.
  • Gate offset
    Set the initial offset of the gate sequence. The offset is a multiple of the minimal gate step size.
  • Gate increment checkbox
    Defines the direction of the gate shift to be in either positive (increment) or negative (decrement) direction from the laser clock edge.
  • External frame trigger checkbox
    Allows the start of each frame (one frame is a complete gate sequence with X gate steps) to be synchronized with an external source. On the rising edge of the frame trigger, a new n-bit image sequence is integrated, dependent on the bit depth set by the user. The external trigger is sampled with the internal 100MHz clock, thus requiring the trigger to have a minimum pulse width of roughly 12ns. If this mode is activated through the TCP/IP interface, a READY confirmation will be sent before starting the sequence, so you know when it is safe to start triggering the camera.
  • External gate trigger checkbox
    Allows the start of each gate pulse to be controlled with an external source. This triggering cannot operate together with the external frame triggering. On each rising edge of the gate trigger, a single gate is opened for the duration set by the gate width. The minimum distance between two consecutive gate triggers depends on the connected laser clock frequency, i.e. the dead time is roughly the period of the laser clock. A higher laser clock frequency will thus allow for a shorter dead time. The integration time of a single image is set separately in the software as usual. In this integration time, there can be as little as zero external gate triggers up to a maximum of the integration time divided by the laser clock period. This mode requires a synchronization clock to be active on the laser clock SMA for the internal gating circuitry to be operational. The external trigger is sampled with the internal 500MHz clock, thus requiring the trigger to have a minimum pulse width of roughly 3ns.
  • Save (single/multi) checkbox
    Saves the measurement to disk. In multi mode, a folder data/gated_images/acqXXXXX/ is created in the run or user specified directory and images are saved with the name IMGYYYYY.png. XXXXX denotes the frame, YYYYY is the gate step. In single mode, a folder is created in the run directory with the name data/gated_images/acqXXXXX/. Images are saved with the following name: IMGYYYYY-ZZZZ.png. XXXXX denotes the measurement iteration, YYYYY is the frame number and ZZZZ is the gate step. The following metadata is available in the saved images: Author, System, Date taken, Time taken, Mode, Bit shift MSB, Integration time, Laser frequency, Overlap, Frame, Frames, Gate step, Gate steps, Gate step arbitrary, Gate step size, Gate width, Gate offset, Gate increment, External frame trigger, External gate trigger, Software version. Images are saved with 8 or 16 bits depth.
  • Start button
    Launches the chosen measurement.
  • Find gate button
    Calculates the optimal gate offset and number of gate steps to cover one period of the gate.

The gating measurement principle is shown below. A gated frame is a series of n-bit images, each shifted by a small time step in order to reconstruct the time varying phenomenon of interest. The number of images to be taken in a single frame is given by the gate steps parameter, or in case arbitrary step sizes are used, by the number of arbitrary steps. Each step, the gate opening, defined by the gate width, is shifted by the set gate step in picoseconds. The gate is shifted away from the rising edge of the laser clock in either positive direction (gate increment) or negative direction (gate decrement). To create a single n-bit image, the gate is opened for N times, where N is given by the integration time (n-bit) multiplied by the laser frequency. For example, when the integration time is set to 3ms and the laser frequency is 20MHz, the gate will open 60,000 times to create a single image. One can also estimate the actual exposure time (the time in which the sensor is sensitive) from the gate width: exposure time = gate width / laser period * integration time. Taking the same example as before with a gate width of 6ns: exposure time = 6/50*3ms = 0.36ms. This number is also calculated and shown on the gated imaging tab.

Live view

Fluorescence lifetime imaging

SPAD512S FLIM imaging

The fourth tab provides the FLIM imaging capabilities of the system. This mode uses a sequence of gated images to calculate the lifetimes and generate a lifetime image. For ease of use, the number of parameters in the control panel on the left is simplified and most underlying gate parameters are calculated based on the expected lifetime. The control panel is split in between the measurement mode and the analysis mode, which becomes available after finishing a lifetime measurement. In measure mode, the following options are available:

  • Mono/bi-exponential mode [only before calibration]
    Switch between mono-exponential measurements and bi-exponential measurements. The main differences are the way the system is calibrated and the way normal measurements are IRF corrected.
  • Integration time (8-bit)
    Set the measurement integration time in milliseconds for the total of an 8-bit image. This time is divided by 256 to get the single-bit image exposure time.
  • Maximum expected lifetime [only before calibration]
    Set the maximum expected lifetime of the fluorophores under investigation. This parameter defines the measurement window of the exponential decay curve.
  • Gate width [only before calibration]
    Set any of the three options for a short, medium or long exposure gate width. A short gate width should be sufficient for the majority of measurements. These gate widths correspond to values 3, 6 and 9 respectively in gated imaging mode.
  • Gate subsampling [only after calibration]
    Divide the optimal number of gates as calculated in the calibration. For calibration, the minimum gate step size is taken to get the most accurate calibration result. For normal measurements, one can undersample to trade-off precision versus speed.
  • Save checkbox
    Saves the measurement to disk. A folder data/flim_images is created in the run or user specified directory and images are saved with the names IMGXXXX-intensity-YYYY.png, IMGXXXX-lifetime-YYYY.png and IMGXXXX-phasor-YYYY.pdf. XXXX denotes the run iteration, YYYY is the frame number. The following metadata is available in the saved images: Author, System, Mode, Integration time.
  • Live view checkbox
    This option is available after at least one normal FLIM measurement. Enabling this box and launching a new measurement will continuously run new FLIM measurements until the user stops the operation.
  • Start button
    Launches the chosen measurement.
  • ROI button
    Click and drag in the intensity image to select a region of interest. During selection, a white outline will appear on the image.
  • ROI reset
    Resets the region of interest back to the full image.

FLIM images are generated with the phasor method. In the case of mono-exponential samples, the calibration of the IRF finds the falling edge of the gate. The end of the IRFs falling edge determines the starting point for normal measurements and the measurement window is defined by the maximum lifetime. Since the gate falling edge is convolved with the fluorescence decay for normal measurements, we will capture exactly the exponential part of the decay curve. The phasor is calculated directly from the measurement data without further corrections.

In the case of bi-exponential data, the calibration and measurements rely on the complete gate window. Therefore, the calibration determines both the gate rising and falling edges and calculates the complete window, including the extension from the fluorescence convolution. For normal measurements, the phasor data is calculated and the IRF phasor data is subtracted from it.

For each measurement, an intensity image, lifetime image, pixel response curve and phasor plot are generated. Each is displayed in one quadrant of the screen on the right side of the control panel. One can add multiple pixels (up to 10) to the pixel curve graph by clicking on them in either the intensity or lifetime image. Hovering over any of the image pixels will also highlight the corresponding phasor in the phasor plot. The average calculated lifetime and standard deviation are printed in the bottom right corner. A colorbar below the lifetime image denotes the minimum and maximum lifetimes visible in the image.

Alternatively, one can stream out the raw data that is generated from the phasor calculations through the remote TCP/IP interface. The data for each pixel is streamed out and contains the intensity [cps], lifetime [ns] and the g/s coordinates of the phasor.

When the measurement is completed, the analysis tab is unlocked. Switching to the analysis tab transforms the intensity and lifetime images into plots. One can adjust the zoom and color range to adjust the image for better clarity. The intensity image is corrected for background noise and pile-up. The analysis mode has the following capabilities:

  • ROI button
    Click in the intensity image and move around the area of interest to draw the region of interest to be analysed. Click a second time to confirm the region. Once a region has been selected, the ROI is also displayed in the lifetime image. The average curve is displayed in the curves plot on the top right and the lifetime phasor points belonging to the current selection are shown in the phasor plot. One can make up to 20 regions of interest.
  • ROI reset
    Clears all active regions of interest.
  • Open button
    Allows to load a previously stored set of ROIs. Once an analysis result is stored, a file is saved with the coordinates of each ROI. This file can be selected to repeat the same analysis on a new measurement.
  • Save button
    Saves all four plots into *.pdf documents, saves the list with the information on counts and lifetime into a *.txt file and saves the coordinates of each ROI into a *.txt file that can be loaded to rerun the analysis on a new measurement.

Settings

SPAD512S camera settings

The last tab shows the system settings. The top half is divided in 6 boxes:

  • Top left
    Status indication of the USB connection. This is indicated green when the system is connected by USB3. The system can be reinitialized by clicking the reset button. The software gives a warning when the system is not connected with USB3.
  • Top middle
    Speed test for the USB connection. The transfer speed is calculated by transferring the set number of MBs and dividing by the elapsed time.
  • Top right
    Status of the remote communication server. The software can be programmed from any capable TCP/IP software package, see the command guide for instructions. The listening port on the localhost can be changed through the dropdown menu.
  • Bottom left
    Current operating voltages. The operating voltages can be changed on the fly. One can change the detectors sensitivity by adjusting the Vex. Vq is set to 0 by default and cannot be changed.
  • Bottom middle
    Current operating temperatures of the FPGA, the interposer (main) PCB and the chip PCB on which the sensor is located. Therefore, the chip PCB temperature should be a good indication of the sensors current operating temperature. Ideally, the sensor temperature should be kept as low as possible. Without air flow, the PCB temperature should be below 45°C. For supported device, also the relative humidity will be displayed.
  • Bottom right
    Current SMA input frequencies. Shows the current running frequency for the SMA laser and frame clock input.

The log is printed in the field below. Here you can find information regarding the connection to the two FPGAs and the current versions of the firmware and software. The log can be saved with the save button on the right.


Remote command interface

The software can be started with the following optional command line arguments. The command line syntax is either SPAD512S.exe arg1 arg2 arg3 on Windows or ./SPAD512S arg1 arg2 arg3 on Linux.

  • arg1 is GUI
    Launches the software with the GUI shown (default).
  • arg1 is headless
    Launches the software without the GUI shown. A tray icon is visible in the taskbar.
  • arg2 is options
    Displays the following options in the tray icons context menu: show, hide, quit (default in headless mode).
  • arg2 is no-options
    No context menu available for the tray icon.
  • arg3 is the user defined TCP/IP port
    Select a port of free choice. The software will confirm that it is listening on the chosen port. This value will default to 9999 when unused (or the value stored from a previous run).

For example to start the software without a GUI and with a context-menu in the tray icon on windows, execute in the command line: SPAD512S.exe headless options

To also specify a custom TCP/IP port, e.g. 2500, we execute on windows, in the command line: SPAD512S.exe headless options 2500

The software can be operated over TCP/IP with a simple command protocol. The software is listening for new remote users on the PCs localhost port 9999 by default. This port can be changed on the settings tab. The following sections list the available commands and show some programming examples.


Command guide

All commands start with capital characters, followed by its parameters. Parameters indicated in triangle brackets <> should be replaced by a numerical value, parameters in square brackets [] should be replaced by a string. Commands can be separated by a line feed \n, so multiple commands can be send at the same time.

  • Live view image
    L
    Command returns the latest live view image in binary format.
  • Intensity imaging
    I,<bits>,<measurement time in us>,<frames>,<frame trigger>,<overlap>,<sparse>,<stream>
    <bits> is either 1, 4, 6, 7, 8, 9, 10, 11 or 12 for the bit-depth of the image.
    <frame trigger> is either 0 for no external triggering of new frames or 1 for the external triggering of new frames.
    <overlap> is either 1 for overlapping exposure and read-out or 0 for non-overlapped measurements.
    <sparse> is either 1 for sparse saving of data or 0 for standard full images. This option is only available in 1-bit depth, set to zero for all other bit depths.
    <stream> is either 1 for direct streaming of the images through TCP/IP or 0 for saving of the images to disk.
    Command returns the paths to the image files, or streams the images directly.
  • Gated imaging
    G,<bits>,<measurement time in ms>,<frames>,<gate steps>,<gate step size in ps>,<gate step arbitrary>,<gate width>,
    <gate offset ins ps>,<gate direction>,<gate trigger>,<overlap>,<stream>
    <bits> is either 6, 7, 8, 9, 10, 11 or 12 for the bit-depth of the image.
    <gate step arbitrary> is either 0 for uniform step sizes defined by step size and steps or 1 for arbitrary step sizes defined by the user (use command Ga).
    <gate direction> is either 0 for decrementing or 1 for incrementing the gate with respect to the laser.
    <gate trigger> is either 0 for internal trigger, 1 for the use of an external trigger to launch each gate pulse, or 2 for the use of an external trigger to launch each gate frame (step sequence).
    <overlap> is either 1 for overlapping exposure and read-out or 0 for non-overlapped measurements.
    <stream> is either 1 for direct streaming of the images through TCP/IP or 0 for saving of the images to disk.
    Command returns the paths to the image files.
  • Set arbitrary gated step sizes
    Ga,[step size array]
    [step size array] is a dot-comma (;) separated array with the user defined step sizes to be loaded into the FPGA.
    Command returns a confirmation if writing the array is successful.
  • Find optimal gate offset and number of gate steps
    Gf,<measurement time in ms>,<gate step size in ps>,<gate width>,<gate direction>
    <gate direction> is either 0 for decrementing or 1 for incrementing the gate with respect to the laser.
    Command returns the parameters found for the gate.
  • FLIM imaging
    • Calibration
      F,c,<flim mode>,<measurement time in ms>,<expected lifetime in ns>,<gate width>
      <flim mode> is either 0 for mono-exponential or 1 for bi-exponential measurements.
      <gate width> is either 0 for a short, 1 for a medium or 2 for a long gate width.
      Command returns the result of the calibration.
    • Normal measurement
      F,i,<measurement time in ms>,<gate subsample ratio>,<raw data>
      <raw data> is either 0 for image output or 1 for raw data output in the format master/slave, counts, lifetime, g, s per pixel for the two halves. See below python example for the reconstruction of an image from the raw data.
      Command returns the paths to the image files and phasor plot or it returns the raw data directly.
  • Set auto or manual exposure for the live view
    AE,<mode>,<measurement time in ms>
    <mode> is 0 for manual exposure and 1 for auto exposure.
    Command returns a confirmation of the changed exposure mode.
  • Calibrate the system
    CALIB,<mode>
    <mode> is 0 for noise calibration, 1 for dead pixel calibration, 2 for master/slave offset calibration and 3 for breakdown calibration.
    Command returns when the calibration has completed.
  • Manually set the master/slave offset value
    CALIB,<mode>,<value>
    <mode> is 2 to set master/slave offset.
    <value> is the offset in picoseconds.
    Command returns the new offset value.
  • Get current operating temperatures and running frequencies
    R
    Command returns the temperatures of the FPGA and PCBs in °C. It also returns the measured frequency of the laser and frame clocks. Format is <FPGA master temperature>,<FPGA slave temperature>,<main PCB temperature>,<chip PCB temperature>,<laser clock frequency>,<frame clock frequency>. For systems with a humidity sensor, the format is: <FPGA master temperature>,<FPGA slave temperature>,<main PCB temperature>,<main PCB temperature 2>,<chip PCB temperature>,<relative humidity in %>,<laser clock frequency>,<frame clock frequency>.
  • Set the path for the software to save data and images
    D,[dir]
    Command returns the folder path if it exists.
  • Get system information
    D
    Command returns the debug information for the system. This includes the FPGA serial numbers, version numbers and enabled modules.
  • Set the fan speed
    S,<speed>
    <speed> is 0 for disabled fans, 1 for enabled fans at full-speed.
    Command returns a confirmation if fan speed change is successful.
  • Enable/disable systems power
    POW,<enable>
    <enable> is 1 for activating VDD, 0 for disabling VDD.
    Command returns a confirmation of the new power state.
  • Set voltages
    V,<Vq>,<Vex>
    <Vq> is 0V.
    <Vex> range is 4 to 7V.
    Command returns a confirmation if changes are successful.
  • Get voltages
    V
    Command returns the current operating voltages. Format is <Vq>,<Vex>
  • Close the software QUIT
    Closes the software and brings the detector in a safe operating regime.

Programming examples

Some simple programming examples are available for download below. The following files are available:


Performance benchmarks

The following tables gives an overview of the acquisition speeds that can be obtained with our camera and software. Since they depend on the connected PC, these metrics cannot be guaranteed and are solely for reference purposes. These values were obtained on a PC with the following specifications:

  • OS: Windows 10, version 22H2
  • Processor: AMD Ryzen 7 3700X
  • RAM: 64 GB
  • Storage: SSD 1 TB

The table shows some typical measurement scenarios and corresponding values, most of them are split between the reading time from the USB and the post-processing time taken by the software. Currently, the 4-bit depth requires most post-processing due to the packing of the data in bytes and the need to unpack this data. In most scenarios, a read-out speed can be obtained that is fairly close to the theoretical value. In case of 1-bit depth, the data is stored locally in the FPGA before being transmitted to the PC; in this case the read-out speed is not separated from the total speed. Saving to disk and streaming through TCP/IP have a slight overhead, mainly dependent on the performance of the PC. The time with saving is the time until the system is ready for a new measurement; it might be that the software is still writing the images to disk in the background.

Measurement settings Time without saving Time with saving Time with streaming
Intensity 8-bit, overlap enabled,
2.7 ms/frame, 1,000 frames
2705 + 5 ms 2705 + 5 ms 2705 + 6 ms
Intensity 7-bit, overlap enabled,
1.4 ms/frame, 1,000 frames
1412 + 6 ms 1413 + 9 ms 1412 + 9 ms
Intensity 6-bit, overlap enabled,
0.7 ms/frame, 1,000 frames
720 + 10 ms 726 + 11 ms 732 + 12 ms
Intensity 4-bit, overlap enabled,
170 μs/frame, 1,000 frames
218 + 260 ms 222 + 285 ms 227 + 335 ms
Intensity 1-bit, overlap enabled,
10.3 μs/frame, 10,000 frames
640 ms 945 ms 714 ms
Gated 8-bit, overlap enabled,
2.7 ms/frame, 10 frames, 50 gate steps/frame
1372 + 4 ms 1371 + 6 ms 1372 + 6 ms
Gated 7-bit, overlap enabled,
1.4 ms/frame, 10 frames, 50 gate steps/frame
767 + 7 ms 767 + 8 ms 767 + 9 ms
Gated 6-bit, overlap enabled,
0.7 ms/frame, 10 frames, 50 gate steps/frame
500 + 13 ms 503 + 20 ms 508 + 36 ms
Gated 8-bit, overlap enabled,
2.7 ms/frame, 1 frames, 500 gate steps/frame
1349 + 4 ms 1349 + 4 ms 1350 + 5 ms
Gated 7-bit, overlap enabled,
1.4 ms/frame, 1 frames, 500 gate steps/frame
701 + 11 ms 701 + 12 ms 701 + 17 ms
Gated 6-bit, overlap enabled,
0.7 ms/frame, 1 frames, 500 gate steps/frame
361 + 17 ms 363 + 24 ms 368 + 45 ms

FAQ

Answers to the most frequently asked questions.

Always use only a single power supply with our camera! You can use either of the two ports on the camera to plug in the power cable.
First thing to check is the SMA port to which the laser signal is connected. Only the first port on the left side of the camera as seen from the front can be used, so make sure that you are using the correct SMA. Second thing to check is the amplitude of the signal. For NIM users, we suggest using any of the two adapters listed in the hardware section. For all other users, check that the signal has an amplitude of at least 1.8 V. Ideally a LVTTL / TTL signal with 50% duty cycle should be used.
Usually this is caused by not calibrating the master and slave offset. Try to run the calibration of master/slave offset through the menu to correct for the timing difference between the two halves of the camera. If there is still a large timing difference (skew) between the two halves, one can try to enter the timing difference manually in the box that appears when using the shortcut CTRL + SHIFT + O.
At the moment, all bit-modes have a limit of 130,000 frames. This limit mainly applies for 1-bit imaging, for which it is not possible to do a continuous stream. Therefore, the maximum number of frames that can be stored on the camera limits the size of the burst-mode packages close to 130,000. We will be increasing the maximum number of frames in the other bit-modes that can be acquired in a single measurement to 10 million. We will also enable automatic burst-mode repetition for 1-bit depth for those who want to acquire multiple burst at once.
The minimum acquisition time depends on the bit-mode and the gate parameters. In intensity imaging and 1-bit depth, the minimum acquisition time is 20 nanoseconds. In the other bit depths, it will be a 2^bit-mode multiple of this. E.g. in 8-bit depth it is 256×20 ns = 5.1 us. In gated imaging, the shortest possible gate is 6 nanoseconds, in combination with the external gate trigger, one could get a single 6 ns integration time in an 8-bit image. However, this is not very useful, since this can only lead to a single count. Normally in gated imaging, one would calculate the effective exposure time: integration time×gate width/laser period.
You can use any frequency that is greater than 10 MHz and up to 80 MHz. At the moment there is no support for frequencies below 10 MHz. Also, heating can affect the systems performance at 80 MHz repetition rate.
At the moment there is no option to decrease the acquisition area.

Support

If this documentation doesn't answer your questions, feel free to send us an e-mail.


Changelog

Version history with most notable changes.

Version 1.47

  • Added Gated imaging save in single or multiple folders.
  • Improved 1-bit error detection.
  • Improved Arbitrary gated imaging (new limit 127 gate steps/frame).
  • Fixed Weird display behaviour with arbitrary gated imaging.
  • Fixed First intensity frame has lower counts.
  • Fixed Start-up bug (also when doing breakdown calibration).

Version 1.46

  • Improved Image metadata.
  • Removed Arbitrary 4x step size limitation.
  • Fixed Crash on gated imaging with arbitrary step sizes.
  • Fixed Save folder numbering.

Version 1.45

  • Fixed Sensor starting with black image introduced in 1.44.

Version 1.44

  • Improved Support for > 8-bit depths (correct display).
  • Improved Calculation of frame rate (especially for 4-bit imaging).
  • Added Option to apply the pile-up correction on the image data.
  • Added Option to change the alignment of images with the MSB.
  • Changed Default alignment of images with the LSB.

Version 1.43

  • Improved Support for > 8-bit depths.
  • Improved Saving of images during acquisition.
  • Improved Accuracy of saving/processing elapsed time.
  • Added Image updates during acquisition.
  • Added Image average gate sequence plot during acquisition.
  • Added Estimated frame rate display based on current settings.
  • Changed Saving of image sequences in separate folders.
  • Changed Button to copy the current live view exposure time to gated imaging as well with gate width ratio compensation.

Version 1.42

  • Fixed Data scrambling introduced in 1.41.

Version 1.41

  • Added Support for bit-depths > 8-bit (for testing purposes).
  • Fixed Noise suppression value calculation.
  • Fixed Potential critical start-up wait time.

Version 1.40

  • Added Support for humidity sensing (only new devices).
  • Added Dark theme (enable from the menu).
  • Added Live view histogramming.
  • Added Live view pixel saturation display.
  • Added Brightness slider to intensity / gated imaging (for displaying purposes only).
  • Added POW command to enable / disable VDD.
  • Added Basic gain calibration (use a uniform light source in combination with the optics to be used).
  • Added Option to disable all pixel corrections.
  • Added Timetags to image metadata.

Version 1.37

  • Added READY confirmation in frame triggering mode before starting the sequence.
  • Improved Accuracy of measurement elapsed time.
  • Fixed Frame triggering in intensity and gated imaging modes.
  • Fixed Exposure of the first frame in intensity and gated imaging modes.
  • Removed Requirement for sending additional frame trigger pulses.

Version 1.36

  • Fixed TCP/IP port selection.

Version 1.35

  • Changed 1-bit depth can now be activated from the options menu.

Version 1.34

  • Added Check if TCP/IP port is occupied and select next one in case.
  • Added Ability to start with custom TCP/IP port from the command line.
  • Added Ability to reset intensity shutdown through TCP/IP.
  • Added Ability to separate remote commands with line feed for improved reliability.
  • Improved Intensity shutdown information now also through TCP/IP.
  • Fixed Gating at low frequencies (below 18MHz).

Version 1.33

  • Improved Detection of master/slave FPGAs.
  • Improved USB speed-test accuracy.

Version 1.32

  • Added Remote command to manually set the master/slave offset.
  • Fixed Intensity linearity of images when the software is not in greyscale mode.

Version 1.31

  • Improved Master/slave offset calibration.
  • Improved Optimal gate settings finder.
  • Added Time-out for triggered acquisitions.
  • Added Ability to stop ongoing acquisitions by sending the remote command again.

Version 1.30

  • Added Breakdown calibration.
  • Added Frame-based read-out for gated imaging in firmware.
  • Added Ability to stop an ongoing gated acquisition.
  • Changed NDO command to CALIB and added breakdown calibration flag.

Version 1.22

  • Fixed Frame triggering in gated imaging.
  • Fixed Calibrate noise/dead not functioning.

Version 1.21

  • Added Ability to stop an ongoing intensity acquisition.
  • Fixed Handling of 1-bit data corruption.

Version 1.20

  • Added Headless mode for the GUI.
  • Added Command to get the latest live view image.
  • Added Command to get system information.
  • Added Frame triggering to gated imaging.
  • Fixed Noise / dead pixel removal.
  • Changed Dead pixel calibration to require darkness (like noise calibration).

Version 1.16

  • Contact us If you require 1-bit functionality.
  • Added Optimal gate settings finder to help set the initial gate parameters.
  • Added Remote command for gate settings finder.
  • Fixed Minimum gate width not working properly.
  • Fixed Systems not always starting.

Version 1.15

  • Removed 1-bit functionality -> please contact us if you need this.
  • Reduced Idle power consumption.
  • Please Don't use versions 1.11 / 1.12 / 1.13 / 1.14, they may break your system.

Version 1.14

  • Fixed Critical startup bug (this might potentially break the system).

Version 1.13

  • Improved Intensity shutdown.
  • Added Manual exposure time slider to the live view.
  • Added Command to change the auto exposure.
  • Added Button to copy the current live view exposure time to intensity imaging.

Version 1.12

  • Fixed LVDS read-out glitches.

Version 1.11

  • Fixed Minor bugfixes.

Version 1.10

  • Changed Several remote commands to add the bit-options for the images.
  • Added Intensity shutdown at excessive count rates.
  • Added Acceptance range of laser clock frequency from 10 to 80MHz.
  • Added Recalculation of gate time steps at each input frequency.
  • Added Disable of 1-bit imaging clock after time-out (re-enabled on the next 1-bit run).
  • Added 6 and 7-bit options to both intensity and gated imaging.
  • Improved Performance of intensity and gated imaging.
  • Improved Handling of 1-bit data and processing speed.
  • Removed Minimum integration time limit in overlapped exposure and read-out mode.
  • Fixed Handling of failed 1-bit acquisitions.
  • Fixed Crashes on infinite measurements when frames set to 0.
  • Fixed 10MHz gated acquisition mode no longer doubling gates.
  • Fixed Master/Slave offset calculation not properly aligning.

Version 1.04

  • Improved Performance of various acquisition modes.
  • Fixed Handling of failed 1-bit acquisitions.

Version 1.03

  • Improved Gated imaging performance.
  • Improved Accuracy of measured acquisition time.

Version 1.02

  • Changed Online documentation platform.
  • Fixed Set save path crashes.

Version 1.01

  • Improved Automatic download of the calibration files from the remote server.
  • Added Commands to calibrate the noise, dead pixels and master/slave offset through TCP/IP.

Version 1.0

  • Improved Updated the core system for better support on modern systems and high-DPI displays.
  • Added Support for higher laser frequencies (experimental, not supported on all systems).
  • Added First FLIM analysis functions with multi-ROI support.
  • Added Dialog on first startup to select firmware flavour.
  • Fixed Https issues for new version checks.

Version 0.91

  • Improved Noise correction algorithm.
  • Improved Dead pixel correction algorithm.
  • Improved LVDS/SE device handling.
  • Fixed Minor bugfixes.
  • Removed Gated offset in external trigger mode.

Version 0.9

  • Added Streaming mode for gated imaging.
  • Added Arbitrary step sizes for gated imaging.
  • Added Saving of the fan state.
  • Added Support for LVDS version devices.
  • Improved Merging 10/20MHz in same firmware with internal switch.
  • Changed Streaming for all image modes to binary data.
  • Changed Intensity and gated measurement commands to add frame trigger and overlapping.
  • Fixed 1-bit sensor read-out.
  • Fixed Half-sensor data processing.
  • Fixed FLIM image processing.

Version 0.81

  • Added A dummy pixel 512×512 to sparse image saving/streaming in 1-bit depth.
  • Changed Set minimum number of frames in gated mode with external trigger to 2.

Version 0.8

  • Added Sparse image saving/streaming for 1-bit images.
  • Added Option to set the fan speed remotely.
  • Improved 1-bit depth processing speed.
  • Changed Saving/streaming of 1-bit images into binary format.
  • Changed Intensity and gated measurement commands to add frame trigger and overlapping.
  • Fixed Crashes in 1-bit depth.
  • Fixed External triggering in gated mode.

Version 0.79

  • Added Option to stream the raw FLIM data through TCP/IP.
  • Fixed FLIM calibration and edge detection.
  • Fixed Limits for maximum integration times.
  • Fixed Limits for maximum expected lifetime.

Version 0.78

  • Added Metadata into the images.
  • Fixed Greyscale saving.

Version 0.77

  • Added Option to externally trigger gates in gated image acquisitions.
  • Added Option to synchronize the laser clock between master/slave.
  • Fixed Pixel mappings.
  • Fixed FLIM calculations.
  • Fixed Minor bugfixes.

Version 0.76

  • Improved Increased the acceptable laser frequency range.

Version 0.75

  • Added Option to externally trigger gates in gated image acquisitions.
  • Added Option to synchronize the laser clock between master/slave.
  • Fixed Pixel mappings.
  • Fixed FLIM calculations.
  • Fixed Minor bugfixes.

Version 0.74

  • Added Multithreading to some heavier calculations and image saving.
  • Improved Reliability.
  • Fixed Pixel mappings (partially solved).
  • Fixed Minor bugfixes.

Version 0.73

  • Added Option to externally trigger frames in intensity image acquisitions.

Version 0.72

  • Added Option for infinite 4 and 8-bit intensity image acquisitions..
  • Fixed Minor bugfixes.

Version 0.71

  • Added Option to overlap read-out and exposure.
  • Added Option to stream intensity images through TCP/IP.
  • Fixed Array column ordering.

Version 0.7

Initial release with the following functionalities:

  • Live view from the SPAD sensor (intensity + FLIM mode).
  • Intensity imaging (1, 4 and 8-bit depths).
  • Gated imaging.
  • FLIM imaging.
  • Voltage control.
  • Temperature reading.
  • TCP/IP remote command interface.

Windows 64-bit + Linux 64-bit.