About Fireworks

Fireworks is a board module for Firewire audio devices. This board was developed by ECHO Audio. As of 2013, it's end of life.

Fireworks is applied to the devices below:

  • Mackie Onyx F series
    • 400F
    • 1200F
  • ECHO AudioFire series
    • AudioFire8 (until 2009 July)
    • AudioFire12
    • AudioFire2
    • AudioFire4
    • AudioFire8 (since 2009 July)
    • AudioFirePre8
  • Gibson
    • Robot Interface Pack (options for DuckTiger, DarkFire, Les paul Studio Limited)

Unconfirmed as a product:

  • ECHO
    • Fireworks8
    • Fireworks HDMI
  • Gibson
    • AudioPack
    • GoldTop

Components

Fireworks consists of three chips.

  1. communication chipset for IEEE1394 PHY/Link and IEC 61883-1/6 (TI TSB43CB43 IceLynx-Micro)
  2. DSP or FPGA for signal processing. (TI TMS320C6713B or Xilinx Spartan XC35250E)
  • DSP: 400F/1200F/AudioFire8(until 2009 July)/AudioFire12
  • FPGA: 1200F/AudioFire2/AudioFire4/AudioFire8(since 2009 July)/AudioFirePre8/Robot Interface Pack
  1. Flash Memory for storage of firmwares (Intel JS28F160C3BD70 or Micron M28W160CB)

Firmwares

The firmware consists of much lines 0f 12 bytes. The line is encoded by ASCII character encoding scheme. For example:

hexiadecimal expression  => decode by ASCII => each interpretation
307836393634373534310d0a => 0x69647541\r\n  => (char *)	 iduA
307837323639343636660d0a => 0x7269466f\r\n  => (char *)  riFo
307830303332333136350d0a => 0x00323165\r\n  => (char *)  .21e
307830303032656530300d0a => 0x0002ee00\r\n  => (uint32_t)192000

The firmware has magic bytes in its first line.

hexiadecimal expression      => decode by ACII
3136353120312030203020300d0a => 1651 1 0 0 0\r\n

The firmware has header structure below:

typedef uint8_t line[12];

struct efw_firmware_header {
    line type;			/* firmware type, enum efw_firmware_type */
    line flash_offset_address;	/* offset address in flash memory */
    line included_quads;	/* the number of quadlets included in this firmware */
    line CRC32;
    line checksum;
    line version;		/* firmware version */
    line crc_is_appended;	/* the CRC32 is appended or not */
    line footprint_quads;
};

enum efw_firmware_type_{
	EFW_DspCode	= 0,	/* for DSP */
	EFW_IceLynxCode	= 1,	/* for !IceLynx-Micro */
	EFW_Data	= 2,
	EFW_FPGACode	= 3,	/* for FPGA */
	EFW_DeviceName	= 4,
	EFW_Invalid	= 0xFF,
};

Firmware position

Mackie Onyx F series:

  • 0x00000000 bootstrap.dat
  • 0x00080000 onyxfpga.dat(1200F only)
  • 0x000c0000 onyx400f.dat/Onyx1200F_DSP.dat
  • 0x00100000 FireworksARM.dat/Onyx1200F_ARM.dat
  • 0x00140000 onyx400f_E.dat/onyx1200f_E.dat

Echo AudioFire8(until 2009 July)/AudioFire12:

  • 0x00000000 bootstrap.dat
  • 0x00008000 (until 3.0.2) killsession
  • 0x0000e000 (until 1.0.6) killsession
  • 0x000c0000 audiofire8.dat/audiofire12.dat
  • 0x00100000 FireworksARM.dat
  • 0x00140000 audiofire8_E.dat/audiofire12_E.dat
  • 0x00180000 (until 3.0.2) FireworksARM_E.dat

Echo AudioFire2/AudioFire4/AudioFire8(since 2009 July)/AudioFirePre8:

  • 0x00000000 bootstrap.dat(until 5.2.1)/fireworks_fpga.dat(until 5.5.0)/fireworksfpga_302.dat/fireworks_fpga_421.dat
  • 0x00100000 Fireworks3.dat

