Audio Codec '97

AC97 Component Specification Revision 2.3 Rev 1.0
19
3. Controller, Codec, and AC-link
This section describes the physical and high-level functional aspects of the AC ‘97 Controller to Codec interface,
referred to as AC-link. For a detailed description of AC-link protocols, slot and bit assignments, refer to Section 4.
3.1 AC-link Physical interface
The AC ‘97 Codec communicates with its companion Digital Controller via the AC-link digital serial interface.
AC-link has been defined to support connections between a single Controller and up to four Codecs. All digital
audio, modem, and handset data streams, as well as all control (command/status) information are communicated
over this serial interconnect, which consists of a clock (BIT_CLK), frame synchronization (SYNC), serial data in
(SDATA_IN), serial data out (SDATA_OUT), and a reset (RESET#).
3.2 Controller to Single Codec
The simplest and most common AC ‘97 system configuration is a point-to-point AC-link connection between
Controller and Codec, as illustrated in Figure 6.
SYNC
BIT_CLK
SDATA_OUT
AC '97 Codec
(Primary)
AC '97 Controller
RESET#
SDATA_IN
Figure 6. Controller to Codec connections
A primary codec may act as either a source or a consumer of the bit clock, depending on the configuration.
While RESET# is asserted, if a clock is present at the BIT_CLK pin for at least five cycles before RESET# is de-
asserted, then the codec is a consumer of BIT_CLK, and must not drive BIT_CLK when RESET# is de-asserted.
The clock is being provided by other than the primary codec, for instance by the controller or an independent clock
chip. In this case the primary codec must act as a consumer of the BIT_CLK signal as if it were a secondary codec.
This clock source detection must be done each time the RESET# line is asserted. In the case of a warm reset, where
the clock is halted but RESET# is not asserted, the codec must remember the clock source, and not begin generating
the clock on the assertion of SYNC if the codec had previously determined that it was a consumer of BIT_CLK.