Click or drag to resize

FX3Connection Class

This is the primary class for interfacing with the FX3 based eval platform. Implements IRegInterface, ISpi32Interface, and IPinFcns, in addition to a superset of extra interfacing functions specific to the FX3 platform.
Inheritance Hierarchy
SystemObject
  FX3ApiFX3Connection

Namespace:  FX3Api
Assembly:  FX3Api (in FX3Api.dll) Version: 2.9.4.0 (2.9.4)
Syntax
public class FX3Connection : IRegInterface, 
	IPinFcns, ISpi32Interface, IStreamEventProducer

The FX3Connection type exposes the following members.

Constructors
  NameDescription
Public methodFX3Connection
Class Constructor. Loads SPI settings and default values for the interface, and starts a background thread to manage programming newly connected boards with the ADI bootloader.
Top
Properties
  NameDescription
Public propertyActiveFX3
Property which returns the active FX3 board. Returns nothing if there is not a board connected.
Public propertyActiveFX3SerialNumber
Property which returns the serial number of the active FX3 board.
Public propertyAvailableFX3s
Property which returns a list of the serial numbers of all FX3 boards running the ADI bootloader
Public propertyBitBangSpiConfig
Property to get or set the bit bang SPI configuration. Can select pins, timings, etc
Public propertyBootloaderPath
Set/get the blink USB bootloader firmware .img file used for multi-board identification
Public propertyBufferAvailable
Checks if a streaming frame is available, or will be available soon in thread safe queue. If there is no data in the queue and the streaming thread is not currently running, it will return false.
Public propertyBurstByteCount
Get or set the burst word length, in bytes. Is the total count of bytes transfered, including trigger
Public propertyBurstMode
Switches burstMode on and off. Set burstMode to the number of burst read registers.
Public propertyBurstMOSIData
Data to transmit on the MOSI line during a burst read operation. This value is over written if you set the trigger reg, since trigger reg is given priority.
Public propertyBusyFX3s
Property which returns a list of the serial numbers of all FX3 boards currently in use, running the application firmware.
Public propertyChipSelectControl
Property to get or set the FX3 SPI controller chip select setting. Should be left on hardware control, changing modes will likely cause unexpected behavior. Reqcode: B2 Value: Desired setting (as SpiChipselectControl ) Index: 4 Length: 4 Data: None
Public propertyChipSelectLagTime
The number of SPI clock cycles after the transaction ends that chip select is toggled to idle. Reqcode: B2 Value: Desired Setting (as SpiLagLeadTime ) Index: 6 Length: 4 Data: None
Public propertyChipSelectLeadTime
The number of SPI clock cycles before the SPI transaction that chip select is toggled to active. Reqcode: B2 Value: Desired Setting (as SpiLagLeadTime ) Index: 5 Length: 4 Data: None
Public propertyChipSelectPolarity
Property to get or set the FX3 SPI chip select polarity (True - Active High, False - Active Low) Reqcode: B2 Value: Polarity (0 active low, 1 active high) Index: 3 Length: 4 Data: None
Public propertyCpha
Property to get or set the FX3 SPI controller chip select phase Reqcode: B2 Value: Polarity (0 active low, 1 active high) Index: 2 Length: 4 Data: None
Public propertyCpol
Property to get or set the FX3 SPI controller clock polarity setting (True - Idles High, False - Idles Low) Reqcode: B2 Value: Polarity (0 active low, 1 active high) 'Index: 1 Length: 4 Data: None
Public propertyCrcFirstIndex
Gets or sets the index of the first burst data word used in CRC calculations.
Public propertyCrcLastIndex
Gets or sets the index of the last burst data word used in CRC calculations.
Public propertyCrcResultIndex
Gets or sets the index of the word that contains the CRC result.
Public propertyDIO1
Read-only property to get the DIO1 pin
Public propertyDIO2
Read-only property to get the DIO2 pin
Public propertyDIO3
Read-only property to get the DIO3 pin
Public propertyDIO4
Read-only property to get the DIO4 pin
Public propertyDrActive
If the data ready is used for register reads
Public propertyDrPin
This property is used to get or set the data ready pin. Is tied to the ReadyPin property
Public propertyDrPolarity
The Data Ready polarity for streaming mode (index 11)
Public propertyDutSupplyMode
Get or set the DUT supply mode on the FX3. Available options are regulated 3.3V, USB 5V, and off. This feature is only available on the ADI in-house iSensor FX3 eval platform, not the platform based on the Cypress Explorer kit. If a Cypress Explorer kit is connected, the setter for this property will be disabled.
Public propertyFirmwarePath
The path to the firmware .img file. Needs to be set before the FX3 can be programmed
Public propertyFlashProgrammerPath
Path to the programmer firmware which is loaded in RAM to allow flashing the EEPROM with the bootloader.
Public propertyFX3_GPIO1
Read-only property to get the FX3_GPIO1 pin. This pin does not map to the standard iSensor breakout, and should be used for other general purpose interfacing.
Public propertyFX3_GPIO2
Read-only property to get the FX3_GPIO2 pin. This pin does not map to the standard iSensor breakout, and should be used for other general purpose interfacing.
Public propertyFX3_GPIO3
Read-only property to get the FX3_GPIO3 pin. This pin does not map to the standard iSensor breakout, and should be used for other general purpose interfacing.
Public propertyFX3_GPIO4
Read-only property to get the FX3_GPIO4 pin. This pin does not map to the standard iSensor breakout, and should be used for other general purpose interfacing. This pin shares a complex GPIO block with DIO1. If DIO1 is being used as a clock source, via the StartPWM function, then this pin cannot be used as a clock source.
Public propertyFX3_LOOPBACK1
Read-only property to get loop back pin 1. This pin (CTL8) is wired directly to loop back pin 2 (CTL9) on the iSensor FX3 Board, Revision C or newer. These loop back pins allow for fixed transaction timing on "asynchronous" SPI/I2C reads. One of the loop back pins can be configured as a PWM output using the "StartPWM" API, and the other loop back pin can be set as the DrPin, allowing the FX3 to trigger itself at a known rate.
Public propertyFX3_LOOPBACK2
Read-only property to get loop back pin 2. This pin (CTL9) is wired directly to loop back pin 1 (CTL8) on the iSensor FX3 Board, Revision C or newer. These loop back pins allow for fixed transaction timing on "asynchronous" SPI/I2C reads. One of the loop back pins can be configured as a PWM output using the "StartPWM" API, and the other loop back pin can be set as the DrPin, allowing the FX3 to trigger itself at a known rate.
Public propertyFX3BoardAttached
Checks if there is a Cypress FX3 USB device connected to the system
Public propertyGetBootStatus
Checks the boot status of the FX3 board by sending a vendor request
Public propertyGetFirmwareVersion
Property which reads the firmware version from the FX3
Public propertyGetFX3ApiInfo
This property returns a class containing some useful information about the current FX3 Dll. Some of the information is available as a attribute of the DLL, while others (build date/time and git revision) are generated at compile time using a pre-build batch file script.
Public propertyGetNumBuffersRead
Read-only property to get the number of buffers read in from the DUT in buffered streaming mode
Public propertyGetTargetSerialNumber
Read-only property to get the serial number of the active FX3 board
Public propertyI2CBitRate
Get/Set the FX3 I2C bit rate. Valid range 100KHz - 1MHz. Defaults to 100KHz
Public propertyI2CRetryCount
Get/Set the FX3 I2C retry count. This is the number of times the FX3 will retry a read/write when a NAK is received from the slave device being addressed.
Public propertyIsLSBFirst
The FX3 SPI Controller LSB setting. The controller flips the bits depending on this setting. Reqcode: B2 Value: Polarity (0 MSB first, 1 LSB first) Index: 7 Length: 4 Data: None
Public propertyNumFramesPurged
Read-only property to get the number of bad frames purged with a call to PurgeBadFrameData. Frames are purged when the CRC appended to the end of the frame does not match the expected CRC.
Public propertyNumFramesSkipped
Property to get the number of frame skips in an ADcmXL real time stream
Public propertyPartType
The DUT type connected to the board. Reqcode: B2 Value: Part type to set Index: 10 Length: 4 Data: None
Public propertyPinExit
Gets and sets the sync pin exit configuration for exiting real-time stream mode on ADcmXL DUT's.
Public propertyPinStart
Gets and sets the sync pin start configuration for starting real-time stream mode on ADcmXL DUT's.
Public propertyReadyPin
Property to get or set the DUT data ready pin.
Public propertyResetPin
Read-only property to get the reset pin
Public propertySclkFrequency
Property to get or set the FX3 SPI clock frequency setting. Reqcode: B2 Value: Don't Care Index: 0 Length: 4 Data: Clock Frequency to be set
Public propertySensorType
Property to get the device family type the FX3 was initialized for. Setting this property restores all SPI settings to the default for the selected device family.
Public propertyStallTime
Property to get/set the number of microseconds between words Reqcode: B2 Value: Stall time in microseconds (as int16) Index: 9 Length: 4 Data: None
Public propertyStreamTimeoutSeconds
Sets the timeout for the Bulk Endpoint used in real time streaming modes.
Public propertyStripBurstTriggerWord
Property to choose if the readback from the 16 bit trigger word at the start of each burst is discarded or not
Public propertyTimerTickScaleFactor
Read only property to get the timer tick scale factor used for converting ticks to ms.
Public propertyTriggerReg
Gets or sets register that is used to trigger burst operation.
Public propertyWatchdogEnable
Enable or disable the FX3 firmware watchdog.
Public propertyWatchdogTimeoutSeconds
Set the FX3 firmware watchdog timeout period (in seconds). If the watchdog is triggered the FX3 will reset.
Public propertyWordCount
Gets or sets the number of 16 bit words that are read during the burst. Does not include trigger, real transfer will be 2 bytes larger.
Public propertyWordLength
The FX3 SPI controller word length. Default is 8 (1 byte per word) Reqcode: B2 Value: Word length (as int8) Index: 8 Length: 4 Data: None
Top
Methods
  NameDescription