Gibson RIP:

  • 0x00000000 ripfpga.dat/goldtopfpga.dat
  • 0x00100000 riparm.dat(until 5.2.1)/Fireworks3.dat

Command and Response

Fireworks has its own system for command and response.

Capability

Fireworks can return its capability by specific command/response. Sometimes the data is different between firmware version even if it's the same device.

Its data format is:

#define HWINFO_MAX_NAME_BYTES	32
#define HWINFO_MAX_PHYS_GRP	8

enum phys_grp_type {
	PHYS_GRP_TYPE_ANALOG		= 0,
	PHYS_GRP_TYPE_SPDIF		= 1,
	PHYS_GRP_TYPE_ADAT		= 2,
	PHYS_GRP_TYPE_SPDIF_OR_ADAT	= 3,
	PHYS_GRP_TYPE_ANALOG_MIRROR	= 4,
	PHYS_GRP_TYPE_HEADPHONES	= 5,
	PHYS_GRP_TYPE_I2S		= 6,
	PHYS_GRP_TYPE_GUITAR		= 7,
	PHYS_GRP_TYPE_PIEZO_GUITAR	= 8,
	PHYS_GRP_TYPE_GUITAR_STRING	= 9
};

struct phys_grp {
	uint8_t type;	/* enum phys_grp_type */
	uint8_t count;
};

struct efw_hwinfo_caps {
	uint32_t	flags;
	uint32_t	node_id_high;
	uint32_t	node_id_low;
	uint32_t	hw_type;
	uint32_t	hw_version;
	uint8_t		vendor_name[HWINFO_MAX_NAME_BYTES];
	uint8_t		model_name[HWINFO_MAX_NAME_BYTES];
	uint32_t	supported clocks
	uint32_t	num_1394_receive_channels_x1;	/* up to 48.0kHz */
	uint32_t	num_1394_transmit_channels_x1;	/* up to 48.0kHz */
	uint32_t	num_phys_audio_out;
	uint32_t	num_phys_audio_in;
	uint32_t	num_phys_out_groups;
	struct phys_grp	phys_out_groups[HWINFO_MAX_PHYS_GRP];
	uint32_t	num_phys_in_groups;
	struct phys_grp	phys_in_groups[HWINFO_MAX_PHYS_GRP];
	uint32_t	num_midi_out_ports;
	uint32_t	num_midi_in_ports;
	uint32_t	max_sampling_rate;
	uint32_t	min_sampling_rate;
	uint32_t	dsp_version;
	uint32_t	arm_version;
	uint32_t	num_mixer_playback_channels;
	uint32_t	num_mixer_capture_channels;
	/* firmware version 2.0 or later */
	uint32_t	fpga_version;
	uint32_t	num_1394_receive_channels_x2;	/* up to 88.2kHz */
	uint32_t	num_1394_transmit_channels_x2;	/* up to 88.2kHz */
	uint32_t	num_1394_receive_channels_x4;	/* up to 192.0kHz */
	uint32_t	num_1394_transmit_channels_x4;	/* up to 192.0kHz */
};

The information below is from firmware dump. Some parameters are able to be overload by actual device.

Mackie Onyx 400F (onyx400.dat):

0x00000012	flags
0x000ff200	guid hi
0x00000000	guid low
0x0000400f	type
0x00000000	version
0x6b63614d	kcaM
0x00006569	..ei
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x78796e4f	xynO
0x40303420	004.
0x00000046	...F
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x0000000d	supported clocks
0x0000000a	num 1394 receive channels x1
0x0000000a	num 1394 transmit channels x1
0x0000000c	num phys audio out
0x0000000a	num phys audio in
0x00000003	num phys out groups
0x02010800	phys out groups
0x00000204	
0x00000000	
0x00000000	
0x00000002	num phys in groups
0x02010800	phys in groups
0x00000000	
0x00000000	
0x00000000	
0x00000001	num midi out ports
0x00000001	num midi in ports
0x0002ee00	max rate
0x0000ac44	min rate
0x03020800	dsp version (different between firmware)
0x00000000	arm version
0x0000000a	mixer playback channels
0x0000000a	mixer capture channels
0x00000000	fpga version
0x0000000a	1394 receive channels x2
0x0000000a	1394 transmit channels x2
0x0000000a	1394 receive channels x4
0x0000000a	1394 transmit channels x4

