Balluff - BVS CA-MLC / BVS CA-IGC Technical Documentation
Relationship between driver, firmware and FPGA file

To operate the camera apart from the physical hardware itself 3 pieces of software are needed:

  • a firmware running on the device (provides low-level functionality like allowing the device to act as a USB device, support for multiple power states etc.)
  • an FPGA file loaded into the FPGA inside the device (provides access features to control the behaviour of the image sensor, the digital I/Os etc.)
  • a device driver (this is the mvBlueFOX.dll on Windows® and the libmvBlueFOX.so on Linux) running on the host system (provides control over the device from an application running on the host system)

The physical camera has a firmware programmed into the device's non-volatile memory, thus allowing the device to act as a USB device by just connecting the device to a free USB port. So the firmware version that will be used when operating the device does NOT depend on the driver version that is used to communicate with the device.

On the contrary the FPGA file version that will be used will be downloaded in volatile memory (RAM) when accessing the device through the device driver thus the API. One or more FPGA files are a binary part of the device driver. This shall be illustrated by the following figure:

The firmware file is a binary part of the device driver
Note
As it can be seen in the image one or multiple firmware files are also a binary part of the device driver. However it is important to notice that this firmware file will NOT be used automatically but only when the user or an application explicitly updates the firmware on the device and will only become active after power-cycling the device. In Impact Acquire, every firmware starting from version 49 is available within a single driver library and can be selected for updating! DeviceConfigure however will always update the device firmware to the latest version. If you need to downgrade the firmware for any reason please get into contact with the Balluff support to get detailed instructions on how to do that.

FPGA

Until the device gets initialized using the API no FPGA file is loaded in the FPGA on the device. Only by opening the device through the API the FPGA file gets downloaded and only then the device will be fully operational:

The FPGA file gets downloaded when the device will be opened through the API

As the FPGA file will be stored in RAM, disconnecting or closing the device will cause the FPGA file to be lost. The firmware however will remain:

The FPGA file will be lost if the device is disconnected or closed

In case multiple FPGA files are available for a certain device the FPGA file that shall be downloaded can be selected by an application by changing the value of the property Device/CustomFPGAFileSelector. However the value of this property is only evaluated when the device is either initialized using the corresponding API function OR if a device has been unplugged or power-cycled while the driver connection remains open and the device is then plugged back in.

Note
There is just a limited set of devices that offer more than one FPGA file and these additional FPGA files serve very special purposes so in almost every situation the default FPGA file will be the one used by an application. Before using custom FPGA files, please check with Balluff about why and if this makes sense for your application.

So assuming the value of the property Device/CustomFPGAFileSelector has been modified while the device has been unplugged, a different FPGA file will be downloaded once the device is plugged back into the host system:

A different FPGA file can be downloaded

Firmware

Only during a firmware update the firmware file that is a binary part of the device driver will be downloaded permanently into the device's non-volatile memory.

Attention
Wrong firmware

Until version 2.27.0 of the driver package for this device family, each device driver just contained one specific firmware version thus once a device's firmware has been updated using a specific device driver the only way to change the firmware version will be using another device driver version for upgrading/downgrading the firmware again. In Impact Acquire, every firmware starting from version 49 is available within a single driver library and can be selected for updating! DeviceConfigure however will always update the device firmware to the latest version. If you need to downgrade the firmware for any reason please get into contact with the Balluff support to get detailed instructions on how to do that.

→ In order to select the appropriate firmware version for the device appropriate tools such as DeviceConfigure should be used.

So assume a device with a certain firmware version is connected to a host system:

A certain firmware version is connected to a host system

During an explicit firmware update, the firmware file from inside the driver will be downloaded onto the device. In order to become active the device must be power-cycled:

Firmware file will be downloaded during an firmware update...

When then re-attaching the device to the host system, the new firmware version will become active:

... after power-cycling the device it will be active
  • The current firmware version of the device can be obtained either by using one of the applications which are part of the SDK such as DeviceConfigure or by reading the value of the property Device/FirmwareVersion or Info/FirmwareVersion using the API
  • The current FPGA file version used by the device can be obtained by reading the value of the property Info/Camera/SensorFPGAVersion

Using ImpactControlCenter the same information is available as indicated by the following figure:

ImpactControlCenter - FPGA and Firmware version numbers