2 About the driver ...................................................................................................................................... 1
3 Installing the driver ................................................................................................................................. 1
4 Further information ................................................................................................................................ 1
5 Legal information ................................................................................................................................... 2
3 Get Single mode ..................................................................................................................................... 6
3 API functions .................................................................................................................... 11
1 All modes .............................................................................................................................................. 12
The USB TC-08 is a temperature and voltage logger that can monitor up to eight thermocouples. With the
accompanying PicoLog software, the unit can be used with any laptop or PC. If you wish to tailor the product
to a particular application, you can write your own programs with the supplied driver. All software runs on
Windows 7, 8 and 10.
The driver provides cold junction compensation for thermocouples. PicoLog supports up to 20 USB TC-08
devices and the driver can support as many as 64, subject to the capabilities of your PC.
1.2About the driver
The USB TC-08 is supplied with driver routines that you can build into your own programs. A selection of
code examples is available from repositories under the "picotech" organization in GitHub:
The driver function is supplied as a Windows DLL. The DLL uses the C stdcall calling convention and can
be used with a number of different programs. It can also be used with programs like Microsoft Excel, where
the macro language is a form of Visual Basic for Applications, and with all .NET languages. The DLL is
available in 32-bit and 64-bit versions.
1.3Installing the driver
The driver is installed automatically when you install the PicoLog software. Alternatively, you can download a
PicoSDK containing either the 32-bit or the 64-bit driver from www.picotech.com/downloads.
1.4Further information
For more information on the data logger and how to use it, please refer to the USB TC-08 User's Guide.
For information on the PicoLog software supplied with the data logger, refer to the PicoLog User's Guide.
The material contained in this release is licensed, not sold. Pico Technology Limited grants a license to the
person who installs this software, subject to the conditions listed below.
Access. The licensee agrees to allow access to this software only to persons who have been informed of
these conditions and agree to abide by them.
Usage. The software in this release is for use only with Pico products or with data collected using Pico
products.
Copyright. Pico Technology Ltd. claims the copyright of, and retains the rights to, all material (software,
documents, etc.) contained in this SDK except the example programs. You may copy and distribute the SDK
without restriction, as long as you do not remove any Pico Technology copyright statements. The example
programs in the SDK may be modified, copied and distributed for the purpose of developing programs to
collect data using Pico products.
Liability. Pico Technology and its agents shall not be liable for any loss, damage or injury, howsoever
caused, related to the use of Pico Technology equipment or software, unless excluded by statute.
Fitness for purpose. As no two applications are the same, Pico Technology cannot guarantee that its
equipment or software is suitable for a given application. It is your responsibility, therefore, to ensure that
the product is suitable for your application.
Mission-critical applications. This software is intended for use on a computer that may be running other
software products. For this reason, one of the conditions of the license is that it excludes use in missioncritical applications, for example life support systems.
Viruses. This software was continuously monitored for viruses during production, but you are responsible
for virus-checking the software once it is installed.
Support. If you are dissatisfied with the performance of this software, please contact our technical support
staff, who will try to fix the problem within a reasonable time. If you are still dissatisfied, please return the
product and software to your supplier within 14 days of purchase for a full refund.
Upgrades. We provide upgrades, free of charge, from our web site at www.picotech.com. We reserve the
right to charge for updates or replacements sent out on physical media.
1.6Trademarks
Pico Technology and PicoLog are trademarks of Pico Technology Limited, registered in the United Kingdom
and other countries.
PicoLog and Pico Technology are registered in the U.S. Patent and Trademark Office.
Windows, Excel and Visual Basic for Applications are registered trademarks of Microsoft Corporation in the
Streaming mode is an operational mode in which the USB TC-08 unit samples data and returns it to the
computer in an unbroken sequence, using the onboard clock to ensure accurate timing.
The unit can buffer up to two sets of readings at once. To avoid loss of readings, make sure that other
applications on the PC - including the one you are writing - do not prevent the driver from collecting readings
for more than three sampling intervals.
To allow the driver to sample continuously, call the Windows Sleep function in any sampling loops (see
example below) to make sure that your application does not use too much processor time.
Hint: Try not to use a Sleep call for less than 50 to 100 milliseconds, i.e. Sleep(50) to Sleep(100). If
you are programming a Windows GUI application, a good alternative to sampling loops is the WM_TIMER
message.
Fragment of a C application demonstrating how to use streaming mode with the USB TC-08 driver:
//==================================================
// Setting up and running the unit in streaming mode
//==================================================
usb_tc08_set_mains(handle,0);// use 50 Hz mains noise rejection
for (channel=0;channel<USBTC08_MAX_CHANNELS+1;channel++)
{
// Set each channel up as a type K thermocouple.
// Channel 0 is the cold junction and will be enabled
// by setting the third argument to anything other than ' '
usb_tc08_set_channel(handle,channel,'K');
}
// Find out how fast the unit can sample in its current setup state
usb_tc08_run(handle,minimum_interval);// sample as fast as possible
// Not required (just illustrates that the application
// can be idle while the driver collects the readings)
Sleep(10000);
// Use a two dimensional array with an array of readings for each channel
// In a real application, this would be a nested loop to regularly poll
// the unit for readings
for (channel=0;channel<USBTC08_MAX_CHANNELS+1;channel++)
0,// degrees Celsius units
0// do not fill missing readings
);
}
// Finished polling, now do something with the readings. If overflows[channel]
// is high, one of the readings in reading_buffer[channel] has exceeded the
// input range of the USB TC-08. Stop the unit only when you have completely
// finished streaming.
usb_tc08_stop(handle);
Note: You should close down all other applications while you are performing any timing-critical data logging
tasks. Check that the Windows scheduler does not have any activities planned during the logging session.
Get Single mode is an operational mode in which readings are produced on demand, using the
usb_tc08_get_single function. Since the function relies entirely on the timing of the calling application, it is
ideal for time intervals greater than 1 minute. If high-speed sampling is required, use Streaming mode.
Note: The function call overhead can be significant, since it takes approximately 900 ms to convert all 9
channels at 100 ms per channel. To reduce this overhead, disable channels that are not required.
A fragment of a C application demonstrating how to use Get Single mode with the USB TC-08 driver:
//========================================================
// Setting up and converting readings with Get Single mode
//========================================================
usb_tc08_set_mains(handle,0);// use 50Hz mains noise rejection
for (channel=0;channel<USBTC08_MAX_CHANNELS+1;channel++)
{
// Set each channel up as a type K thermocouple
// Channel 0 is the cold junction and will be enabled
// by setting the third argument to anything other than ' '
usb_tc08_set_channel(handle,channel,'K');
}
// Find out the approximate conversion time for a call to
// usb_tc08_get_single
Legacy mode is designed to aid developers who have already written code for the serial version of the TC-08
and are not yet ready to rewrite their code for the Streaming or Get Single modes available with the USB
version. The legacy support is going to be phased out and will eventually be removed from the driver
altogether. If you want full support in the future, use the Streaming or Get Single modes.
To allow code to be easily developed for both the serial version and the USB version of the TC-08, all the
function names have been changed. The usb_tc08_legacy_set_channel function no longer supports
offset and gain - this is now stored only as calibration information in the unit itself. The legacy routines will
be familiar if you previously used the serial TC-08, but the following changes should be made to convert
legacy applications:
·
Reference the new Header file
·
Reference the new Library file
·
Place the new DLL in the directory of the application
·
Set the mains frequency
·
Run and stop the unit
·
Store a handle returned from usb_tc08_open_unit instead of using the serial port number
The following code is a fragment of a C application demonstrating how to use legacy mode with the USB TC08 driver:
//==========================================================
// Setting up and running the unit in Legacy mode
// This is designed to make it easier to adapt code written
// for the Serial TC08 for use with the USB TC-08
//==========================================================
usb_tc08_set_mains(handle,0);// Use 50Hz mains noise rejection
for (channel=1;channel<USBTC08_MAX_CHANNELS+1;channel++)
{
// Set each channel up as a type K thermocouple
// Switch off filtering for all channels
for (channel=1;channel<USBTC08_MAX_CHANNELS+1;channel++)
{
usb_tc08_legacy_get_temp
(
&reading[channel],
handle,
channel,
0
);
}
// Now do something with the readings
// Check that they have not overflowed by comparing each reading
// with 2147483647L or LONG_MAX (include limits.h)
> 0,The handle of a unit.
0,No more units were found.
-1,Unit failed to open. Call usb_tc08_get_last_error with a handle of 0 to
obtain the error code.
Tip: Front panel LED
·
When a connection to the device has been established, the LED will be green.
·
When readings are being captured, the LED will change to alternating red and green.
·
The LED will return to green after the function usb_tc08_stop has been called.
3.1All modes
3.1.1usb_tc08_open_unit
int16_t usb_tc08_open_unit(void)
This routine returns a valid handle to the USB TC-08 if the driver successfully opens it. If the routine fails, see
the error code explanations in the usb_tc08_get_last_error section. If you wish to use more than one
USB TC-08, call this routine once for each unit connected to the PC. The function will return 0 if there are no
more units found. The driver is thread-safe and will not allow access to a single unit from more than one
application. If, therefore, usb_tc08_open_unit does not find a unit, check that other applications are not
using the USB TC-08. This includes applications on other user accounts on the same computer, where fast
user switching is supported.
Note: The usb_tc08_open_unit function provides a simple way to open USB TC-08 units. However, the
function call locks up the calling thread until the attached USB TC-08 unit has been fully enumerated. If a
single-threaded application needs to perform concurrent processing, such as displaying a progress bar, use
usb_tc08_open_unit_async.
Example
The following code is a fragment of a C application which demonstrates how to open multiple units with the
USB TC-08 driver. The handles to the open units are stored in an array for later use:
//======================================================
// Opening multiple units
//======================================================
for (i=0;(new_handle=usb_tc08_open_unit)>0;i++)
{
// store the handle in an array
handle_array[i]=new_handle;
}
no_of_units=i;
// deal with the error if there is one, if new_handle was zero, then
// there was no error and we reached the last available unit
if (new_handle==-1)
{
error_code=usb_tc08_get_last_error(0);
printf("Unit failed to open\nThe error code is %d",error_code);
1The call was successful.
0No more units were found.
-1An error occurred, call usb_tc08_get_last_error with a handle of 0
to obtain the error code.
Tip: Front panel LED
·
When a connection to the device has been established, the LED will be green.
·
When readings are being captured, the LED will change to alternating red and green.
·
The LED will return to green after the function usb_tc08_stop has been called.
3.1.2usb_tc08_open_unit_async
int16_t usb_tc08_open_unit_async
(
void
)
This routine begins enumerating USB TC-08 units in the background and provides a return immediately, so
the calling thread can continue executing other code.
Note: The driver is thread safe and will not allow access to a single unit from more than one application. If,
therefore, usb_tc08_open_unit_async does not find a unit, check that other applications are not
using the same USB TC-08. This includes applications on other user accounts on the same computer, where
fast user switching is supported.
Example
The following code is a fragment of a C application which demonstrates how to open a single unit with the
asynchronous open unit functions:
//======================================================
// Opening a unit asynchronously
//======================================================
// Tell the driver to start enumerating the unit in the background
// (usb_tc08_open_unit_async returns immediately)
result=usb_tc08_open_unit_async;
// handle any error conditions
if (result==-1)
{
error_code=usb_tc08_get_last_error(0);
printf("Unit failed to open\nThe error code is %d",error_code);
// could terminate the application here
}
else if (result==0)
{
printf("No USB TC08 units found");
// could terminate the application here
}
// No errors, so start polling usb_tc08_open_unit_progress
// continuously for its enumeration state
handle,(Out) A handle (positive int16_t) to the unit if the enumeration is
completed. handle will always be 0 if the enumeration is incomplete.
progress,(Out) (Optional - can pass NULL) returns a number from 0 to 100
representing the percentage completion of the enumeration of one unit.
Returns
USBTC08_PROGRESS_FAIL (-1)
An error occurred. Call usb_tc08_get_last_error with a handle of 0 to obtain
the error code.
USBTC08_PROGRESS_PENDING (0)
Enumeration has not completed (keep calling usb_tc08_open_unit_progress).
USBTC08_PROGRESS_COMPLETE (1)
Enumeration has completed and the handle is now valid.
3.1.3usb_tc08_open_unit_progress
int16_tusb_tc08_open_unit_progress
(
int16_t*handle,int16_t*progress
)
Call this function after usb_tc08_open_unit_async. Repeatedly call it to determine the state of the
background enumeration process. For an example of usage, see usb_tc08_open_unit_async.
0 Use usb_tc08_get_last_error.
1 Unit closed successfully.
3.1.4usb_tc08_close_unit
int16_t tc08_close_unit
(
int16_t handle
)
This routine closes the unit for a specified USB handle.
Note: If you successfully open any USB TC-08 units, call usb_tc08_close_unit for each handle before
you exit from your program. If you do not, there is a chance that the unit will not reopen until it has been
disconnected and reconnected.
This routine returns the minimum sampling interval (or fastest millisecond interval) that the unit can achieve
in its current configuration. The configuration is defined by calling usb_tc08_set_channel for each
channel.
Note: The USB TC-08 can sample, from a single channel, at a rate of 10 samples per second. The absolute
minimum sampling interval, with all 8 channels and the cold junction enabled, is 900 ms. You must set up all
the channels that you wish to use before calling this routine.
info,A pointer to a structure containing unit information.
Returns
0Use usb_tc08_get_last_error.
1Routine was successful.
3.1.8usb_tc08_get_unit_info
int16_t usb_tc08_get_unit_info
(
int16_t handle,
USBTC08_INFO * info
)
This routine gets information about the USB TC-08 unit and copies it to the USBTC08_INFO structure (see
below). If you pass zero to the function as the handle, only the driver version member will be valid, but the
function will return 1 (success).
If the programming language you are using does not support structures, use
usb_tc08_get_formatted_info.
To query a single item of information, use usb_tc08_get_unit_info2.
You must assign the correct value to the size field of your USBTC08_INFO structure before calling this
routine. For example, in C, if devinfo is your structure, use this code:
This function is similar to the usb_get_unit_info routine, but the unit information is returned in the form
of a formatted character string. The string is separated into the following elements, each appearing on a
different line: driver version; hardware version; variant info; serial number; calibration date.
This function returns the last error for the specified device.
Note: If an invalid handle is passed to a function, the function will fail. The error code, however, cannot be
associated with a device so usb_tc08_get_last_error will not retain an error code in this instance.
usb_tc08_get_last_error will also fail if the invalid handle is passed to it.
The error codes, also found in the C header file, are as follows:
User/Developer error codes:
Note: For more details on error codes, see troubleshooting.
Note: These reserved error code values are only meaningful to Pico Technology Technical Support staff, but
they are supplied to allow developers to display warnings in their applications. For more details on error
codes, see troubleshooting.
Call this routine once for each channel that you want to use. You can do this any time after calling
usb_tc08_open_unit. By default, all channels are disabled.
Note: The CJC is always enabled automatically if a thermocouple is being used. When no channels are
active as thermocouples, the CJC can be optionally enabled or disabled.
This routine starts the unit running with a sampling interval, specified in milliseconds. This routine should be
called after usb_tc08_set_channel has been called.
temp,Pointer to an array of length [9]. There are 9 channels on the
USB TC-08 (8 + cold junction) and the readings are always
placed in the array subscript corresponding to the channel
number. Channels which are not enabled are filled with QNaN
values.
overflow_flags,Pointer to a variable containing a set of bit flags that are set
high when an overflow occurs on a particular channel. An
overflow occurs when the input signal is higher than the
measuring range of the USB TC-08.
The lowest significant bit (bit 0) represents channel 0 (the cold
junction channel) and bit 8 represents channel 8 (the last
thermocouple channel). Bitwise comparisons should be
performed to determine the overflow state of each channel.
units,Specifies the temperature units for returned data:
You must set up the channels before calling this function. You must not have put the unit into Streaming
mode with usb_tc08_run, as this will cause usb_tc08_get_single to fail. The function will convert all
readings on demand. For more details and an example see the Get Single mode section.
handle,Specifies the USB TC-08 unit.
temp_buffer,Pointer to a location where the readings are to be placed.
times_ms_buffer,Returns the time that the first channel was converted (optional).
buffer_length,Length of data buffers.
overflow,Pointer to a variable that will be assigned a value of 1 if an overflow occurred on
any of the readings copied into temp_buffer, or 0 if an overflow did not occur.
An overflow occurs when the input signal is higher than the measuring range of
the USB TC-08.
channel,Specifies the channel to read the temperature from.
units,Specifies the temperature units for returned data:
fill_missing,Choose whether or not to replace QNaN values with the last known value:
0 - Use QNaNs to represent missing readings
1 - Fill missing readings with previous good reading.
Returns
-1,An error occurred. Use usb_tc08_get_last_error to get the code.
0, Currently no readings to collect.
>0, Number of readings copied into array (there may still be more readings in the
Once you open the driver and set up some channels, you can call the usb_tc08_run routine. The driver will
then begin to continually take readings from the USB TC-08. Use the usb_tc08_get_temp routine to
retrieve readings from the driver's buffer periodically. You must call the function at least once per minute to
avoid losing data (the driver's buffer is circular, so the oldest readings will be overwritten first).
Streaming mode relies on the driver to buffer readings without interruption. If the driver does not get enough
share of the PC's processor time (the most frequent cause of which is too many applications running at the
same time), readings will be dropped and the sample buffer will be padded with QNaN floating integers.
Warning: The padding of the buffer is also dependent on the performance of the PC and under very heavy
processor loading, padding may not always be accurate.
temp_buffer,Pointer to a buffer where the temperatures are to be placed.
times_ms_buffer,Returns the exact time that this channel was converted (optional).
buffer_length,Specifies the length of the sample buffer.
overflow,Pointer to a variable that will be assigned a value of 1 if an overflow occurred on
any of the readings copied into temp_buffer, or 0 if an overflow did not occur.
An overflow occurs when the input signal is higher than the measuring range of
the USB TC-08.
channel,Specifies the channel to read the temperature from.
units,Specifies the temperature units in which the data are returned:
fill_missing,Choose whether or not to replace QNaN values (missing readings) with the last
known value:
0 - Use QNaNs to represent missing readings
1 - Fill missing readings (no QNaNs).
Returns
-1,An error occurred. Use usb_tc08_get_last_error to get the code.
0,Currently no readings to collect.
>0,Number of readings copied into array (there may still be more readings in the
Same as usb_tc08_get_temp but the times take account of small differences caused by the order in
which channels are converted. Note: Unless there is a specific reason to use the
usb_tc08_get_temp_deskew routine, use usb_tc08_get_temp instead.
channel,Specifies which channel you want to set the details for: This
should be between 0 and 8.
tc_type,Specifies what type of thermocouple is connected to this
channel. Set to one of the following characters: B, E, J, K, N, R, S,
T. Use a space (' ') to disable the channel.
filter_factor,Specifies the size of the median filter. Each time the driver
takes a reading from this channel, it updates the filtered value
by adding a reading to a median filter. The filter factor can be
set to any value between 0 and 255 (0 or 1 turns filtering off).
These parameters are provided for backward compatibility with
the serial TC-08 and have no effect when used with the USB TC-
08.
offset and slope,The parameters offset and slope are not used and therefore
should be set to 0.
Returns
0,Use usb_tc08_get_last_error.
1,Legacy set channel successful.
temp,Pointer to a location where readings are to be placed. Each reading should be compared
with 2147483647L or LONG_MAX (include limits.h) to check for overflows. An
overflow occurs when the input signal is higher than the measuring range of the USB TC-
08.
handle,Specifies the USB TC-08 unit.
channel,Specifies from which channel to read temperature. Should be 0 for CJC, 1 for Channel 1,
2 for Channel 2 and so on.
filtered,Specifies whether or not to filter the data. The readings are median filtered if set to 1. 0
causes the unfiltered temperature to be stored in temp. The filter has a depth defined by
the filter factor, set during a usb_legacy_set_channel call.
Once you open the driver and define some channels, you can call the usb_tc08_legacy_run routine. The
driver will then constantly take readings from the USB TC-08. Temperatures are returned in hundredths of a
degree Celsius and voltages are returned in microvolts.
Note: Do not call this function unless you are operating the USB TC-08 in legacy mode, having called
This routine gives the number of complete cycles of readings taken from a particular USB TC-08. Calling
usb_tc08_legacy_get_temp causes the most recent reading for the specified channel to be returned
immediately. If you wish to record values only when the driver has taken a new reading, you can use this
routine to find out how many complete cycles of readings the driver has taken. Then you can call
usb_tc08_legacy_get_temp, but only when the cycle has been incremented.
Tip: Do not test for an exact cycle number; instead, test for a different cycle number as your application may
have missed readings. See the Legacy mode section for an example.
Note: Do not call this function unless you are operating the USB TC-08 in legacy mode, having called
Errors in this category indicate that a fault has occurred with the USB TC-08 unit or your PC. Try
disconnecting the USB TC-08 and then reconnecting it. If this does not work, restart your PC. If this
does not work, do the following:
1. Uninstall the software and restart the PC
2. Reinstall the software and restart the PC
3. If this does not work, download the latest version of the software from
https://www.picotech.com/downloads and install this, then restart the PC
4. If this does not work, contact support@picotech.com
P
Errors in this category are handled internally by software applications, and only developers need to
be aware of their meanings.
P*
Errors in this category are user-dependent and developers should make sure that their application
provides suitable error messages for users to read in the event of an error occurring.
4Troubleshooting
The following table lists each of the error codes described in the usb_tc08_get_last_error topic, and
divides them into categories so that you know what to do in the event of a particular error occurring.
Cold junction compensation (CJC). A method of compensating for ambient temperature variations in
thermocouple circuits.
Common mode range. The voltage range, relative to the ground of the data logger, within which both inputs
of a differential measurement must lie in order to achieve an accurate measurement.
DLL. Dynamic Link Library. Files with this file extension contain a collection of Windows functions designed
to perform a specific class of operations.
Input impedance. The resistance measured between the input terminals of a circuit.
NFR. Noise-Free Resolution. The effective number of bits of resolution that can be considered noise-free.
Overvoltage protection. The maximum input voltage that can be applied without damaging the unit.
QNaN. Quiet Not a Number. In the context of the USB TC-08, QNaNs are numbers created artificially to fill
in gaps in sampling. These gaps are interruptions caused by lack of available PC or laptop processor time,
normally caused by too many applications being open simultaneously. QNaNs are defined in the
IEEE 754-1985 ISO standard and are indeterminate, meaning that a comparison between two QNaNs always
returns false.
In C/C++, the int32_t _isnan(double) function in the float.h header file can be used to identify
QNaN float representations, cast to a double first. QNaNs will not cause an error if arithmetic operations
are performed on them - however, the results will remain indeterminate.
Resolution. A value in bits, related to the number of increments of an analog input signal that can be
detected by a digital measurement system. A high-resolution measurement system detects smaller signal
increments than a low-resolution measurement system.
Thermocouple. A device consisting of two dissimilar metals joined together. The thermoelectric voltage
developed between the two junctions is proportional to the temperature difference between the junctions.
Type B thermocouple. Type B thermocouples are made from platinum and rhodium and are suitable for high
temperature measurements of up to 1820 °C. Unusually, due to the shape of their temperature / voltage
curve, type B thermocouples give the same output at 0 °C as at 42 °C.
Type E thermocouple. Type E thermocouples are made from chromel and constantan. They have a high
output (68 µV/°C), making them well suited to low-temperature (cryogenic) use. They are non-magnetic.
Type J thermocouple. Type J thermocouples are made from iron and constantan. They measure
temperatures in the range –210 to +1200 °C. The main application is with old equipment that can not accept
more modern thermocouples. J types should not be used above 760 °C, as an abrupt magnetic
transformation will cause permanent decalibration.
Type K thermocouple. Type K thermocouples are low-cost, general-purpose thermocouples, made from
chromel and alumel, operating in the –270 °C to +1370 °C temperature range. Sensitivity is about
41 µV/°C.
Type N thermocouple. Type N thermocouples are made from nicrosil and nisil. The high stability and
resistance to high-temperature oxidation of these thermocouples make them suitable for measuring high
temperatures. They are less expensive than platinum types B,R, and S and were designed to be an improved
type K.
Type R thermocouple. Type R thermocouples are made from platinum and rhodium, and are suitable for
high-temperature measurements of up to 1760 °C. Low sensitivity (10 µV/°C) and high cost make them
unsuitable for general purpose use.
Type S thermocouple. Type S thermocouples are made from platinum and rhodium, and are suitable for
high-temperature measurements of up to 1760 °C. Low sensitivity (10 µV/°C) and high cost make these
thermocouples unsuitable for general purpose use. Due to their high stability, type S thermocouples are used
as the standard of calibration for the melting point of gold.
Type T thermocouple. Type T thermocouples are made from copper and constantan, are highly accurate,
and operate in the –270 °C to +400 °C temperature range.
USB. Universal Serial Bus. This is a standard port that enables you to connect external devices to PCs. A
typical USB 1.1 port supports a data transfer rate of 12 megabits per second, and is much faster than a COM
port.