AN 050: Managing Windows Drivers

Introduction

Efinix® development boards have a USB connector that lets the Efinity® software on your computer communicate with the board. For nearly all boards (the exception is the T8 BGA81 development board), an FTDI chip handles the communication between the USB port and the FPGA. This FTDI chip needs a driver.

Installing, uninstalling, and generally managing these drivers can become a roadblock to using your development kit(s). If you are reading this document, chances are you have tried to install a driver and are having problems (sorry about that). In that case, you might want to go directly to Managing Drivers or Troubleshooting.

This application note gives you the whole story about drivers, describes different scenarios you might experience, and walks you through possible solutions. If you are having a problem not described here, feel free to report it in the forum in our Support Center.

What is a VID/PID?

When you plug a device into the USB port on your computer, the computer reads the vendor ID (VID) and product ID (PID). The computer then uses the combination of these two numbers (VID/PID) to find a driver for the device.

When you connect an Efinix development board to your computer with a USB cable, the VID/PID the computer reads is the one from the FTDI chip on the board. Therefore, every Efinix development board that has the same FTDI chip has the same VID/PID. Many other vendors do the same thing: they simply use the VID/PID of the FTDI chip on the board. You might ask "why don't board vendors get their own unique VID/PID?" The reality is that the licensing costs for these unique numbers become a barrier.

What Does the FTDI Chip Do?

The FTDI chip receives/sends data from a USB interface on the one side and sends/receives data from one or more interfaces on the other side. On Efinix development boards, the FTDI chip is used primarily for the SPI and JTAG interfaces to the FPGA. For some boards, an interface connects to the UART or other specialty interfaces.

Figure 1. FTDI Chip Used on Efinix Development Boards

If you are developing your own board, you probably will not put an FTDI chip on it. However, you do probably have a JTAG header. In this case, you might want to program the FPGA using the Efinity software running on your computer via an FTDI breakout-board, mini-module, or cable.

Figure 2. FTDI Chip Used on Breakout Boards, Modules, or Cables

About the Windows Drivers

For Windows systems, the current guidance from Efinix is:

  • For the T8 BGA81 development board, install the libusbK driver as a composite driver.
  • For all other Efinix boards, use the libusb-win32 driver for separate interfaces.

You install drivers with the Zadig software v2.7 (or later). Follow the instructions in Install Drivers.

Guidelines Have Changed

Efinix has changed the guidance for installing Windows drivers over time based on internal testing, software updates, and customer feedback. Although the guidance has changed, the important thing to understand is that if you already installed a driver and it is working for you, then keep using it as is.

Important: If your driver is not working, uninstall the old drivers and install new ones according to the latest guidance.

Composite Driver vs. Drivers for Separate Interfaces

For most of the Trion development kits, Efinix previously recommended installing a composite driver because the underlying Python library worked best with the composite driver. Versions of the Efinity software from 2020 and later use an updated library that better supports separate interfaces. Additionally, if you are using an FTDI breakout board, mini-module, or other third-party FTDI-based cable, you might want to install different drivers for the interfaces. For example, you might install a libusb-win32 driver for the JTAG interface and use a default driver for the UART interface. Therefore, the guidance now recommends installing drivers for separate interfaces.

Note: The pre-loaded example design for the Titanium Ti180 J484 Development Board and Titanium Ti180 M484 Development Board require drivers for separate interfaces. See Titanium Ti180 J484 Development Board.

libusb-win32 vs. libusbK

Efinix has always recommended the libusb-win32 driver. In the past, the libusbK driver was recommended if you were using OpenOCD. With v2.7 of the Zadig software, the libusb-win32 driver is improved and now supports OpenOCD more effectively. Additionally, the USB and FTDI Python libraries that are provided with the Efinity software natively use libusb. Therefore, Efinix now recommends using the libusb-win32 driver.

FTDI Chips on Efinix Boards

The following table lists the FTDI chip interfaces for each Efinix development board.1