Mackie Onyx 1200F (onyx1200F.dat):

0x0000003c	flags
0x000ff200	guid hi
0x00000000	guid low
0x0001200f	type 
0x00000000	version
0x6b63614d	kcaM
0x00006569	..ei
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x78796e4f	xynO
0x40323120	021.
0x00004630	..F0
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x0000003d	supported clock
0x00000022	num 1394 receive channels x1
0x0000001e	num 1394 transmit channels x1
0x00000024	num phys audio out
0x0000001e	num phys audio in
0x00000006	num phys out groups
0x08020800	phys out groups
0x08050802	
0x02040201	
0x00000000	
0x00000004	num phys in groups
0x08020c00	phys in groups
0x02010802	
0x00000000	
0x00000000	
0x00000002	num midi out ports
0x00000002	num midi in ports
0x0002ee00	max rate
0x0000ac44	min rate
0x03020800	dsp version (different between firmware)
0x00000000	arm version
0x00000022	num mixer playback channels
0x0000001e	num mixer capture channels
0x00000000	fpga version
0x00000010	num 1394 receive channels x2
0x00000010	num 1394 transmit channels x2
0x00000008	num 1394 receive channels x4
0x00000008	num 1394 transmit channels x4

Echo AudioFire8 (audiofire8.dat):

0x00000000	flags		->0x10(4.0.0)
0x00148600	guid hi
0x01234567	guid low
0x00000af8	type
0x00000000	version
0x6f686345	ohcE
0x67694420	giD.
0x6c617469	lati
0x64754120	duA.
0x00006f69	..oi
0x00000000	....
0x00000000	....
0x00000000	....
0x69647541	iduA
0x7269466f	riFo
0x00003865	..8e
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x0000000f	supported clocks->0xd(2.0.2)
0x0000000a	num 1394 receive channels x1
0x0000000a	num 1394 transmit channels x1
0x0000000a	num phys audio out
0x0000000a	num phys audio in
0x00000002	num phys out groups
0x02010800	phys out groups
0x00000000	
0x00000000	
0x00000000	
0x00000002	num phys in groups
0x02010800	phys in groups
0x00000000	
0x00000000	
0x00000000	
0x00000001	num midi out ports
0x00000001	num midi in ports
0x00017700	max rate
0x0000ac44	min rate	->0x7d00(2.0.6)
0x01040000	dsp version (different between firmware)
0x00000000	arm version
0x0000000a	num mixer playback channels
0x0000000a	num mixer capture channels
(2.0.6 or pater)
0x00000000	fpga version
0x0000000a	num 1394 receive channels x2
0x0000000a	num 1394 transmit channels x2
0x0000000a	num 1394 receive channels x4
0x0000000a	num 1394 transmit channels x4

Echo AudioFire12 (audiofire12.dat):

0x00000000	flag		->0x10(4.0.0)->0x110(5.5.0)
0x00148600	guid hi
0x01234567	guid low
0x0000af12	type
0x00000000	version
0x6f686345	ohcE
0x67694420	giD.
0x6c617469	lati
0x64754120	duA.
0x00006f69	..oi
0x00000000	....
0x00000000	....
0x00000000	....
0x69647541	iduA
0x7269466f	riFo
0x00323165	.21e
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000000	....
0x00000007	supported clocks->0x5(2.0.6)
0x0000000c	num 1394 receive channels x1
0x0000000c	num 1394 transmit channels x1
0x0000000c	num phys audio out
0x0000000c	num phys audio in
0x00000001	num phys out groups
0x00000c00	phys out groups
0x00000000	
0x00000000	
0x00000000	
0x00000001	num phys in groups
0x00000c00	phys in groups
0x00000000	
0x00000000	
0x00000000	
0x00000001	num midi out ports
0x00000001	num midi in ports
0x0002ee00	max rate	->0x17700(5.5.0)
0x0000ac44	min rate	->0x7d00(2.0.6)
0x01040000	dsp version (different between firmware)
0x00000000	arm version
0x0000000c	num mixer playback channels
0x0000000c	num mixer capture channels
(2.0.6 or later)
0x00000000	fpga version
0x0000000c	num 1394 receive channels x2
0x0000000c	num 1394 transmit channels x2
0x0000000c	num 1394 receive channels x4
0x0000000c	num 1394 transmit channels x4

