6–3
6.3.2
TAS3004 I2C Readback Example
The TAS3004 will save in a Stack or First-In First-Out (FIFO) buffer the last 7 bytes that were sent to it. When an I2C
read command is sent to the device (LSB=high), it answers by popping the first byte off the stack. The TAS3004 will
then expect either a SendAck command or an I2C Stop command from the host. If a SendAck command is sent from
the host then the TAS3004 will pop another byte off the stack. If an I2C Stop is sent then the TAS3004 will end this
transaction. The proper sequence for reading is described as follows:
I2C Start
Send I2C address byte with read Bit Set to 1 (LSB set equal to 1)
receive Byte 0
Send Ack
receive Byte 1
Send Ack
receive Byte 2
Send Ack
receive Byte 3
Send Ack
receive Byte 4
Send Ack
receive Byte 5
Send Ack
receive Byte 6 (if you send an ACK after Byte 6 it will lock up the TAS3004)
I2C Stop
Where:
I2C Start is a valid I2C Start Command
Receive Byte is a valid I2C Command which reads a byte from the TAS3004.
SendAck is a avalid I2C Command that informs the TAS3004 that a byte has been read.
I2C Stop is a valid I2C Stop Command
NOTES:
1. The TAS3004 will appear to be locked up, if a SendACK is issued after the last byte read. It is required to send an I2C Stop Condition
after the last byte and not a SendACK.
2. The I2Cstart and I2Cstop commands are the same for both I2C read and I2C write.
6.3.3
I2C Wait States
The TAS3004 device performs interpolation algorithms for its volume and tone controls. If a volume or tone change
is sent to the part via I2C, the command sent after the volume or tone (bass and treble) change causes an I2C wait
state to occur. This wait state lasts from 41 ms to 231 ms, depending on the system clock rate, the command sent,
and, in the case of bass or treble, the amount of the change.
Secondly, if a long series of commands are sent to the TAS3004 device, it may occasionally create a short wait state
on the order of 150
s to 300 s while it loads and processes the commands.
When a sample rate of 32 kHz is used, longer wait states can occur, occasionally up to 15 ms.
The preferred way to take care of wait states is to use an I2C controller that recognizes wait states. During the wait
state period, it stops sending data over I2C. If this function is not available on the system controller, fixed delays can
be implemented in the system software to ensure that the controller is not trying to send more data while the TAS3004
device is busy. Sending I2C data while the TAS3004 device is busy causes errors and locks up the device, which must
then be reset.