Table 1. Efinix Development Boards with FTDI Chips
Board FTDI Chip VID PID Interface
0 1 2 3
Trion T20 BGA256 Development Board FT2232H 0x0403 0x6010 SPI JTAG
Trion T20 MIPI Development Board FT2232H 0x0403 0x6010 SPI JTAG
Trion T120 BGA324 Development Board FT2232H 0x0403 0x6010 SPI JTAG
Trion T120 BGA576 Development Board FT2232H 0x0403 0x6010 SPI JTAG
Titanium Ti180 J484 Development Board FT2232H 0x0403 0x6010 UART (FPGA) JTAG
Titanium Ti180 M484 Development Board FT2232H 0x0403 0x6010 UART (FPGA) JTAG
Xyloni Development Board FT4232H 0x0403 0x6011 SPI JTAG UART (FPGA) VCCIO Select
Titanium Ti60 F225 Development Board FT4232H 0x0403 0x6011 SPI JTAG UART (FPGA) UART (USB 3.0)

Managing Drivers

About this task

If you only have one board, the driver usage is straightforward. Install the driver according to the instructions in the development kit user guide. However, if you have more than one board and they happen to use the same FTDI chip, you may need to manage the drivers, depending on the board.

Generally, when you get a new Efinix board you:

  • Install new drivers OR
  • Use already installed drivers OR
  • Update a conflicting driver to a default

The following table explains how to handle the drivers for combinations of boards.

Table 2. Managing Boards and Drivers
Scenario Action
One or more of these boards:
Trion T20 BGA256 Development Board
Trion T20 MIPI Development Board
Trion T120 BGA324 Development Board
Trion T120 BGA576 Development Board
You only need to install drivers for separate interfaces once and then you can use any of these boards. (These boards have the same FTDI chip and use the same interface driver.)
The Windows Device Manager shows the name of the board that was attached when you installed the driver. If you connect the second board, the name stays the same in the Device Manager, which is fine. The Efinity Programmer displays the correct board name.
Titanium Ti180 J484 Development Board
Titanium Ti180 M484 Development Board
If you only have this board, install drivers.
If you also have T20 or T120 boards, update the driver for the Ti180 J484 board Interface 0.
If you also have the Xyloni or Ti60 F225 board, install drivers.
Xyloni Development Board
Titanium Ti60 F225 Development Board
If you only have one of these boards, install drivers.
If you also have T20 or T120 boards, , install drivers.
Important: Only use one Efinix board at a time. When switching from one board to the other, confirm the driver usage in the Windows Device Manager and Zadig software.

Titanium Ti180 J484 Development Board

As shown in FTDI Chips on Efinix Boards, the majority of Efinix boards have SPI for interface 0 and JTAG for interface 1. However, the Titanium Ti180 J484 Development Board uses interface 0 for the UART instead of SPI. Therefore, if you have an Efinix board with the FT2232H chip and want to use the Titanium Ti180 J484 Development Board, you will have a conflict for Interface 0. To fix this conflict, you need to update the driver for Interface 0.

Note: If you only have a Titanium Ti180 J484 Development Board or the other Efinix board you have is a Xyloni or Titanium Ti60 F225 Development Board, simply install the driver for Interface 1.

This topic assumes you have already installed the drivers for interface 0 (SPI) and 1 (JTAG) as usual for the previous board. The following example shows the Windows Device Manager and Zadig software when you connect and turn on the Titanium Ti180 J484 Development Board. The other board (in this example the T120 BGA324 board) is turned off.

Figure 3. Example Windows Device Manager and Zadig before Updating Drivers

To fix the Interface 0 conflict:

  1. Connect and turn on the Titanium Ti180 J484 Development Board. Disconnect or turn off your other board.
  2. In the Windows Device Manager, update the driver for Interface 0 to a default.

The Windows Device Manager shows:

  • libusb-win32 devices
    • <board name> (Interface 1)
  • Ports (COM & LPT)
    • USB Serial Port (COMn)
    Universal Serial Bus Controllers
    • USB Serial Converter n

The Windows Device Manager does not display Titanium Ti180 J484 Development Board (Interface 1).

Note: If you previously installed a composite driver, you need to uninstall it and install drivers for separate interfaces.

Xyloni and Titanium Ti60 F225 Development Boards

As shown in an050.html#concept_ek1_pt1_cvb__table_ftdi, the Xyloni and Titanium Ti60 F225 Development Boards have an FT4232 chip. Interfaces 0 - 2 are used for the same purpose, but Interface 3 is different. Therefore, if you have both boards, you will have a conflict for Interface 3.

