Fireworks Firmware Tool

Short help:

Usage: ./ffado-fireworks-downloader [-g GUID] [-m MAGIC] [-p PORT] [-v LEVEL]
            [--guid=GUID] [--magic=MAGIC] [--port=PORT] [--verbose=LEVEL]
fireworks-downloader -- firmware downloader application for ECHO Fireworks

              Lists devices on the bus
              Display information about a device and it's firmware
           info FILE
              Display information about the firmware contained in FILE
           upload FILE
              Upload the firmware contained in FILE to the device
           download FILE START_ADDR LEN
              Download the flash contents from the device to FILE
              Starts at address START_ADDR and reads LEN quadlets
           verify FILE
              Verify that the firmware contained in the device corresponds
              to the one contained in FILE

  -g, --guid=GUID            GUID of the target device
  -m, --magic=MAGIC          A magic number you have to obtain before this code
                             will work.Specifying it means that you accept the
                             risks that come with this tool.
  -p, --port=PORT            Port to use
  -v, --verbose=LEVEL        Produce verbose output (set level 0-10)


Messing with firmware can be a dangerous thing. It can seriously damage your device. To make sure you are aware of this, the downloader tool does not work unless you specify the correct magic option. This means that you have to add "-m 0x001807198000LL" to the options before the downloader will work. By doing so you acknowledge that you're working at own risk. Otherwise you will get the following error:

04144000490:  (fireworks-downloader.cpp)[ 104] main: Magic number not correct. Please specify the correct magic using the '-m' option.
04144000600:  (fireworks-downloader.cpp)[ 105] main: Manipulating firmware can cause your device to magically stop working (a.k.a. 'bricking').
04144000609:  (fireworks-downloader.cpp)[ 106] main: Specifying the magic number indicates that you accept the risks involved
04144000616:  (fireworks-downloader.cpp)[ 107] main: with using this tool. The magic number can be found in the source code.

Listing Devices

To use the tool, first connect a fireworks device, and then run (replace XXX with the correct magic):

$ ./ffado-fireworks-downloader -m XXX list

This will display a list of devices on the bus:

Node id        GUID                  Vendor - Model
0              0x314fc00036de6850    'Linux - ohci1394 ' - ''
1              0x001486065ba9cc5f    'Echo Digital Audio' - 'AudioFire8'

Displaying device info

Pick the device you want to upload a new firmware to from the list, and get the GUID. In this example the GUID is 0x001486065ba9cc5f. Then display the device info:

./ffado-fireworks-downloader -m XXX -g 0x001486065ba9cc5f display

This results in:

