21
7.1.f – TX ACK Advance
Data ushing: Somemes, an applicaon will issue a “transmit ush” command to the adapter to get rid of extra data.
For example, let’s say an applicaon sends “AAAA” to the adapter, and then, once it’s received the “I’m done” indicaon
sends “BBBB.” Now, let’s say that someme aer sending “BBBB,” the applicaon decides to cancel whatever part of
the ‘BBBB” has yet to leave the serial port, and sends a “transmit ush” command to the adapter. If the adapter had
been lying about being done sending “”AAAA,” it might sll not be done, and the ush could purge the transmit FIFO
of some of the A’s (which is not what the applicaon was expecng) in addion to the B’s.
Timing: In some applicaons, the receipt of the “I’m done” indicaon is used as a ming reference point. For example,
an applicaon could send a data stream like this:
COMMAND…………………………………………………….
The extra periods following COMMAND would be just used to establish a ming interval: the applicaon would know
that once the serial port said “I’m done,” the receiver would have had at least 64 character mes to process COMMAND.
If the “I’m done” indicaon was sent early, the applicaon might then do it’s subsequently acon too early.
Another possibility is that the applicaon is using the ming of the “I’m done” message to determine the baud rate. For
example, if the serial port was using external clocking, the applicaon might not know what baud rate was being used,
so it would send a message and see how long it took. The early delivery of “I’m done” could screw up its calculaon.
There are many other communicaon protocols in which me periods are counted from the point that message has
been delivered. Any me you change the ming of the “I’m done” indicaon, you run the risk if interfering with such
protocols.
What Should I Use?
There are various way to congure Tx Ack Advance. Following is a discussion of some possibilies:
None: If you’re using a baud rate of 9600 or less, you probably don’t have a problem. The 1 millisecond delay will not
signicantly aect your throughput, and you can select this opon. This opon is also a good choice if you are running
an applicaon in which throughput is not an issue, or one in which guaranteeing 100% correct operaon is important
enough that you’d prefer not to risk having problems.
Auto: The ‘Auto” seng uses that calculaon described above when internal clocking is used and sets the Tx Ack
Advance to “None” when external clocking is used (this is because the host doesn’t know the baud rate when the
clocking is supplied externally).
Experiment: If you’re using a baud rate above 9600, you can simply try increasing the Tx Ack Advance seng, and
see whether it improves performance 9in which case, great!), causes problems (in which case, don’t use it) or doesn’t
make any dierence (in which case it doesn’t maer what you do).