Xyloni First

If you installed the Xyloni drivers first:

  1. Connect and turn on the Titanium Ti60 F225 Development Board. Disconnect the Xyloni.
  2. In the Windows Device Manager, update the driver for Interface 3 to a default.

The Windows Device Manager shows:

  • libusb-win32 devices
    • Xyloni (Interface 0)
    • Xyloni (Interface 1)
  • Ports (COM & LPT)
    • USB Serial Port (COMn)
    • USB Serial Port (COMn+1)
  • Universal Serial Bus Controllers
    • USB Serial Converter n
    • USB Serial Converter n+1

Titanium Ti60 F225 Development Board First

If you installed the Titanium Ti60 F225 Development Board drivers first:

  1. Connect the Xyloni. Disconnect the Titanium Ti60 F225 Development Board.
  2. In the Zadig software, install the driver for Interface 3.

The Windows Device Manager shows:

  • libusb-win32 devices
    • Titanium Ti60 F225 Development Board (Interface 0)
    • Titanium Ti60 F225 Development Board (Interface 1)
    • Titanium Ti60 F225 Development Board (Interface 3)
  • Ports (COM & LPT)
    • USB Serial Port (COMn)
    Universal Serial Bus Controllers
    • USB Serial Converter n

Install Drivers

This topic provides general driver installation instructions. Each development kit user guide also has instructions for installing drivers. Those instructions describe which interfaces need drivers, but the steps to install the drivers are the same. The following table summarizes the boards and the driver interfaces to install.2

Table 3. Efinix Development Boards Drivers and Interfaces
Board Install Driver for Interface
0 1 2 3
Trion T20 BGA256 Development Board
Trion T20 MIPI Development Board
Trion T120 BGA324 Development Board
Trion T120 BGA576 Development Board
Titanium Ti180 J484 Development Board No, use default
Titanium Ti180 M484 Development Board No, use default
Xyloni Development Board No, use default
Titanium Ti60 F225 Development Board No, use default No, use default
Important: Install appropriate drivers for all interfaces; otherwise, you may get errors in the Programmer or terminal emulators.

On Windows, you use software from Zadig to install drivers. Download the Zadig software (version 2.7 or later) from zadig.akeo.ie. (You do not need to install it; simply run the downloaded executable.)

To install the driver:

  1. Connect the board to your computer with the appropriate cable and power it up.
  2. Run the Zadig software.
    Note: To ensure that the USB driver is persistent across user sessions, run the Zadig software as administrator.
  3. Choose Options > List All Devices.
  4. Repeat the following steps for each interface. The interface names end with (Interface N), where N is the channel number.
    • Select libusb-win32 in the Driver drop-down list.
    • Click Replace Driver.
  5. Close the Zadig software.
Tip: The Zadig software shows which driver is being used for the board/interface. If it shows libusb0, your computer is using the libusb-win32 driver. If it shows FTDIBUS, then Windows is using the default driver.
Figure 4. Drivers in Zadig Software

Update Drivers to a Default

About this task

To update a driver to the default driver:

Procedure

  1. Open the Windows Device Manager.
  2. Right-click the board name under libusb-win32 USB Devices.
  3. Choose Update driver from the pop-up menu.
  4. Choose Browse my computer for drivers.
  5. Choose Let me pick from a list of available drivers on my computer.
  6. Choose a USB serial converter driver. There may be more than one listed; you can choose any of them.
  7. Click Next. Windows updates the driver for that board.
  8. Click Close when Windows has finished updating the drivers.
    The Windows Device Manager updates to show the board under Ports (COM & LPT) and under Universal Serial Bus Controllers.

Results

Figure 5. Updated Device in the Windows Device Manager

Uninstall Drivers

About this task

You may want to uninstall a driver completely. In that case, use the following steps:

Procedure

  1. Open the Windows Device Manager.
  2. Right-click the board name under <driver> USB Devices. For example, right-click libusbK USB Devices > T20F324 Development Board (Composite Parent) to uninstall the composite parent driver.
  3. Choose Uninstall device from the pop-up menu.
  4. Turn on the Delete the driver software for this device option in the Uninstall Device dialog boxes.
  5. Click Uninstall.
  6. For separate interfaces, repeat steps 2-5 for each interface.
  7. Disconnect the board from your computer and reconnect it again.
  8. If you still see the board name in the Windows Device Manager, repeat the uninstall process.