Echo AudioFire2 (Fireworks3.dat, 5.0.0 or later):

0x000000a0	flags
0x00148600	guid high
0x00000000	guid low
0x00000af2	type
0x00000000	version
0x4563686f	Echo
0x20446967	.Dig
0x6974616c	ital
0x20417564	.Aud
0x696f0000	io..
0x00000000	....
0x00000000	....
0x00000000	....
0x41756469	Audi
0x6f466972	oFir
0x653200c0	e2..
0x00000070	....
0x00024634	....
0x00000009	supported clocks
0x00000006	num 1394 receive channels x1
0x00000004	num 1394 transmit channels x1
0x00000006	num phys audio out
0x00000004	num phys audio in
0x00000003	num phys out groups
0x00020502	phys out groups
0x01020000
0x00000000
0x00000000
0x00000002	num phys in groups
0x00020102	phys in groups
0x00000000
0x00000000
0x00000000
0x00000001	num midi out ports
0x00000001	num midi in ports
0x00017700	max rate
0x00007d00	min rate
0x00000000	dsp version
0x00000000	arm version
0x00000006	num mixer playback channels
0x00000004	num mixer capture channels
0x00000000	fpga version
0x00000006	num 1394 receive channels x2
0x00000004	num 1394 transmit channels x2
0x00000006	num 1394 receive channels x4
0x00000004	num 1394 transmit channels x4
0x0000003f
0x000246e4

Echo AudioFire4 (Fireworks3.dat, 5.0.0 or later):

0x000000e0	flags
0x00148600	guid high
0x00000000	guid low
0x00000af4	type
0x00000000	version
0x4563686f	Echo
0x20446967	.Dig
0x6974616c	ital
0x20417564	.Aud
0x696f0000	io..
0x00000000	....
0x00000000	....
0x00000000	....
0x41756469	Audi
0x6f466972	oFir
0x653400c0	e4..
0x00000070	...p
0x00024738	..G8
0x00000009	supported clocks
0x00000006	num 1394 receive channels x1
0x00000006	num 1394 transmit channels x1
0x00000006	num phys audio out
0x00000006	num phys audio in
0x00000002	num phys out groups
0x00040102	phys out groups
0x00000000
0x00000000
0x00000000
0x00000002	num phys in groups
0x00040102	phys in groups
0x00000000
0x00000000
0x00000000
0x00000001	num midi out ports
0x00000001	num midi in ports
0x00017700	max rate
0x00007d00	min rate
0x00000000	dsp version
0x00000000	arm version
0x00000006	num mixer playback channels
0x00000006	num mixer capture channels
0x00000000	fpga version
0x00000006	num 1394 receive channels x2
0x00000006	num 1394 transmit channels x2
0x00000006	num 1394 receive channels x4
0x00000006	num 1394 transmit channels x4
0x00000040
0x000247e8

Echo AudioFire9 (Fireworks3.dat, 5.0.0 or later):

0x00000624	flags
0x00148600	guid high
0x00000000	guid low
0x00000af9	type
0x00000000	version
0x4563686f	Echo
0x20446967	.Dig
0x6974616c	ital
0x20417564	.Aud
0x696f0000	io..
0x00000000	....
0x00000000	....
0x00000000	....
0x41756469	Audi
0x6f466972	oFir
0x65386100	e8a.
0x00000070	...p
0x0002483c	..H<
0x0000001d	supported clocks
0x00000010	num 1394 receive channels x1
0x00000010	num 1394 transmit channels x1
0x00000010	num phys audio out
0x00000010	num phys audio in
0x00000002	num phys out groups
0x00080308	phys out groups
0x00000000
0x00000000
0x00000000
0x00000002	num phys in groups
0x00080308	phys in groups
0x00000000
0x00000000
0x00000000
0x00000001	num midi out ports
0x00000001	num midi in ports
0x00017700	max rate
0x00007d00	min rate
0x00000000	dsp version
0x00000000	arm version
0x00000010	num mixer playback channels
0x00000010	num mixer capture channels
0x00000000	fpga version
0x0000000c	num 1394 receive channels x2
0x0000000c	num 1394 transmit channels x2
0x0000000a	num 1394 receive channels x4
0x0000000a	num 1394 transmit channels x4
0x0000001b
0x000248ec

