Note: This driver supersedes an older one of the same name, address and ID which required replacing the original kernel audio driver with another which works only on older Sun SPARCstation systems. The new driver described here uses the stock kernel audio driver and works in SunOS 4.1.3 and Solaris 2.6 versions and probably all versions in between. The new driver requires no modification of the operating system. While it is generic and portable to other systems, it is somewhat slower than the original, since the extensive signal conditioning, filtering and decoding is done in user space, not the kernel.
The IRIG signal format uses an amplitude-modulated carrier with pulse-width modulated data bits. For IRIG-B, the carrier frequency is 1000 Hz and bit rate 100 b/s; for IRIG-E, the carrier frequenchy is 100 Hz and bit rate 10 b/s. While IRIG-B provides the best accuracy, generally within a few tens of microseconds relative to IRIG time, it can also generate a significant load on the processor with older workstations. Generally, the accuracy with IRIG-E is about ten times worse than IRIG-B, but the processor load is ten times less.
The program processes 8000-Hz mu-law companded samples using a comb filter, envelope detector and automatic threshold corrector. Cycle crossings relative to the corrected slice level determine the width of each pulse and its value - zero, one or position identifier. The data encode 20 BCD digits which determine the second, minute, hour and day of the year and sometimes the year and synchronization condition. The comb filter exponentially averages the corresponding samples of successive baud intervals in order to reliably identify the reference carrier cycle. A type-II phase-lock loop (PLL) performas additional integration and interpolation to accurately determine the zero crossing of that cycle, which determines the reference timestamp. A pulse-width discriminator demodulates the data pulses, which are then encoded as the BCD digits of the timecode.
The timecode and reference timestamp are updated once each second with IRIG-B (ten seconds with IRIG-E) and local clock offset samples saved for later processing. At poll intervals of 64 s, the saved samples are processed by a trimmed-mean filter and used to update the system clock. In order to assure reliable capture, the decompanded input signal amplitude must be greater than 100 units and the codec sample frequency error less than 250 PPM (.025 percent). An automatic gain control feature provides protection against overdriven or underdriven input signal amplitudes. The program performs a number of error checks to protect against overdriven or underdriven input signal levels, incorrect signal format or improper hardware configuration. Specifically, if any of the following errors occur for a timecode, the data are rejected.
Unlike other drivers, which can have multiple instantiations, this one supports only one. It does not seem likely that more than one audio codec would be useful in a single machine. More than one would probably chew up too much CPU time anyway.
Where feasible, the IRIG signal source should be operated with signature
control so that, if the signal is lost or mutilated, the source produces
an unmodulated signal, rather than possibly random digits. The driver will
automatically reject the data and declare itself unsynchronized in this
case. Some devices, in particular Spectracom radio/satellite clocks, provide
additional year and status indication in the format:
Element CF Function
55 6 time sync status
60-63 10-13 BCD year units
65-68 15-18 BCD year tens
Other devices set these elements to zero.
The accuracy of the system clock synchronized to the IRIG-B source with this driver and the ntpd daemon is 10-20 microseconds with a Sun UltraSPARC II and maybe twice that with a Sun SPARC IPC. The processor resources consumed by the daemon can be significant, ranging from about 1.2 percent on the faster UltraSPARC II to 38 percent on the slower SPARC IPC. However, the overall timing accuracy is limited by the resolution and stability of the CPU clock oscillator and the interval between clock corrections, which is 64 s with this driver. This performance, while probably the best that can be achieved by the daemon itself, can be improved with assist from the PPS discipline as described elsewhere in the documentation.
00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5 3094572411.00027The first field containes the error flags in hex, where the hex bits are interpreted as below. This is followed by the IRIG status indicator, year of century, day of year and time of day. The status indicator and year are not produced by some IRIG devices. Following these fields are the signal amplitude (0-8100), codec gain (0-255), field phase (0-79), time constant (2-20), modulation index (0-1), carrier phase error (0+-0.5) and carrier frequency error (PPM). The last field is the on-time timestamp in NTP format. The fraction part is a good indicator of how well the driver is doing. With an UltrSPARC 30, this is normally within a few tens of microseconds relative to the IRIG-B signal and within a few hundred microseconds with IRIG-E.
The modes are selected with the server command as described elsewhere in the documentation. The available selections are:
Reference Clock Drivers