![]() |
|
Product Registration | Knowledge Base | Software Downloads | Support Documents Knowledge Base Search Keywords | Search Text | Index by Description | Index by Tip ID |
|
16650 UARTs 16650 UARTs PROBLEM The readme file says that 16650 UARTs are not supported in Serialtest or SerialBERT. What exactly is the problem with these UARTs? ("UART" stands for "Universal Asynchronous Receiver Transmitter" and is the chip used in serial ports.) SOLUTION You can use Serialtest Spy, Serialtest MLT and SerialBERT successfully with a 16650 UART. You can also use Serialtest Async with a 16650 UART when monitoring or transmitting in single port mode (that is, using only one port on the PC to monitor or transmit data.) The problem occurs when using two ports with Serialtest Async to monitor data on both sides of a circuit (what Serialtest calls "Monitor DTE and DCE" mode in the Set I/O Configuration window.) When monitoring through two ports, Serialtest depends on receiving an interrupt from the port every time a byte of data comes in. This ensures that Serialtest collects the data immediately so that it is timestamped accurately and is placed in the capture buffer in the correct order. Many UARTs, including 16550s and 16650s, use FIFO (first in, first out) buffers to store data. Normally the port holds data until a specified amount of data (often 8 bytes) has come in or a certain amount of time has passed before generating an interrupt. This allows the central processor more time for other tasks, because it is not always having to stop what it is doing to collect one byte of data from the serial port. To ensure that Serialtest receives an interrupt every time a byte comes in, Serialtest issues a command to the UART telling it to generate an interrupt every time a byte is received. On 16550 UARTs, this command works as expected. On 16650 UARTs, the same command tells the UART to generate an interrupt after 8 bytes of data have come in. This means that Serialtest does not know immediately that data has been received. Once Serialtest receives the interrupt, it collects the data from the UART, but if data is arriving on both ports simultaneously, the data can be processed out of order. For example, say that "AB" is received on Com 1, but an interrupt is not generated right away. Then "C" is received on Com 2, but again no interrupt is immediately generated. At some point in the future when an interrupt is generated, Serialtest collects the data in a round-robin fashion, and so would show "ACB" instead of "ABC". If you are using only one port on the PC, as you do with Serialtest Spy and MLT, and with SerialBERT Async, having data stored in the FIFO buffer is not as much of an issue. The data will be displayed in the correct order since it is only coming in one port. The timestamping of the data will not be completely accurate because of the delay in collecting the data, but the timestamps will still be very close. So you should be able to use 16650 UARTs with these products successfully. If you need to monitor both sides of a circuit with Serialtest Async, then you can use 16650 UARTs if the order of the data is not critical for your purposes. No data is lost when using 16650 UARTs, it simply may not appear in the correct order. Again, the timestamps will not be completely accurate because of the delay in collecting data, but will be very close.
|