SourceForge Logo

A Driver for Downloading EZ-USB AN2131 Devices

tonycu * users_sourceforge_net

There is no need to port this driver to the 2.6 kernel, another method for downloading EZUSB2131 boards in the 2.6 kernel is documented at and (see fxload section in each page). The support is already in the 2.6 kernel. This is great!

Patrick Gerken (davion * vido_info) has reported fxload works perfect in the 2.6 kernel:
      > Yeah, it worked perfect.
      > You just need usbfs, a kernel module. After that a simple test with
      > fxload -v -D /proc/bus/usb/002/003 -I bal.hex showed that everything
      > worked, and the chip itself reenumerated.
The examples in this package may still be of interest.

What does this driver do?
Download driver and examples
EZUSB Examples
Useful References
Where can I get a board?

I currently maintain three other projects on SourceForge, the Finite State Kernel Creator for graphically designing finite state machines (it automatically generates C source code representing the state machine and does a bunch of other stuff too), the GlucoTools project assists diabetics using insulin pumps with carb to insulin ratio and correction bolus calculations, and the SourceForge Banner project for generating SourceForge project banners for printing (they make great bumper stickers and t-shirt transfers). [yes, a shameless plug]

What does this driver do?

This driver downloads USB boards built with the Cypress (formerly Anchor Chips) EZ-USB AN2131 chip. While it should download any board based on the above chip, I've only tested it on the USB I2C/IO board (pictured above) by DeVaSys Embedded Systems and the USBSIMM board by J. Gordon Electronics. Here are some features of the driver:
  1. No hard coded limit for the number of USBSIMM boards that may be connected at the same time in this driver - all structure allocation is dynamic and should be SMP safe

  2. Uses the /proc file system for downloading board

  3. Able to specify user at time of module load that may download the board - you don't have to be root to download the board

  4. Able to specify vendor and product id as parameters to load non-native boards, such as the USB-PDA adapter from Keyspan. These changes were contributed by Arnim Laeuger maintainer of ezhid.

Download driver and examples

Download (tar gzipped) UZUSB2131 v1.0 .

The EZUSB2131 project page is

EZUSB Examples

Following are some generous contributions that can be found in the Ezusb2131/Examples directory.
  1. Contributed by: Tom De Rybel [on1dcd * hotmail_com]

    This example includes an assembler bootloader routine that programs an uploaded program into the external EEPROM, making it bootable and disabling its own routines afterwords. Several sample programs are also included in this file. The schematics program used is Eagle ( The EAGLE Light Edition can be used for free! And yes, it does run on Linux. You can view Toms' schematic here - it is also included in the Example/MarkII directory.

    NOTE: Emil Petersky (petersky * isr_uni-stuttgart_de) has reported the schematic does not open with newer versions of EAGLE Light Edition, and has provided a corrected version. Thanks! The new version can be downloaded from here and has been checked into CVS.

  2. Contributed by: Michael Hetherington [chinook * pacific_net_sg]

    The objective of the project is to build an AN2131Q based USB to IEEE1284 converter with "true" parallel port register access emulation for peripherals with proprietary handshaking protocols. It can be used as a printer or scanner cable. It can also be used for home-brew MCU programmers and control systems. A schematic is provided with the example.

  3. Contributed by: Tony Cureington [tonycu * users_sourceforge_net]

    This example was used at LinuxWorld (New York 2003) as part of an HP ProLiant Gigabit network teaming demonstration using the Linux Bonding driver. More information, including pictures of building waldo, is available.


  4. Contributed by: Alexander 'E-Razor' Krause [admin * erazor-zone_de]
    Examples downloading using fxload application

    The examples at this site don't use the EZUSB2131 driver to download boards, they use fxload! Checkout for all the details.

Useful References

  1. The Linux USB Project
    (Linux USB FAQs, Tools, USB Programming Guide, Good set of
    reference links)

  2. USB Design by Example; By John Hyde
    (a good book!)

  3. Anchor Chips (now Cypress)


  1. USBView
    (USBView displays the topography of the devices that are plugged
    into the USB bus on a Linux machine; the source may also be found here.)

  2. SDCC (Small Device C Compiler)
    (SDCC is a Freeware, retargettable, optimizing ANSI - C compiler;
    the current version targets the Intel 8051)

Where can I get a board?

  1. DeVaSys Embedded Systems
    (board uses AN2131QC; onboard 16KB I2C EEPROM;
    I've used this one, it comes highly recommended by myself and others;
    Look here for the hex file to download to eeprom (in;
    note: add "vendor_id=0xabf product_id=0x3e8" to insmod to download
    eeprom hex file)

  2. J. Gordon Electronic Design, Inc.
    (board uses EZ-USB AN2131QC; I've also used this one)

  3. BrainTechnology
    While I've not used this board, I have received comments that may be of help.

  4. MmVisual
    AN2131SC and AN2131QC boards in Germany

  5. EZ USB Development
    (build your own board)


Released version 1.0 on Feb 21, 2003.
                     Added Waldo example. This example was used at LinuxWorld 
                     (New York 2003) as part of an HP ProLiant Gigabit network 
                     teaming demonstration using the Linux Bonding driver.

                     Changed flags from int to unsigned long per
                     Martin Frey [Martin.Frey * ei_tum_de]

Released version 0.4 on June 5, 2002.
                     Added ignore_renum_modula module parameter, this
                     parameter prevents the driver from claiming devices
                     that re-enumerate with the same vin/pid they enumerated
                     with for the initial download. See README in the source
                     package for details; 

                     The ignore_renum_modula changes were inspired by
                     Claes Nygren [claes * wijnet_se].

                     added MODULE_LICENSE and 
                     MODULE_SUPPORTED_DEVICE macros.

Released version 0.3 on Jan 20, 2002.
                     Removed #include linux/smp_lock.h, it caused a 
                     compile failure on 2.4.7-10 SMP kernels...

Released version 0.2 on Jul 22, 2001.
                     Changes to allow user to specify non-native vendor and 
                     product id as module parameters.

Released version 0.1 on May 30, 2001.
                     Initial release.