root/trunk/libffado/doc/rme_notes/rme_config_register_map.txt

Revision 1612, 30.8 kB (checked in by jwoithe, 14 years ago)

RME: initial documentation of Fireface 400 matrix mixer controls and input preamp gain controls.

Line 
1 RME Fireface-400 / Fireface-800 register map
2 ============================================
3
4 Version: 0.14
5 Author: Jonathan Woithe
6 Date: 6 August 2009
7
8
9 Definitions
10 -----------
11
12 CBA = Command Buffer Address
13 FF800 = Fireface-800
14 FF400 = Fireface-400
15
16 Multi-byte values sent to/from the Fireface in async packets are generally
17 little endian - that is, the device interprets quadlets in asynchronous
18 packets as little endian even though the bus definition is big-endian.  If
19 writing a driver for use on a little endian machine, this means that a lack
20 of byte swapping (to account for the bus endianness standard) will cause bit
21 0 on the host to be bit 0 on the device.
22
23 By default, FFADO however adheres to the bus standards and byteswaps on
24 little endian machines.  Under this regime, bit 0 on the host will in fact
25 be read by the device as the least significant bit in the most significant
26 byte.
27
28 In order to retain consistency with device documentation, the FFADO RME
29 driver currently sends async packet data in the little endian format which
30 the RME device expects.  Although this is technically wrong (in so far as
31 the Firewire standard is concerned), at this stage it is considered that
32 introducing an endianness difference between the FFADO driver and the
33 documentation is likely to result in maintenance issues down the track.
34
35 The bit maps in this document regarding the configuration registers are
36 written from the device's point of view.  That is, the values quoted should
37 be sent to the device in little endian format unless otherwise stated.
38
39 Curiously enough, preliminary investigations suggest that audio data appears
40 to be sent on the bus in big endian format (although this is to be
41 confirmed).
42
43 The FF800 includes a number of instrument options for input 1 which are
44 described using several different terms interchangeably:
45  - "Drive" (also referred to as "fuzz") activates 25 dB extra gain
46  - "Speaker emulation" (also referred to as "filter") removes LF noise and
47    some HF
48  - "Limiter" activates a soft-limiter with a threshold of -10 dBFS.  This
49    can only be switched off if the Front input is used for channel 1.
50
51
52 Device address space location
53 -----------------------------
54
55 While some register addresses are common between the two interfaces, the
56 absolute addresses of the settings and control differ.  These are defined
57 relative to the device "command buffer" address:
58
59   FF800: command buffer address (CBA) = 0xfc88f000
60   FF400: command buffer address (CBA) = 0x80100500
61
62 The location of the configuration (settings) registers relative to the
63 command buffer is consistent across devices:
64
65   conf reg 1 address = command buffer address + 5*4
66
67 For a FF800 this equates to 0xfc88f014.
68
69
70 Controlling sample rate (DDS)
71 -----------------------------
72
73 Sample rate is controlled by writing the desired sample rate in Hz to the
74 sample rate control register located at offset 0 from the command buffer
75 address (0xfc88f000 on a FF800).  The hardware DDS allows a wide range of
76 frequencies to be requested (possibly anything from 30 kHz up to 210 kHz).
77 The more common rates are of course 32k, 44.1k, 48k, the pull-up/down rates
78 (44.056k, 44.144k, 45.937k, 46.080k, 47.952k, 48.048k) and the corresponding
79 2x and 4x rates.
80
81 Software connecting to the Fireface device is restricted to the normal rates
82 of 32k, 44.1k, 48k and the related 2x and 4x rates.
83
84 If the device is in master clock mode and the user has not made an explicit
85 DDS setting, the hardware DDS will be determined by the sampling rate
86 requested by the application opening the device.  If a DDS frequency has
87 been requested by the user the actual rate used by the device will be that
88 DDS frequency regardless of what the application has asked for.  In this
89 case a device open will only succeed if the software has requested a speed
90 whose multiplier matches the DDS configuration.
91
92 If the device is locked to an external clock, a device open will succeed
93 only if the multiplier of the requested sampling rate matches that of the
94 external rate.
95
96 The device status registers allow the PC to determine the sampling rate when
97 an external clock is in use.  However, there is no way to read the sampling
98 rate when in master clock mode.  It is therefore necessary to cache this in
99 the driver so it can be provided when requested.
100
101 In terms of multipliers the RME treats sample rates greater than 112000 Hz
102 as 4x rates, with rates greater than 56000 Hz as 2x rates.  Rates less than
103 30000 Hz and greater than 210000 Hz are invalid.
104
105
106 Configuration registers 1, 2 and 3
107 ----------------------------------
108
109 Most RME device configuration is done using configuration registers 1, 2
110 and 3.  For the ff800 these are:
111
112   config1 = configuration register 1 (FF800: 0xfc88f014, FF400: 0x80100514)
113   config2 = configuration register 2 (FF800: 0xfc88f018, FF400: 0x80100518)
114   config3 = configuration register 3 (FF800: 0xfc88f01c, FF400: 0x8010051c)
115
116 In essence the configuration registers start at CBA+5*4 for both interfaces.
117
118 When making a configuration change these registers are always written in a
119 block of 12 bytes starting at 0xfc88f014 with a block write operation.
120
121 Configuration register 1 (FF800: 0xfc88f014, FF400: 0x80100514):
122
123   bits 31-18: unknown, set to 0
124   bits 17-16: Phones level:
125     00 = +4 dBu
126     01 = -10 dBV
127     10 = hi-gain
128   bits 15-13: unknown, set to 0
129   bits 12-10: Output level control (part 1 of 2: FPGA LED drive):
130     001 = hi-gain
131     010 = +4dBU
132     100 = -10dBV
133   bit 9: FF800: Instr option: Drive (part 1 of 2: FPGA LED drive) (active = 1)
134          FF400: Channel 3 "instrument" switch
135   bit 8: FF800: Phantom power, mic 10 (active = 1)
136          FF400: Channel 3 "pad" switch
137   bit 7: Phantom power, mic 8 (active = 1)
138   bit 6: unknown, set to 0
139   bits 5-3: Input level control (part 1 of 2: FPGA LED drive):
140     001 = lo-gain
141     010 = +4dBU
142     100 = -10dbV
143   bit 2: FF800: Instrument option: speaker emulation (aka "filter") (part 1
144            of 2: FPGA LED drive) (active = 1)
145          FF400: Channel 4 "instrument" switch
146   bit 1: FF800: Phantom power, mic 9 (active = 1)
147          FF400: Channel 4 "pad" switch
148   bit 0: Phantom power, mic 7 (active = 1)
149
150 Configuration register 2 (FF800: 0xfc88f018, FF400: 0x80100518):
151
152   bits 31-12: unknown, set to 0
153   bit 11: Input #1 front switch (active = 1)
154   bit 10: unknown, set to 0
155   bit 9: Instrument option: Drive (part 2 of 2: CPLD function) (active = 0)
156   bit 8: Input #8 rear switch (active = 1)
157   bit 7: Input #8 front switch (active = 1)
158   bit 6: Input #7 rear switch (active = 1)
159   bit 5: Input #7 front switch (active = 1)
160   bits 4-3: Output level control (part 2 of 2: CPLD function):
161     00 = undefined
162     01 = -10dBV
163     10 = hi-gain
164     11 = +4dBU
165   bit 2: Input #1 rear switch (active = 1)
166   bits 1-0: Input level control (part 2 of 2: CPLD function):
167     00 = lo-gain
168     01 = undefined
169     10 = +4dBU
170     11 = -10dbV
171
172 Configuration register 3 (FF800: 0xfc88f01c, FF400: 0x8010051c):
173   bit 31: "Drop and stop": always set to 1
174   bit 30: Unit option: TMS (active = 1)
175   bits 29-27: set to 0
176   bit 26: set to 1 for FF400, 0 for FF800
177   bits 25-17: set to 0
178   bit 16: P12DB_AN0 (normally set to 0)
179   bit 15: set to 0
180   bit 14: Toggle TCO (normally set to 0)
181   bit 13: Word clock single speed: 0 = off, 1 = on
182   bits 12-10: Sync reference source:
183     000 = ADAT1
184     001 = ADAT2
185     011 = SPDIF
186     100 = Word clock
187     101 = TCO
188   bit 9: SPDIF input source: 0 = coax, 1 = ADAT2 port
189   bit 8: SPDIF output option: ADAT2
190   bit 7: SPDIF output option: non-audio
191   bit 6: SPDIF output option: emphasis
192   bit 5: SPDIF output option: professional
193   bit 4: QS control (set to 1)
194   bit 3: DS control (set to 1)
195   bit 2: Freq1 control (set to 1)
196   bit 1: Freq0 control (set to 1)
197   bit 0: Clock mode: 0 = Master, 1 = Autosync
198
199 On the FF400, writing to these registers with valid values for the first
200 time after power up has the side effect of extingishing the "Host" LED.
201
202
203 Device status registers
204 -----------------------
205
206 There are up to 4 read-only device status registers available, starting at
207 address 0x801c0000.  There seems to be a slight difference in the mapping of
208 status register 0 depending on the size of the read.  If only 2 registers
209 (quadlets) are read the "general" layout is assumed.  If on the other hand 4
210 registers are used (used when determining the status of the device's
211 streaming system) the layout of register 0 is slightly different.
212
213 Status register 0:
214   bit 0: on a 2-quadlet read, this indicates whether the device is streaming
215   bits 1-9: on a 2-quadlet read these bits are all zero
216   bits 9-0: on a 4-quadlet read when in autosync mode, these bits contain
217             SR/250, where SR is the sample rate to be passed to the
218             streaming subsystem when starting streaming.
219   bit 10: ADAT1 lock achieved
220   bit 11: ADAT2 lock achieved
221   bit 12: Device is synced to ADAT1
222   bit 13: Device is synced to ADAT2
223   bits 17-14: SPDIF frequency:
224     0000 = undefined    0101 = 88.2k
225     0001 = 32k          0110 = 96k
226     0010 = 44.1k        0111 = 128k
227     0011 = 48k          1000 = 176.4k
228     0100 = 64k          1001 = 192k
229   bit 18: Device is synced to SPDIF
230   bit 19: Over detected
231   bit 20: SPDIF lock achieved
232   bit 21: undefined (read as zero)
233   bits 24-22: Primary sync source:
234     000 = ADAT1         100 = Word clock
235     001 = ADAT2         101 = TCO
236     011 = SPDIF
237   bits 28-25: autosync (external) frequency (defined as for SPDIF frequency)
238   bit 29: Device is synced to word clock
239   bit 30: Word clock lock achieved
240   bit 31: undefined (read as zero)
241
242 Status register 1:
243   bit 0: master clock mode active
244   bits 21-1: undefined
245   bit 22: Device is synced to TCO
246   bit 23: TCO lock achieved
247   bits 31-24: undefined
248
249 Status register 2:
250   bits 31-0: (FF800 only) firewire iso channel used for data from FF800 to PC
251
252 Status register 3:
253   bits 31-0: unused
254
255
256 Interfacing to device flash
257 ---------------------------
258
259 To preserve the device's settings across power cycles the settings are
260 stored in a flash memory on the device.  This is read during driver
261 initialisation to ensure the driver's status agrees with that of the device.
262
263 There are several classes of things stored in flash: operational settings,
264 volumes (ie: the mixer status) and configuration/firmware.  Device settings
265 start at address 0x3000f0000 on the FF800 and 0x00060000 on the FF400.
266
267 Mixer (volume) data starts at 0x3000e0000 on the FF800 and 0x00060000 on the
268 FF400.  Mixer volumes are written in 64-quadlet (256-byte) blocks, one per
269 hardware channel.  There are 28 hardware channels for the FF800 and 18 for
270 the FF400.
271
272 There are several control groups in the mixer:
273   0xe0000 (FF800): "mixer shadow", FF800 only, meaning unclear
274   0xe2000 (FF800) / 0x70000 (FF400), 0x0800 bytes: 16-bit volume array
275   0xe2800 (FF800) / 0x70800 (FF400), 0x0800 bytes: 16-bit pan array
276   0xe3000 (FF800) / 0x71000 (FF400), 0x0040 bytes: 16-bit "vol3" array +
277     "enable MIDI" + "submix" + zero padding to 64 bytes
278 The third row are the "hardware output volumes".
279
280 The meaning of the "mixer shadow" section of the mixer flash is not
281 understood at present.
282
283
284 Reading blocks from the flash (flash command 0x2)
285
286 For the FF800 the entire buffer is read directly from flash as a single block.
287 Polling for "device not busy" should commence after a wait of 5 ms.
288
289 For the FF400, the buffer is read in 32-quadlet sub-blocks.  A partial block
290 is read at the end if the total buffer size is not a multiple of
291 32-quadlets.  To read a sub-block, the address is placed in register
292 0x80100288 and the sub-block size (in bytes) in 0x8010028c.  A 0x02 is
293 then written to CBA+(8*4) to initiate the read.  Polling for "device not
294 busy" should commence after a wait of 2 ms.  Once not busy the data is
295 available for reading from 0x80100290.
296
297
298 Writing blocks to the flash (flash command 1)
299
300 For the FF800, the entire buffer is written to flash as a single block.
301 Polling for "device not busy" should commence after a wait of 5 ms.
302
303 For the FF400, the buffer is written in 32-quadlet (128-byte) sub-blocks via
304 a bounce buffer.  If the final sub-block is not 32-quadlets the write is
305 only as big as the sub-block (that is, no padding takes place).  The
306 sub-block data to be written is sent to the block starting at 0x80100290.
307 The 2-quadlet register at 0x80100288 is set with the flash address to write
308 the block to and the size (in bytes) of the data block.  Finally, a 0x1 is
309 written to CBA+(8*4) to initiate the write.  Polling for "device not busy"
310 should commence after a wait of 2 ms.
311
312
313 Getting other data from flash
314
315 There are a few other commands issued to the flash memory system for
316 obtaining data about the connected interface:
317
318  * Device revision
319
320    On the FF800 this is read directly from register 0x200000100.
321
322    On the FF400, 0xf is written to CBA+(8*4).  Poll for "not busy" after a
323    wait of 2ms.  Once not busy the revision is read from register
324    0x80100290.
325
326
327 Erasing the flash
328
329 The flash is divided into sections and it is possible to erase each section
330 separately.  Therefore one only has to erase section of interest when
331 changing something.
332
333 On the FF400, erasure is controlled by writing a special magic number to
334 the the flash control register (CBA+8*4):
335   Erase volume: write 0xe
336   Erase settings: write 0xd
337   Erase configuration (firmware): write 0xc
338
339 On the FF800, erasing is controlled by writing 0 to the applicable register:
340   Erase volume: register is 0x3fffffff4
341   Erase settings: register is 0x3fffffff0
342   Erase firmware: register is 0x3fffffff8
343   Erase configuration: register is 0x3fffffffc
344
345 It's not clear what the distinction between "configuration" and "firmware"
346 is.  The FF400 appears to only support "configuration" but treats this as
347 "firmware".  The FF800 supports both as distinct options.
348
349 After issuing the erase command one should wait for 500 ms before polling
350 the device for the "not busy" status.
351
352
353 Waiting for flash
354
355 When interacting with the device's flash memory one must wait for the
356 completion of an operation before attempting another.  The location of the
357 "device busy" flag differs between the FF400 and FF800.
358
359 On the FF800 is part of the quadlet register at 0x801c0004 (part of the
360 read-only status register block beginning at 0x801c0000).  The device is
361 ready to accept another command when bit 30 is set.
362
363 On the FF400 the wait state is found by reading a quadlet from CBA+8*4.
364 If this quadlet is zero the FF400 is ready to accept another command.
365
366 Most device flash operations have a minimum time to complete.  There's no
367 point in polling the device busy flag until at least this much time has
368 elapsed.
369
370
371 Device settings format
372 ----------------------
373
374 The device settings are stored in flash as an array of 59 32-bit unsigned
375 integers.  These are:
376   0 - Device ID (FF400=0x77e1f4ea)
377   1 - Device revision (FF400=0x004af3d8)
378   2 - ASIO latency (FF400=0x00000001)
379   3 - Samples per frame (FF400 default is 0x30)
380   4 SPDIF input mode (2=coax?, 1=optical?)
381   5 SPDIF output emphasis active
382   6 SPDIF output is "professional" (ie: AES/EBU)
383   7 Clock mode (2=master?, 1=autosync?)
384   8 SPDIF output is non-audio (eg: AC3 passthrough)
385   9 Sync reference
386  10 SPDIF output mode (0=coax?, 1=optical?)
387  11 - Check input
388  12 - Status (FF400 idle=0x77e691d0)
389  13 - Register[4] (FF400 = 0x004adbc8,0x001377c0,0x000301ee,0x00000001)
390  17 - Iso receive channel (FF400=0x7ffde000)
391  18 - Iso transmit channel (FF400=0x77f43664)
392  19 - Timecode (FF400 example: 0x004b35c8)
393  20 - Device type (FF400=0x00000001)
394  21 - Number of devices (FF400=0x77f43664)
395  22 TMS (FF400=0x00000000)
396  23 - Speed (FF400=0x00000000)
397  24 - Channels available (high) (FF400=0x0012f2e4)
398  25 - Channels available (low) (FF400=0x00000000)
399  26 Limit bandwidth setting (0=full bandwidth)
400  27 - Bandwidth allocated (FF400=0x00000000)
401  28 Stop on dropout (FF400=0x00000000)
402  29 Input level (0=default, 1=lo-gain, 2=+4dBU, 3=-10dBV ???)
403  30 Output level (0=default, 1=hi-gain, 2=+4dBU, 3=-10dBV ???)
404  31 Mic level [0] - FF400: Phoneslevel-1
405                     FF800: Channel 7 front/rear select (0=rear, 1=front [TBC])
406  32 Mic level [1] - FF400: unused
407                     FF800: Channel 8 front/rear select (0=rear, 1=front [TBC])
408  33 Mic phantom power [4]
409  37 Instrument - FF400: unused
410                  FF800: Channel 1 front/rear selector (0=rear, 1=font [TBC])
411  38 Filter (aka speaker emulation)
412  39 Fuzz (aka drive)
413  40 - Sync align
414  41 - Device index (FF400=0x77e24d0d)
415  42 - Advanced dialog (FF400=0x000201f8) [but might be related to TCO control)
416  43 Sample rate (eg: 0x0000ac44) [set to 0x00000000 unless DDS enabled]
417  44 - Interleaved (FF400=0x00000000)
418  45 - Sn (FF400=0x77e14925)
419  46 Word clock single speed (1=single speed)
420  47 - Number of channels (FF400=0x000000f0)
421  48 - Dropped samples
422  49 p12db_an[0] - Disable limiter, settable only if channel 1 front jack active
423  50 - p12db_an[1-9]
424
425 "-" = elements not used (under MacOSX at least)
426
427 Total size: 59 quadlets
428
429 The default state of these quadlets is 0xffffffff, which is taken to
430 indicate that the respective setting has not been written to flash. This in
431 turn causes the driver to assume its own default value.  While these
432 settings can be changed in real time by writing to the relevant control
433 registers, these are not persistent across device power cycles.  To make
434 them persistent it is necessary to store them into the flash.
435
436
437 TCO (TimeCode Option)
438 ---------------------
439
440 The TCO is an optional card for the FF800 which adds video timecode
441 generation and clock locking capabilities to the FF800.  It is controlled by
442 writing a block of 4 quadlets to register 0x810f0020 while its status can be
443 retrieved by reading a block of 4 quadlets from register 0x801f0000.
444
445 The configuration space is as follows.
446
447 Quadlet 0 (written to register 0x810f0020):
448   bit 31: MTC active if set to 1
449   bits 30-0: reserved (equal zero)
450
451 Quadlet 1 (written to register 0x810f0024):
452   bits 31-12: reserved (equal to zero)
453   bits 11-10: LTC format (00=24fps, 01=25fps, 10=29.97fps, 11=30fps)
454   bit 9: dropframe active
455   bit 8: set timecode request
456   bit 7: reserved (set to 0)
457   bit 6: PAL format video input
458   bit 5: NTSC format video input
459   bit 4-3: reserved (set to 0)
460   bits 2-1: word clock input rate (00=1x, 01=2x, 10=4x)
461   bit 0: reserved (set to 0)
462
463 Quadlet 2 (written to register 0x810f0028):
464   bit 31: set sampling frequency from application
465   bits 30-29: input select (00=wordclock, 01=video, 10=LTC)
466   bit 28: input termination active
467   bit 27: Base frequency (0=44.1 kHz, 1=48 kHz)
468   bit 26: Pull up flag
469   bit 25: Pull down flag
470   bit 24: Pull up/down amount (0=0.1%, 1=4.0%)
471   bit 23: reserved (set to 0)
472   bit 22: Flywheel select
473   bit 21: Jam sync select
474   bits 20-19: dropframes select (unused, set to 0)
475   bits 18-17: word clock conversion (00=1:1, 01=44.1->48, 10=48->44.1)
476   bit 16: set TC run
477   bits 15-0: reserved, set to 0.
478
479 Quadlet 3:
480   bits 31-0: reserved, set to 0
481
482 The 4 quadlets returned by a TCO status query are mapped as follows.
483
484 Quadlet 0:
485   bit 31: set to 1
486   bits 30-24: LTC, hours field in BCD(*)
487   bit 23: set to 1
488   bits 22-16: LTC, minutes field in BCD
489   bit 15: set to 1
490   bits 14-8: LTC, seconds field in BCD
491   bit 7: set to 1
492   bits 6-0: LTC, frames field in BCD
493
494 Quadlet 1:
495   bit 31: set to 1
496   bits 30-24: reserved (equal to zero)
497   bit 23: set to 1
498   bits 22-16: reserved (equal to zero)
499   bit 15: set to 1
500   bits 14-12: reserved (equal to zero)
501   bits 11-10: LTC format (00=24fps, 01=25fps, 10=29.97fps, 11=30fps)
502   bit 9: dropframe active
503   bit 8: reserved (read as zeros)
504   bit 7: set to 1
505   bit 6: PAL format video input
506   bit 5: NTSC format video input
507   bit 4: Word clock input valid (0=invalid, 1=valid)
508   bit 3: LTC input valid (0=invalid, 1=valid)
509   bits 2-1: reserved (read as zeros)
510   bit 0: TCO lock flag (0=no lock, 1=locked)
511
512 Quadlet 2
513   bit 31: set to 1
514   bits 30-24: reserved (equal to zero)
515   bit 23: set to 1
516   bits 22-16: reserved (equal to zero)
517   bit 15: set to 1
518   bits 14-8: upper 7 bits of PLL phase
519   bit 7: set to 1
520   bits 6-0: the lower 7 bits of the PLL phase
521
522 Quadlet 3:
523   bit 31: set to 1
524   bits 30-16: reserved
525   bit 15: set to 1
526   bits 14-0: set to 0
527
528 Notes:
529  (*) BCD is Binary Coded Decimal.  The high nibble (which is only 3 bits in
530      these cases) contains the "tens" digit while the lower nibble contains
531      the "units" digit.
532
533 The calculation of the PLL phase from quadlet 2 (q2) is as follows:
534
535   phase = (q2 & 0x7f) + ((q2 & 0x7f00) >> 1)
536
537 which then allows the incoming frequency to be calculated using
538
539   freq = (25000000 * 16) / phase
540
541 To detect the presence of a TCO in a FF800, read the 4 TCO status quadlets.
542 If a TCO is present:
543   - bits 31, 23, 15 and 7 in quadlets 0, 1 and 2 will be 1, AND
544   - bits 31 and 15 in quadlet 3 will be 1, AND
545   - bits 14 to 0 in quadlet 3 will be 0
546
547
548 Streaming control registers
549 ---------------------------
550
551 There appears to be a number of registers involved in the setup of device
552 streaming.
553
554 Device (streaming) initialisation register (FF800: 0x20000001c, FF400: CBA)
555
556 This register comprises the 3 quadlets starting at address 0x20000001c on
557 the FF800 and the CBA on the FF400.  The first quadlet contains the sample
558 rate in Hz.  The second quadlet is mapped as follows:
559   bits 31-11 = number of audio channels
560   bits 10-0  = iso tx channel (PC to interface)
561 In all local tests with a FF800 the value of this quadlet was always equal
562 to 0x0000e000 (28 channels, PC transmits on iso channel 0).
563
564 The third quadlet is mapped as follows.
565   bits 10-0 = number of audio channels
566   bit 11    = speed flag; set to 1 if firewire bus is at 800 Mbps
567 In local tests with a FF800 the value of this register was always 0x0000001c
568 (28 channels, 400 Mbps firewire bus).
569
570 After this register is configured, 4 quadlets are read starting from
571 0x801c0000.  The numbers returned don't appear to bear any relationship to
572 those written to this same location later on.
573
574 Device (streaming) start register (FF800: 0x200000028, FF400: CBA+0x1c):
575
576 The start of streaming differs between the FF400 and FF800 in more than just
577 the address of the relevant register.  On the FF800 this register is mapped
578 as follows:
579   bits 10-0 = number of audio channels
580   bit 11    = bus speed flag; set to 1 if firewire bus is at 800 Mbps
581 On a FF400 the register is as follows:
582   bits 4-0  = number of audio channels
583   bits 9-5  = iso tx channel (PC to interface)
584 During initial testing with a FF800 the value of this register was always
585 0x0000001c (28 audio channels, PC tx on iso channel 0).
586
587 Channel mute setup register (write to 0x801c0000):
588
589 After writing to the streaming start register, 0x70 bytes (28 quadlets) are
590 written starting at 0x801c0000.  Each quadlet represents one channel on the
591 Fireface800.  A value of 1 mutes the respective channel - indeed on closing
592 down streaming each quadlet is set to 1.  During startup some values are set
593 to zero - the ones set to zero may be determined by the channels which have
594 active software data sources although this is yet to be confirmed with more
595 testing.  Irrespective of the setting of these registers it appears that
596 data for all channels is always sent to/from the Fireface-800.
597
598 Note that when register 0x801c0000 is read it functions as the device status
599 register.  It is read during streaming setup, but obviously it bears no
600 relationship to the channel mute status.
601
602 Streaming end register (FF800: 0x200000034, FF400: CBA+0x4):
603
604 On the FF800, streaming is stopped by writing 3 zeroed quadlets to
605 consecutive registers starting at address 0x200000034.  For the FF400 one
606 writes 3 zeroed quadlets to consecutive registers from CBA+0x4, followed
607 by a 0x00000001 to CBA+0x10 (making a 4-quadlet write in total).
608
609
610 Iso data
611 --------
612
613 Audio/midi data is sent and received on isochronous channels previously
614 configured by the driver.  On a dedicated bus with nothing else present, the
615 stream to the fireface is sent on iso channel 0 while data from the fireface
616 is sent on iso channel 1.
617
618 No CIP header is included in the iso data packet.  Fireface data follows
619 immediately after the standard 2-quadlet firewire iso packet header.
620
621 Each iso packet contains a number of samples across all 28 device channels.
622 For 1x rates, 7 samples per channel seem to be sent.  Thus the size of
623 the data portion of a 1x iso packet is 28*4*7 = 784, with a total packet
624 size being 784 + 8 = 792.
625
626 The data is sent with one audio channel per quadlet.  The audio data is a 24
627 bit integer stored in the most-significant 3 bytes of a quadlet.  The LSB
628 (low byte) of certain channels in the stream sent by the Fireface is used to
629 send synchronising information:
630
631   Low byte of channel 6 = current frame
632   Low byte of channel 7 = phase
633   Low byte of channel 1 = rx sample counter, low byte
634   Low byte of channel 4 = rx sample counter, high byte
635   Low byte of channel 0 = tx buffer size, low byte
636   Low byte of channel 5 = tx buffer size, high byte
637   Low byte of channel 2 & 3 = unknown (midi?)
638
639 The low byte data from channels 0-7 is repeated in channels 8-15 and 16-23
640 respectively, with channels 24-27 containing the low byte data from channels
641 0-3.  This repetition holds for the low bytes of channels 2-3 in all data
642 seen so far, it might not necessarily be the case in general - it depends
643 what the low byte data from channels 2 and 3 are used for.
644
645 The rx sample counter appears to be used to detect missed samples.  The
646 current frame and phase from a received packet is used in conjunction with
647 the stored values of these from the previous frame to track the phase of
648 the audio clock.
649
650 A "frame" consists of a fixed number of samples across all channels of the
651 device.  At 1x rates this appears to be 7, but it might not be fixed.  Even
652 though this is the same as the number of samples per channel per packet, a
653 given packet can experience a change in the "current frame" part way
654 through.  In other words, the "current frame" is not necessarily constant
655 for all samples in a packet.
656
657
658 Input preamp / output amp gain control
659 --------------------------------------
660
661 On the Fireface-400 the gain of the mic/instrument preamps and output
662 amplifiers can be set.  Mic channel gain is in steps of 1 dB from 10 dB up to
663 65 dB, with 0dB also available.  Instrument input gain ranges from 0 dB to
664 18 dB in 0.5 dB steps.  Output gains range from +6 dB down to -58 dB in
665 steps of 1 dB, with compete "mute" also available.
666
667 The gains are set using the register at 0x801c0180.
668
669   bits 31-24:
670   bits 23-16: channel being set (0=mic1, 1=mic2, 2=inst3, 4=inst4)
671   bits 15-8:
672   bits 7-0: the gain value
673
674 For mic channels the gain value is the dB value.  For instrument channels, a
675 value of 2G is written for a gain value of G (thereby allowing a stepsize of
676 0.5 dB).  For output gain, 0 = +6 dB, 0x3b = -53 dB, 0x3f = mute.
677
678 The definition of the "channel being set" is as follows.
679   0 = mic input 1 gain
680   1 = mic input 2 gain
681   2 = instrument input 3 gain
682   3 = instrument input 4 gain
683   4-9 = analog outputs 1-6 level
684   10-11 = phones output level
685   12-13 = SPDIF output level
686   14-21 = ADAT outputs 1-8 level
687
688
689 Firefice-400 mixer controls
690 ---------------------------
691
692 The Fireface-400 matrix mixer is controlled using a block of registers
693 starting at 0x80080000.  An 18x18 matrix mixer is implemented allowing any
694 hardware input to be sent to any device output.  Pan control is effected by
695 manipulating the "left/right" controls within an output pair.
696
697 For each input channel block the order of channels is Analog 1-8, SPDIF 1-2,
698 ADAT 1-8.
699
700 0x80080000 - 0x80080044: input channel sends to Analog 1 output.
701 0x80080048 - 0x8008008c: playback channel sends to Analog 1 output.
702 0x80080090 - 0x800800d4: input channel sends to Analog 2 output.
703 0x800800d8 - 0x8008011c: playback channel sends to Analog 2 output.
704 :
705 0x80080990 - 0x800809d4: input channel sends to ADAT 8 output.
706 0x800809d8 - 0x80080a1c: playback channel sends to ADAT 8 output.
707
708 0x80080f80: matrix mixer analog 1 output fader
709 0x80080f84: matrix mixer analog 2 output fader
710 :
711 0x80080fc4: matrix mixer ADAT 8 output fader
712
713 Each fader control ranges from 0x00000000 (-inf) through 0x00008000 (0.0 dB)
714 up to a maximum of 0x00100000 (+6.0 dB).  The precise scale is still to be
715 worked out: -52.7 dB appears to correspond to a value of 0x0000004c, -46.6 dB
716 is 0x00000099.
717
718 When setting the output fader controls, the associated output amplifier
719 gain control (see previous section) are generally kept in sync.  That is, if
720 register 0x80080f80 (analog 1 output fader) is set to 0 dB, so is the analog
721 output 1 level via register 0x801c0180.
722
723
724 Fireface-800 mixer controls
725 ---------------------------
726
727 The matrix mixer on the Fireface-800 is controlled using a block of
728 registers starting at 0x80080000.  A 28x28 matrix mixer is implemented
729 allowing any device input to be sent to any device output.  The pan controls
730 are synthesised by manipulating the "left/right" controls.
731
732 In each sub-block, the order of channels is in fireface numeric order.  That
733 is, Analog 1-10, SPDIF, ADAT1 1-8, ADAT2 1-8.
734
735 0x80080000 - 0x8008006c: input channel sends to Analog 1 output.
736 0x80080080 - 0x800800ec: playback channel sends to Analog 1 output.
737 0x80080100 - 0x8008016c: input channel sends to Analog 2 output.
738 0x80080180 - 0x800801ec: playback channel sends to Analog 2 output.
739 :
740 0x80081b00 - 0x80081b6c: input channel sends to ADAT2-8 output.
741 0x80081b80 - 0x80081bec: playback channel sends to ADAT2-8 output.
742
743 0x80081f80: matrix mixer analog 1 output fader
744 0x80081f84: matrix mixer analog 2 output fader
745 :
746 0x80081fec: maxtrix mixer ADAT2-8 output fader
747
748 Each fader control ranges from 0x00000000 (-inf) through 0x00008000 (0.0dB)
749 and up to a maximum setting of 0x00010000 (+6.5dB).
750
751 Mute is synthesised by setting the respective send value to -inf (0).
752 Conversely, solo is synthesised by muting all sends to the selected bus
753 except the send being soloed.
754
755 Note that a different scale is used when writing mixer settings into flash.
756 Fader values are stored as 16 bit numbers, with 803 (0x0323) seemingly
757 representing 0 dB.  Other details of the scale used are still to be deduced.
758
759
760 Metering values
761 ---------------
762
763 The Fireface-800 appears to provide hardware support for metering.  The RME
764 mixer application periodically sends block read requests for register
765 0x80100000 with a size of 0x3f8.  What is returned is a set of two
766 datablocks with data in little-endian (least significant bit/word first)
767 format.  The first block contains arrays of 64-bit floating point numbers
768 representing channel amplitude with decay, presumedly useful for metering
769 display.  Arrays are:
770
771   28-element array for input channel amplitude with decay
772   28-element array for playback amplitudes with decay (educated guess)
773   28-element array for output amplitudes with decay
774
775 The second data block contains signed 32 bit integers representing the input
776 amplitudes without decay.  Valid range is 0 - 0x7ffffff.  Again there are 3
777 arrays:
778
779   28-element array for input channel ampltude
780   28-element array for playback amplitudes (educated guess)
781   28-element array for output amplitudes
782
783 At the end of this second block are two zero quadlets.  Their purpose is
784 unknown at this stage.
785
786 In each 28-element array the channel data appears in standard fireface
787 order.
788
789
790 Host LED
791 --------
792
793 The "host" LED of the FF800 is controlled by a dedicated register at
794 0x200000324.  Note that this register address goes beyond the 32-bit
795 boundary.
796
797 On the FF400 the host LED is controlled internally.  On power up it is
798 turned on.  Once the host PC programs the configuration registers with
799 valid values the host LED will automatically turn off.
Note: See TracBrowser for help on using the browser.