Public methodBitBangReadReg16
Read a standard iSensors 16-bit register using a bitbang SPI connection
Public methodBitBangSpi
Perform a bit banged SPI transfer, using the config set in BitBangSpiConfig.
Public methodBitBangWriteRegByte
Write a byte to an iSensor register using a bitbang SPI connection
Public methodBootloaderBlinkLED
BOOTLOADER FW: Blink the on-board LED
Public methodBootloaderTurnOffLED
BOOTLOADER FW: Turn off the LED
Public methodBootloaderTurnOnLED
BOOTLOADER FW: Turn on the LED
Public methodCancelStreamAsync
Cancel a any running stream
Public methodClearBurstMode
Takes interface out of burst mode by setting BurstMode to zero.
Public methodClearErrorLog
Clear the error log stored in flash
Public methodConnect
Attempts to program the selected FX3 board with the application firmware. The FX3 board should be programmed with the ADI bootloader.
Public methodDisconnect
This function sends a reset command to the specified FX3 board, or does nothing if no board is connected
Public methodDisconnect(String)
Overload of Disconnect which lets you specify the FX3 serial number to disconnect. Returns a boolean indicating if the board was disconnected.
Public methodEquals
Determines whether the specified object is equal to the current object.
(Inherited from Object.)
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodFX3CodeRunningOnTarget
Function which checks if the FX3 is connected and programmed
Public methodGetBuffer
Gets one frame from the thread safe queue. Waits to return until a frame is available if there is a stream running. If there is not a stream running, and there is no data in the queue this call returns "Nothing".
Public methodGetBufferedStreamDataPacket
This function returns a single buffered stream packet. Needed for IBufferedStreamProducer
Public methodGetErrorLog
Gets the current error log from FX3 flash memory
Public methodGetErrorLogCount
Get the number of errors logged to the FX3 flash memory
Public methodGetHashCode
Serves as the default hash function.
(Inherited from Object.)
Public methodGetI2CBuffer
Get I2C buffer from I2C read stream
Public methodGetPinPWMInfo
Allows the user to retrieve a set of information about the current pin PWM configuration.
Public methodGetStreamDataPacketU16
This function does the same thing as GetBufferedStreamDataPacket()
Public methodGetTimerValue
This function reads the current value from the 10MHz timer running on the FX3
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodI2CReadBytes
Read bytes from an I2C slave device attached to the FX3.
Public methodI2CWriteBytes
Write bytes to an I2C slave device attached to the FX3
Public methodISpi32StopStream
ISpi32 StopStream implementation. Calls generic version.
Public methodisPWMPin
This function checks to see if the selected pin has already been configured to act as a PWM output pin.
Public methodMeasureBusyPulse(Byte, IPinObject, UInt32, UInt32)
Overload of measure busy pulse which triggers the DUT event using a SPI write instead of a pin drive.
Public methodMeasureBusyPulse(IPinObject, UInt32, UInt32, IPinObject, UInt32, UInt32)
This function triggers a DUT action using a pulse drive, and then measures the following pulse width on a separate busy line. The pulse time on the busy pin is measured using a 10MHz timer with approx. 0.1us accuracy.
Public methodMeasurePinDelay
This function measures the time delay between toggling a trigger pin, and a state change on the busy pin. This can be used to measure the propagation delay between a sync edge and data ready being de-asserted.
Public methodMeasurePinFreq
Measures the frequency of an input signal to the selected pin.
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Public methodPulseDrive
This function drives a pin to the specified level for a given time interval in ms
Public methodPulseWait
This function waits for a pin to reach a specified level
Public methodPurgeBadFrameData
This function checks the CRC of each real time streaming frame stored in the Stream Data Queue, and purges the bad ones. This operation is only valid for an ADcmXL series DUT.
Public methodReadDRFreq
Reads the measured DR value
Public methodReadFlash
Read data from the FX3 non-volatile memory
Public methodReadPin
Reads the value of a GPIO pin on the FX3
Public methodReadPins(IPinObject)
Reads a list of FX3 GPIO pins. This function calls the overload which takes an IEnumerable
Public methodReadPins(IEnumerableIPinObject)
Reads a list of FX3 GPIO pins
Public methodReadRegArray(IEnumerableUInt32)
Reads an array of 16 bit register values.
Public methodReadRegArray(IEnumerableAddrDataPair, UInt32)
ReadRegArray overload which includes register writes. Breaks the call into multiple calls of readRegByte and writeRegByte
Public methodReadRegArray(IEnumerableUInt32, UInt32)
Overload of ReadRegArray which builds a new IEnumerable of addr and call the overload which takes an enumerable of addr
Public methodReadRegArrayStream(IEnumerableAddrDataPair, UInt32, UInt32)
This is the most generic array register function. All other array read/write functions call down to this one.
Public methodReadRegArrayStream(IEnumerableUInt32, UInt32, UInt32)
Public methodReadRegByte
This is the most general ReadRegByte. Other implementations are based on this.
Public methodReadRegWord
Reads a single 16 bit register on the DUT
Public methodReadTime
Not implemented
Public methodReset
Drives the Reset pin low for 10ms, sleeps for 100ms, and then blocks until the ReadyPin is high (500ms timeout)
Public methodResetAllFX3s
Looks for and resets boards in application mode. Should only be called at program start, after InitBoardList() Note: Should not be used if running multiple instances of the GUI.
Public methodRestoreHardwareSpi
Resets the hardware SPI pins to their default operating mode. Can be used to recover the SPI functionality after a bit-bang SPI transaction over the hardware SPI pins without having to reboot the FX3.
Public methodSetBitBangSpiFreq(Double)
Sets the SCLK frequency for a bit bang SPI connection.
Public methodSetBitBangSpiFreq(UInt32)
Set the SCLK frequency for a bit banged SPI connection. Overloaded to allow for a UInt
Public methodSetBitBangStallTime
Set the bit bang SPI stall time. Driven by a clock with resolution of 49.3ns
Public methodSetPin
Sets the value of a FX3 GPIO pin. This value will persist until the pin is set to a different value, or read from
Public methodSetPinResistorSetting
Set the FX3 GPIO input stage pull up or pull down resistor setting. All FX3 GPIOs have a software configurable pull up / pull down resistor (10KOhm).
Public methodSetupBurstMode
Puts interface into burst mode by setting burstMode to match word count.
Public methodStart
This function is not currently implemented. Calling it will throw a NotImplementedException.
Public methodStartBufferedStream(IEnumerableAddrDataPair, UInt32, UInt32, Int32, BackgroundWorker)
Starts a buffered stream operation. This is usually called from the TextFileStreamManager. DUTType must be set before executing.
Public methodStartBufferedStream(IEnumerableUInt32, UInt32, UInt32, Int32, BackgroundWorker)
Starts a buffered stream operation. The registers listed in addr are read numCaptures times per register buffer. This process is repeated numBuffers times.
Public methodStartBurstStream
Function to start a burst read using the BurstStreamManager
Public methodStartGenericStream
Starts a generic data stream. This allows you to read/write a set of registers on the DUT, triggering off the data ready if needed. The data read is placed in the thread-safe queue and can be retrieved with a call to GetBuffer. Each "buffer" is the result of reading the addr list of registers numCaptures times. For example, if addr is set to [0, 2, 4] and numCaptures is set to 10, each buffer will contain the 30 register values. The total number of register reads performed is numCaptures * numBuffers
Public methodStartI2CStream
Start an asynchronous I2C read stream. This stream runs on the stream thread and places all data in a thread safe queue. The data can be retrieved using GetI2CBuffer()
Public methodStartPWM
This function configures the selected pin to drive a pulse width modulated output.
Public methodStartRealTimeStreaming
This function starts real time streaming on the ADcmXLx021 (interface and FX3). Specifying pin exit is optional and must be 0 (disabled) or 1 (enabled)
Public methodStartStream
Starts a buffered stream for only a single buffer. This is equivalent to StartBufferedStream(addr, numCaptures, 1, CurrentTimeout, Nothing)
Public methodStopPWM
This function call disables the PWM output from the FX3 and returns the pin to a tri-stated mode.
Public methodStopRealTimeStreaming
This function stops real time streaming on the ADcmXLx021 (stream thread in FX3 API and FX3 firmware)
Public methodStopStream
Stops the currently running data stream, if any.
Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Public methodTransfer
This function performs a single bi-directional 32 bit SPI transaction. If DrActive is set to false the transfer is performed asynchronously. If DrActive is set to true, the transfer should wait until a data ready condition (determined by DrPin and DrPolarity) is true.
Public methodTransferArray(IEnumerableUInt32)
This function performs an array bi-directional SPI transfer. WriteData.Count() total SPI transfers are performed. If DrActive is set to true, the transfer should wait until a data ready condition (determined by DrPin and DrPolarity) is true, and then perform all SPI transfers. If DrActive is false it is performed asynchronously.
Public methodTransferArray(IEnumerableUInt32, UInt32)
This function performs an array bi-directional SPI transfer. This overload transfers all the data in WriteData numCaptures times. The total number of SPI words transfered is WriteData.Count() * numCaptures. If DrActive is set to true, the transfer should wait until a data ready condition (determined by DrPin and DrPolarity) is true, and then perform all SPI transfers. If DrActive is false it is performed asynchronously.
Public methodTransferArray(IEnumerableUInt32, UInt32, UInt32)
This function performs an array bi-directional SPI transfer. If DrActive is set to true, this overload transfers all the data in WriteData numCaptures times per data ready condition being met. It captures data from numBuffers data ready signals. If DrActive is set to false, all the transfers are performed asynchronously. The total number of SPI transfers is WriteData.Count()*numCaptures*numBuffers. The following pseduo-code snippet would perform 400 total SPI transfers, across 100 data ready conditions. MOSI = {0x1234, 0x5678} myISpi32.DrActive = True MISO = myISpi32.TransferArray(MOSI, 2, 100) During the transfers, the SPI bus would look like the following: MOSI: ---(0x1234)---(0x5678)---(0x1234)---(0x5678)-----------------(0x1234)---(0x5678)---(0x1234)---(0x5678)--...-----(0x1234)-----(0x5678)-----(0x1234)-----(0x5678)-- MISO:----MISO(0)----MISO(1)----MISO(2)----MISO(3)------------------MISO(4)----MISO(5)----MISO(6)----MISO(7)---...-----MISO(196)----MISO(197)----MISO(198)----MISO(199)- DR: ___|¯¯¯|_____________________________________________________|¯¯¯|______________________________________..._____|¯¯¯|____________________________________________
Public methodUserLEDBlink
Blink user LED using timer hardware (not available on Cypress Explorer FX3 board)
Public methodUserLEDOff
Turn off user LED (not available on Cypress Explorer FX3 board)
Public methodUserLEDOn
Turn on user LED (not available on Cypress Explorer FX3 board)
Public methodWaitForBoard
This function is used to wait for an FX3 to be programmed with the ADI bootloader. In general, the programming model would go as follows, to connect and program the first board attached: Dim myFX3 as FX3Connection = New FX3Connection(firmwarepath, bootloaderpath, devicetype) If Not myFX3.WaitForBoard(10) Then Msgbox("No boards found") Exit Sub End If myFX3.Connect(myFX3.AvailableFX3s(0))
Public methodWaitForStreamCompletion
Overload of WaitForStreamCompletion which blocks indefinitely until a stream completion event is seen.
Public methodWaitForStreamCompletion(Int32)
Blocks until the streaming endpoint mutex can be acquired. Allows a user to synchronize external application the completion of a stream. Returns false if there is not a stream running, or if the timeout is reached without the stream mutex being acquired.
Public methodWriteReadTransferArray
Array transfer which performs an initial SPI transmit (MOSI only, no read back) then starts a read stream. This is useful if you need to issue a write to the DUT, then immediately start reading back data, without the USB transfer overhead of approx 150us
Public methodWriteRegByte(AddrDataPair)
This function writes a single register byte, given as an Address / Data pair
Public methodWriteRegByte(IEnumerableAddrDataPair)
This function writes an enumerable list of data to the DUT as AddrDataPairs
Public methodWriteRegByte(IEnumerableUInt32, IEnumerableUInt32)
Overload of WriteRegByte which allows for multiple registers to be specified to write to, as an IEnumerable list of register addresses.
Public methodWriteRegByte(UInt32, UInt32)
This is the most general WriteRegByte, which the others are based on
Public methodWriteRegWord
This function is not currently implemented. Calling it will throw a NotImplementedException.
Top
Events
  NameDescription
Public eventDisconnectFinished
This event is raised when the disconnect event for a board has finished, and it is reprogrammed with the ADI bootloader. This event only is triggered for boards which were explicitly disconnected (boards which were physically reset will not trigger this event).
Public eventNewBufferAvailable
This event is raised when there is a new buffer available from a buffered stream
Public eventStreamFinished
This event is raised when a stream is finished
Public eventUnexpectedDisconnect
This event is raised when the active board is disconnected unexpectedly (IE unplugged)
Top
Explicit Interface Implementations
See Also