Gibson RIP (Fireworks3.dat, 5.0.0 or later):

0x00004020	flags
0x00075b00	guid high
0x00000000	guid low
0x0000afb2	type
0x00000000	version
0x47696273	Gibs
0x6f6e00c0	on..
0x00000004	....
0x00024920	..1.
0x52495000	RIP.
0x00000070	...p
0x00024940	..1(
0x00000041	supported clock
0x00000002	num 1394 receive channels x1
0x00000008	num 1394 transmit channels x1
0x00000002	num phys audio out
0x00000008	num phys audio in
0x00000001	num phys out groups
0x00020000	phys out groups
0x00000000
0x00000000
0x00000000
0x00000003	num phys in groups
0x07010801	phys in groups
0x09060000
0x00000000
0x00000000
0x00000000	num midi out ports
0x00000000	num midi in ports
0x00017700	max rate
0x0000ac44	min rate
0x00000000	dsp version
0x00000000	arm version
0x00000002	num mixer playback channels
0x00000008	num mixer capture channels
0x00000000	fpga version
0x00000002	num 1394 receive channels x2
0x00000008	num 1394 transmit channels x2
0x00000002	num 1394 receive channels x4
0x00000008	num 1394 transmit channels x4
0x0000001b
0x000249f0

Gibson Goldtop (Fireworks3.dat, 5.0.0 or later):

0x00006020	flags
0x00075b00	guid high
0x00000000	guid low
0x0000afb9	type
0x00000000	version
0x47696273	Gibs
0x6f6e00c0	on..
0x00000008	....
0x00024a24	..J$
0x476f6c64	Gold
0x746f7000	top.
0x00000070	....
0x00024a44	..JD
0x00000045	supported clock
0x00000008	num 1394 receive channels x1
0x00000010	num 1394 transmit channels x1
0x00000008	num phys audio out
0x00000010	num phys audio in
0x00000001	num phys out groups
0x00080000	phys out groups
0x00000000
0x00000000
0x00000000
0x00000004	num phys in groups
0x00080701	phys in groups
0x08010906
0x00000000
0x00000000
0x00000001	num midi out ports
0x00000001	num midi in ports
0x00017700	max rate
0x0000ac44	min rate
0x00000000	dsp version
0x00000000	arm version
0x00000008	num mixer playback channels
0x00000010	num mixer capture channels
0x00000000	fpga version
0x00000008	num 1394 receive channels x2
0x00000010	num 1394 transmit channels x2
0x00000008	num 1394 receive channels x4
0x00000010	num 1394 transmit channels x4

Streaming

Fireworks has two types of streaming. One is for Windows, another is compliant to IEC 61883-6.

Fireworks with firmware version 5.5 or former is a type of device which
transmits packets with a bit disorder. For example,

Index	Payload	CIP header 1CIP header 2
023	210	3F1100F8	900478E9
024	002	3F1100F8	90FFFFFF
025	210	3F110000	900490E9
026	210	3F110008	9004A4E9
027	210	3F110010	9004B8E9
028	002	3F110010	90FFFFFF
029	210	3F110020	9004E4E8 <-
030	210	3F110018	9004D0E8 <-
031	210	3F110028	9004F8E8
032	002	3F110028	90FFFFFF
033	210	3F110030	900410E8
034	210	3F110038	900424E8
035	210	3F110040	900438E8
036	002	3F110040	90FFFFFF
037	210	3F110050	900464E8 <-
038	210	3F110048	900450E8 <-
039	210	3F110058	900478E8
040	002	3F110058	90FFFFFF
041	210	3F110068	9004A4E8 <-
042	210	3F110060	900490E8 <-
043	210	3F110070	9004B8E8
044	002	3F110070	90FFFFFF
045	210	3F110080	9004E4E7 <-
046	210	3F110078	9004D0E8 <-

Controling

Fireworks has matrix mixer. Its processing is done in DSP or FPGA.