This is an areaDetector driver for SIS8300 family of digitizers from Struck Innovative Systeme. It has been tested on the SIS8300-L(2) and SIS8300-KU AMCs. ADSIS8300 driver inherits from asynNDArrayDriver. The driver exposes digitizers controling and monitoring features as a collection of EPICS records. Its primary use is with the generic firmware image from the vendor. The driver can also be inherited by the higher level areaDetector drivers that might work on specific firmware images such as for BPM or BCM systems.


Linux kernel driver sis8300drv.


The ADSIS8300 driver controls digitizer features such as clock source and frequency, trigger source, data acquisition, data transfer, and many more.

EPICS records

Apart from the the EPICS records inherited from the NDArrayBase.template file, the ADSIS8300 driver defines additional EPICS records, specific to the SIS8300 board and its data channels.

Board wide EPICS records

These records are defined in the sis8300.template file. They contain board specific records.

SIS8300 record list
Record name Description Record type Access Asyn driver info
$(P)$(R)DevicePathR Linux device path (/dev/sis8300-X). waveform XXX use stringin? read SIS8300.DEVICE_PATH
$(P)$(R)MemorySizeR AMC memory size in MB. longin read SIS8300.MEMORY_SIZE
$(P)$(R)MessageR Driver status/error message. waveform read SIS8300.DRIVER_MESSAGE
$(P)$(R)NumSamples, $(P)$(R)NumSamplesR Number of samples to acquire. Limits AAA .. BBB. longout, longin write, read SIS8300.NUM_SAMPLES
$(P)$(R)ClockSource, $(P)$(R)ClockSourceR

Clock source selection:

  • Internal
  • RTM2
  • SMA
  • Harlink
  • BackplaneA
  • BackplaneB
  • RTM01
mbbo, mbbi write, read SIS8300.CLOCK_SOURCE
$(P)$(R)ClockDivider, $(P)$(R)ClockDividerR Clock divider value. Limits 1 .. 32. longout, longin write, read SIS8300.CLOCK_DIVIDER
$(P)$(R)TriggerSource, $(P)$(R)TriggerSourceR

Trigger source selection:

  • Software
  • External
  • Internal
mbbo, mbbi write, read SIS8300.TRIGGER_SOURCE
$(P)$(R)TriggerExternalLine, $(P)$(R)TriggerExternalLineR

Physical trigger line selection, only applies when using external trigger source with $(P)$(R)TriggerSource:

  • FrontPanel0
  • FrontPanel1
  • FrontPanel2
  • FrontPanel3
  • BackPlane0
  • BackPlane1
  • BackPlane2
  • BackPlane3
  • BackPlane4
  • BackPlane5
  • BackPlane6
  • BackPlane7
mbbo, mbbi write, read SIS8300.TRIGGER_EXTERNAL_LINE
$(P)$(R)TriggerDelay, $(P)$(R)TriggerDelayR Number of pre-trigger samples. Limits 0 .. -2046. XXX remove? longout, longin write, read SIS8300.TRIGGER_DELAY
$(P)$(R)TriggerRepeat, $(P)$(R)TriggerRepeatR

Number of trigger repetitions:

  • 0 or 1 : single
  • < 1000000 : multiple
  • -1 : continuous
longout, longin write, read SIS8300.TRIGGER_REPEAT
$(P)$(R)IrqPoll, $(P)$(R)IrqPollR

Acquisition done status determined by polling firmware register:

  • No
  • Yes

It is preferred to set $(P)$(R)IrqPoll to No for custom firmware builds, as this improves CPU performance. By not using the register polling software relies on firmware to report acquisition done status using the DAQ interrupt. Note that for the stock Struck firmware $(P)$(R)IrqPoll has to be set to Yes.

bo, bi write, read SIS8300.IRQ_POLL
$(P)$(R)Reset XXX remove? what does this reset? bo write SIS8300.RESET
$(P)$(R)RtmType, $(P)$(R)RtmTypeR

RTM type selection:

  • None
  • SIS8900
  • DWC8VM1
  • DS8VM1
  • DWC8300-LF

Used only as an indicator for setting up attenuators if found on the RTM. XXX this seems to be possible only for DWC8300-LF with BPM application?! And there the attenuators are controlled by a different set of registers/PVs… consider removing this PV!

mbbo, mbbi write, read SIS8300.RTM_TYPE
$(P)$(R)SamplingFrequency, $(P)$(R)SamplingFrequencyR ADC sampling frequency. If $(P)$(R)ClockSource is set to Internal then sampling frequency is derived from on-board oscillator value (250 MHz) divided by the $(P)$(R)ClockDivider value. The value is seen in the $(P)$(R)SamplingFrequencyR. For any other $(P)$(R)ClockSource selection user is required to enter the applied sampling frequency into $(P)$(R)SamplingFrequency and will also be seen in the $(P)$(R)SamplingFrequencyR. Limits AAA .. 125 MHz. ao, ai write, read SIS8300.SAMPLING_FREQUENCY
$(P)$(R)TickValueR Time between two ADC samples. Derived from ADC sampling frequncy $(P)$(R)SamplingFrequencyR. ai read SIS8300.TICK_VALUE
$(P)$(R)AsynIO See Asyn module asyn    

Data channel EPICS records

These records are defined in the sis8300-channel.template file. They contain per channel specific records.

SIS8300 channel record list
Record name Description Record type Access Asyn driver info
$(P)$(R)Name Channel name. stringout    
$(P)$(R)Control, $(P)$(R)ControlR Channel enable / disable control. If channel is not enabled sample data will not be transferred from AMC memory to PV buffer. bo, bi write, read SIS8300.CH.CONTROL
$(P)$(R)Attenuation, $(P)$(R)AttenuationR Attenuator value for I2C chip found on DWC8300-LF RTM. ao, ai write, read SIS8300.CH.ATTENUATION
$(P)$(R)InternalTriggerLength, $(P)$(R)InternalTriggerLengthR   longout, longin write, read SIS8300.CH.INTERNAL_TRIGGER_LENGTH
$(P)$(R)InternalTriggerCondition, $(P)$(R)InternalTriggerConditionR   bo, bi write, read SIS8300.CH.INTERNAL_TRIGGER_CONDITION
$(P)$(R)InternalTriggerOff, $(P)$(R)InternalTriggerOffR   longout, longin write, read SIS8300.CH.INTERNAL_TRIGGER_OFF
$(P)$(R)InternalTriggerOn, $(P)$(R)InternalTriggerOnR   longout, longin write, read SIS8300.CH.INTERNAL_TRIGGER_ON