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. |
---|