04306670482: Debug (efc_cmd.cpp)[ 171] showEfcCmd: EFC Length: 6
04306670498: Debug (efc_cmd.cpp)[ 172] showEfcCmd: EFC Header:
04306670506: Debug (efc_cmd.cpp)[ 173] showEfcCmd:  Version         : 0x00000000
04306670514: Debug (efc_cmd.cpp)[ 174] showEfcCmd:  Sequence number : 0x00000002
04306670522: Debug (efc_cmd.cpp)[ 175] showEfcCmd:  Category        : 0x00000000
04306670530: Debug (efc_cmd.cpp)[ 176] showEfcCmd:  Command         : 0x00000000
04306670570: Debug (efc_cmd.cpp)[ 177] showEfcCmd:  Return Value    : 0x00000000
04306670583: Debug (efc_cmds_hardware.cpp)[ 127] showEfcCmd: EFC HW CAPS info:
04306670591: Debug (efc_cmds_hardware.cpp)[ 128] showEfcCmd:  Flags   : 0x00000011
04306670599: Debug (efc_cmds_hardware.cpp)[ 129] showEfcCmd:  GUID    : 001486065BA9CC5F
04306670607: Debug (efc_cmds_hardware.cpp)[ 130] showEfcCmd:  HwType  : 0x00000AF8
04306670615: Debug (efc_cmds_hardware.cpp)[ 131] showEfcCmd:  Version : 0
04306670622: Debug (efc_cmds_hardware.cpp)[ 132] showEfcCmd:  Vendor  : Echo Digital Audio
04306670629: Debug (efc_cmds_hardware.cpp)[ 133] showEfcCmd:  Model   : AudioFire8
04306670645: Debug (efc_cmds_hardware.cpp)[ 135] showEfcCmd:  Supported Clocks   : 0x0000000D
04306670653: Debug (efc_cmds_hardware.cpp)[ 136] showEfcCmd:  # 1394 Playback    : 10
04306670660: Debug (efc_cmds_hardware.cpp)[ 137] showEfcCmd:  # 1394 Record      : 10
04306670667: Debug (efc_cmds_hardware.cpp)[ 138] showEfcCmd:  # Physical out     : 10
04306670674: Debug (efc_cmds_hardware.cpp)[ 139] showEfcCmd:  # Physical in      : 10
04306670681: Debug (efc_cmds_hardware.cpp)[ 142] showEfcCmd:  # Output Groups    : 2
04306670688: Debug (efc_cmds_hardware.cpp)[ 145] showEfcCmd:      Group 0: Type 0x00, count 8
04306670696: Debug (efc_cmds_hardware.cpp)[ 145] showEfcCmd:      Group 1: Type 0x01, count 2
04306670713: Debug (efc_cmds_hardware.cpp)[ 147] showEfcCmd:  # Input Groups     : 2
04306670721: Debug (efc_cmds_hardware.cpp)[ 150] showEfcCmd:      Group 0: Type 0x00, count 8
04306670728: Debug (efc_cmds_hardware.cpp)[ 150] showEfcCmd:      Group 1: Type 0x01, count 2
04306670736: Debug (efc_cmds_hardware.cpp)[ 152] showEfcCmd:  # Midi out         : 1
04306670743: Debug (efc_cmds_hardware.cpp)[ 153] showEfcCmd:  # Midi in          : 1
04306670750: Debug (efc_cmds_hardware.cpp)[ 154] showEfcCmd:  Max Sample Rate    : 96000
04306670757: Debug (efc_cmds_hardware.cpp)[ 155] showEfcCmd:  Min Sample Rate    : 32000
04306670764: Debug (efc_cmds_hardware.cpp)[ 156] showEfcCmd:  DSP version        : 0x04080000
04306670779: Debug (efc_cmds_hardware.cpp)[ 157] showEfcCmd:  ARM version        : 0x04080000
04306670786: Debug (efc_cmds_hardware.cpp)[ 158] showEfcCmd:  # Mix play chann.  : 10
04306670793: Debug (efc_cmds_hardware.cpp)[ 159] showEfcCmd:  # Mix rec chann.   : 10
04306670811: Debug (ffadodevice.cpp)[ 205] showDevice: Attached to port.......: 0 (ohci1394)
04306670821: Debug (ffadodevice.cpp)[ 206] showDevice: Node...................: 1
04306670834: Debug (ffadodevice.cpp)[ 208] showDevice: Vendor name............: Echo Digital Audio
04306670843: Debug (ffadodevice.cpp)[ 210] showDevice: Model name.............: AudioFire8
04306670856: Debug (ffadodevice.cpp)[ 212] showDevice: GUID...................: 001486065ba9cc5f
04306670890: Debug (ffadodevice.cpp)[ 217] showDevice: Assigned ID....: dev?


Nr | AddressType     | Direction | SubUnitType | SubUnitId | FunctionBlockType | FunctionBlockId | Id   | Type         |Name

digraph avcconnections {
Use "dot -Tps -o" to generate graph

Uploading firmware

Aquiring the firmware file

Get the fireworks firmware files for your device. You can get these by running the ECHO driver package for windows under wine. This will extract the audiofire firmware files into your wine drive C. In my case the files can be found here:

~/.wine/drive_c/Program Files/Echo Digital Audio/AudioFire/                                                              

For the AudioFire?2 and AudioFire?4 the firmware file is:

  • Fireworks3.dat

NOTE: AF8 and AF12 firmware upload is not functional at the moment. For the AudioFire?8 the firmware file are:

  • bootstrap.dat
  • audiofire8.dat
  • audiofire8_E.dat
  • FireworksARM.dat

For the AudioFire?12 the firmware file are:

  • bootstrap.dat
  • audiofire8.dat
  • audiofire8_E.dat
  • FireworksARM.dat

Uploading the firmware file(s)

Pick the device you want to upload a new firmware to from the list, and get the GUID. In this example the GUID is 0x001486065ba9cc5f.

Then upload the files:

./ffado-fireworks-downloader -m XXX -g 0x001486065ba9cc5f upload FILENAME

Where you replace FILENAME with the filename(s) of the firmware. Note that for the AudioFire?8 and AudioFire?12 you have to upload multiple files. Please upload them in the order they are listed on this page.