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

Revision 1596, 28.1 kB (checked in by jwoithe, 14 years ago)

RME:

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