Results

The Windows Device Manager updates to show the board under Ports (COM & LPT) and under Universal Serial Bus Controllers.

Figure 6. Example Windows Device Manager and Zadig after Uninstalling Drivers

Troubleshooting

Below are some common questions and issues that cause driver problems.

I installed libusbK drivers for separate interfaces already. Do I really need to uninstall them and re-install with libusb-win32?

The short answer is no—you do not need to re-install the drivers if they are working for you. However, when you plug in a new development board it also uses the libusbK driver. If that works for you, then you can keep using libusbK. If it does not work, Efinix recommends that you uninstall the libusbK drivers; refer to Managing Drivers.

Zadig shows a different driver name than the one I installed (or that Windows automatically installed). Is that correct?

Yes, Zadig shows these driver names:

  • The libusb-win32 driver displays as libusb0.
  • The default driver shows as FTDIBUS.

In the Programmer, I get the error message "Please install usb driver on Interface that used for SPI Programming"

You get this Programmer error message if you did not install the driver for the SPI interface (Interface 0). You should install the drivers for all interfaces, even if you only want to use JTAG programming.

The Programmer was working fine, but now I get an error message that "A device attached to the system is not functioning"

This message can happen when you remove power to a board (by turning it off or disconnecting it from your computer), turn power back on, and then try to program. Before trying to program with a newly connected board, always click the Refresh USB Targets button next to the USB Target drop-down list.

When you remove power to a board, you will notice that the Programmer still has the board name you last used in the USB Target list. Even though the name is still listed there, when you reconnect the board you need to refresh the Programmer so that it correctly finds the board.

When I plug in my Efinix board I don't see the name in the Windows Device Manager

This situation can happen for 2 reasons:

  • You did not install any drivers yet; the Windows Device Manager lists the board under Ports (COM & LPT) and Universal Serial Bus Controllers using a default driver.
  • You installed a driver for another Efinix board and that name is displayed instead (see the answer to the next troubleshooting question for details).

When I plug in the T120 F324 board the Windows Device Manager has the wrong board name; I installed drivers for the T20 BGA256 board already

The Windows Device Manager shows the name of the device that was found when you installed the driver—in this case, the T20 BGA256 board. Because the T120 F324 board and the T20 BGA256 boards have the same FTDI chip, and the interfaces are used for the same function, you can use the same driver for both. It does not matter that Windows has the wrong board name. The Efinity software correctly shows the name for the board that you have connected.

If you installed drivers for separate interfaces: when you connect both Efinix boards to your computer at the same time, the Windows Device Manager lists all board interfaces. For example:
  • Trion T20BGA256 Development Board (Interface 0)
  • Trion T20BGA256 Development Board (Interface 0)
  • Trion T20BGA256 Development Board (Interface 1)
  • Trion T20BGA256 Development Board (Interface 1)
If you installed a composite driver, when you connect both boards the Windows Device Managere shows the board name twice. For example:
  • Trion T20BGA256 Development Board
  • Trion T20BGA256 Development Board

My drivers are installed correctly but I get an error message that "Detected hex file type does not match JTAG chain file's selected device type"

You get this error when you try to program with a bitstream that was compiled for a different device. Before programming, the Programmer checks to make sure that the device name in the bitstream matches the device you are trying to program. If they do not match, you get this error message.

I have a board from another vendor that has an FTDI chip on it. Will it conflict with my Efinix board?

If the other vendor's board has the same FTDI chip as the Efinix board, there may be a conflict if the boards have different interface usage (see FTDI Chips on Efinix Boards). First try to update the driver to a default for the board you are not using. If that does not work, uninstall the driver for the board you are not using.

The other vendor's board has a different FTDI chip, there should not be any driver conflicts.

Revision History

Table 4. Revision History
Date Version Description
July 2023 1.1 Added Ti180J484 development kit. (DOC-1357)
October 2022 1.0 Initial release.
1 The T8 BGA81 development board uses an Atmel chip instead of FTDI; therefore, it is not listed in this table.
2 For the T8 BGA81 development board, follow the instructions in the Trion T8 BGA81 Development Kit User Guide.