EDN logo


Design Feature: August 1, 1996

Ten ways to bulletproof RS-485 interfaces

John Goldie,
National Semiconductor

Despite its widespread use, RS-485 is not as well understood as it should be. However, if you invest a little time on familiarizing yourself with the bus and pay attention to 10 aspects of your application, you'll find that designing rock-solid implementations is easy.

Recommended Standard 485 (RS-485) has become the industry's workhorse interface for multipoint, differential data transmission. RS-485 is unique in allowing multiple nodes to communicate bidirectionally over a single twisted pair. No other standard combines this capability with equivalent noise rejection, data rate, cable length, and general robustness. For these reasons, a variety of applications use RS-485 for data transmission. The list includes automotive radios, hard-disk drives, LANs, cellular base stations, industrial programmable logic controllers (PLCs), and even slot machines. The standard's widespread acceptance also results from its generic approach, which deals only with the interface's electrical parameters. RS-485 does not specify a connector, cable, or protocol. Higher level standards, such as the ANSI's SCSI standards and the Society of Automotive Engineers' (SAE's) J1708 automotive-communication standard, govern these parameters and reference RS-485 for the electrical specifications.

Although RS-485 is extremely popular, many system designers must learn how to address its interface issues. You should review 10 areas before you design an RS-485 interface into a product. Understanding the issues during system design can lead to a trouble-free application and can reduce time to market.

RS-485 addresses a need beyond the scope of RS-422, which covers buses with a single driver and multiple receivers. RS-485 provides a low-cost, bidirectional, multipoint interface that supports high noise rejection, fast data rates, long cable, and a wide common-mode range. The standard specifies the electrical characteristics of drivers and receivers for differential multipoint data transmission but does not specify the protocol, encoding, connector mechanical characteristics, or pinout. RS-485 networks include many systems that the general public uses daily. These applications appear wherever a need exists for simple, economical communication among multiple nodes. Examples are gas-station pumps, traffic and railroad signals, point-of-sale equipment, and aircraft passenger seats. The Electronic Industries Association (EIA) Technical Recommendation Committee, TR30, made RS-485 a standard in 1983. The Telecommunications Industry Association (TIA) is now responsible for revisions. RS-485 is currently being revised. After successful balloting, the revised standard will become "ANSI TIA/EIA-485-A."

The 10 considerations that you should review early in a system design are:

Mode and nodes

In its simplest form, RS-485 is a bidirectional half-duplex bus comprising a transceiver (driver and receiver) located at each end of a twisted-pair cable. Data can flow in either direction but can flow only in one direction at a time. A full-duplex bus, on the other hand, supports simultaneous data flow in both directions. RS-485 is mistakenly thought to be a full-duplex bus because it supports bidirectional data transfer. Simultaneous bidirectional transfers require not one but two data pairs, however.

RS-485 allows for connection of up to 32 unit loads (ULs) to the bus. The 32 ULs can include many devices but commonly comprise 32 transceivers. Figure 1 illustrates a multipoint bus. In this application, three transceivers—two receivers and one driver—connect to the twisted pair. You must observe the 32-UL limitation, because the loads appear in parallel with each other and add to the load that the termination resistors present to the driver. Exceeding 32-UL loads excessively limits the drivers and attenuates the differential signal, thus reducing the differential noise margin.

RS-485 drivers are usually called "60-mA drivers." The name relates to the allowable loading. Developing 1.5V across the 60V termination load (120(ohm) at each end of the bus) requires 25 mA. The worst-case input current of a UL is 1 mA (at extreme common mode, explained later). Figure 2 shows the loading curve of a full UL. The worst-case UL input resistance is 10.56 k(ohm), although a frequently quoted incorrect value is 12 k(ohm). Thus, 32 ULs require 32-mA drive capability. Adding this current to the 25 mA for the terminations yields 57 mA, which rounds up to an even 60 mA. A driver that cannot supply the full 60 mA violates the standard and reduces the bus's performance. The resulting problems include reduced noise margin, reduction in the number of unit loads or allowable cable length, and limited common-mode voltage tolerance.

Designers frequently ask, "What is the maximum number of transceivers the bus allows?" The standard does not specify a maximum number of transceivers, but it does specify a maximum of 32 ULs. If a transceiver imposes one unit load, the maximum number of transceivers is also 32. You can now obtain transceivers with ½- and ¼-UL ratings, which allow 64 and 128 transceivers. However, these fractional-UL devices, with their high-impedance input stages, typically operate much more slowly than do single-UL devices. The lower speed is acceptable for buses operating in the low hundreds of kilobits per second, but it may not be acceptable for a 10-Mbps bus.

A solution exists for high-speed buses: You can use RS-485 repeaters to connect multiple buses end to end. In this setup, each bus must have no more than 32 loads. Directional control of the repeaters is complex, but hardware can handle it (Reference 1). Therefore, a conservative estimate is that, without using special transceivers, a bus can include 32 transceivers.

A final word of caution: Do not connect too many transceivers to the bus or lump too many transceivers too close together. The ac loading, which results mainly from the devices' pin I/O capacitance (usually about 15 pF), can alter the interconnect-medium impedance and cause transmission-line problems.

Configurations

Because RS-485 allows connecting multiple transceivers, the bus configuration is not as straightforward as in a point-to-point bus (RS-232C, for example). In a point-to-point bus, a single driver connects to one receiver alone. The optimal configuration for the RS-485 bus is the daisy-chain connection from node 1 to node 2 to node 3 to node n. The bus must form a single continuous path, and the nodes in the middle of the bus must not be at the ends of long branches, spokes, or stubs. Figures 3a, 3c, and 3e illustrate three common but improper bus configurations. (If you mistakenly use one of these configurations, you can usually make it work but only through substantial effort and modification.) Figures 3b, 3d, and 3f show equivalent daisy-chained configurations.

Connecting a node to the cable creates a stub, and, therefore, every node has a stub. Minimizing the stub length minimizes transmission-line problems. For standard transceivers with transition times around 10 nsec, stubs should be shorter than 6 in. A better rule is to make the stubs as short as possible. A "star" configuration (Figure 3c) is a special case and a cause for concern. This configuration usually does not provide a clean signaling environment even if the cable runs are all of equal length. The star configuration also presents a termination problem, because terminating every endpoint would overload the driver. Terminating only two endpoints solves the loading problem but creates transmission-line problems at the unterminated ends. A true daisy-chain connection avoids all of these problems.

Interconnect media

The standard specifies only the driver-output and receiver-input characteristics—not the interconnection medium. You can build RS-485 buses using twisted-pair cables, flat cable, and other media, even backplane pc traces. However, twisted-pair cable is the most common. You can use a range of wire gauges, but designers most frequently use 24 AWG. The characteristic impedance of the cable should be 100 to 120(ohm). A common misconception is that the cable's characteristic impedance (Z0) must be 120(ohm), but 100(ohm) works equally well in most cases. Moreover, the 120(ohm) cable's higher Z0 presents a lighter load, which can be helpful if the cable runs are extremely long.

Twisted pair offers noise benefits over flat or ribbon cables. In flat cable, a noise source (usually a conductor carrying an unrealted signal) can be closer to one member of the conductor pair than to the other over an entire wiring-run length. In such cases, more noise capacitively couples to the closer conductor than to the more distant one, producing a differential noise signal that can be large enough to corrupt the data. When you use the twisted pair, the noise source is closest to each of the conductors for roughly half of the wiring-run length. Therefore, the two conductors pick up roughly equal noise voltages. The receiver rejects these voltages because they appear mainly as common mode. A still better arrangement interposes ground conductors between adjacent (ideally, twisted) pairs. The grounds act as shields, reducing capacitive coupling between the pairs.

A special ribbon cable that is useful for noise reduction intermixes relatively long twisted sections with short flat sections. This cable provides the advantages of twisted pair between the flat sections and allows the use of insulation displacement connectors at the flat points.

Special transceivers solve special problems

DS3696/A—Thermal-shutdown reporting pin: This device provides an open-collector pin that reports the occurrence of a severe bus fault that has caused a thermal shutdown of the driver (>150°C junction temperature).

DS3697—Repeater pinout: Special pinout that internally connects a receiver port to a driver port. You need two of these devices for a bidirectional repeater.

DS3698—Repeater pinout with thermal-shutdown pin: A repeater device that also provides the thermal-shutdown reporting pin.

DS36276—Fail-safe transceiver: Standard transceiver pinout with fail-safe detecting receiver, optimal for use with UARTs and asynchronous buses.

DS36277—Fail-safe transceiver with active-low driver enable: Similar to the DS36276 but includes an active-low driver-enable pin. This feature allows a simplified connection to a UART and supports dominant-mode operation (use of the enable pin as the data pin).

DS36C278—Ultra-low-power CMOS transceiver: µA supply current and full RS-485 drive capability. One-fourth unit load allows up to 128 transceivers on the bus.

DS36C279—Ultra-low-power CMOS transceiver with automatic-sleep mode: Optimizes current with the automatic-sleep mode. With inactivity on the enable lines, ICC drops to less than 10 µA.

DS36C280—Ultra-low-power CMOS transceiver with adjustable-slew-rate control: Adjustable driver slew rate allows tailoring for long stub lengths and reduced emissions.

DS36954—Quad transceiver: Offers four independent transceivers in a single package. Useful for parallel buses.

Data rate vs cable length

You can transmit data over an RS-485 bus for 4000 ft (1200m), and you can also send data over the bus at 10 Mbps. But, you cannot send 10-Mbps data 4000 ft. At the maximum cable length, the maximum data rate is not obtainable: The longer the cable, the slower the data rate, and vice versa. Figure 4a shows a conservative curve of data rate vs cable length for RS-422 and RS-485. The two slopes result from different limitations. The maximum cable length is the result of the voltage divider that the cable's dc loop resistance and the termination resistance create. Remember, for differential buses, the loop resistance is twice as high as you might expect, because both conductors in the pair equally contribute.

The curve's sloped portion results from ac limitations of the drivers and the cable. Figure 4b shows four limits for a DS3695 transceiver that drives a common twisted-pair cable. Notice that the data rate vs cable length depends significantly on how you determine the necessary signal quality. This graph includes two types of criteria. The first is a simple ratio of the driver's transition time to the unit interval. A curve showing the results for the common 30% ratio defines the most conservative set of operating points.

A second method of determining the operating points uses eye-pattern (jitter) measurements. To make such measurements, you apply a pseudo random bit sequence (PRBS) to the driver's input and measure the resulting eye pattern at the far end of the cable. The amount of jitter at the receiver's threshold vs the unit interval yields the data point. Less jitter means better signal quality. Common operating curves use 5, 10, or 20% jitter. Above 50%, the eye pattern starts to close, and error-free data recovery becomes difficult (Reference 2). The key point is that you can't obtain the maximum data rate at the maximum cable length. But, if you operate the bus within the published, conservative curves, you can expect an error-free installation.

Termination and stubs

Most RS-485 buses require termination because of fast transition, high data rates, or long cables. The purpose of the termination is to prevent adverse transmission-line phenomena, such as reflections. Both ends of the main cable require termination. A common mistake is to connect a terminating resistor at each node—a practice that causes trouble on buses that have four or more nodes. The active driver sees the four termination resistors in parallel, a condition that excessively loads the driver. If each of the four nodes connects a 100(ohm) termination resistor across the bus, the active driver sees a load of 25(ohm) instead of the intended 50(ohm). The problem becomes substantially worse with 32 nodes. If each node includes a 100(ohm) termination resistor, the load becomes 3.12(ohm). You can include provisions for termination at every node, but you should activate the termination resistors only at the end nodes (by using jumpers, for example).

Stubs appear at two points. The first is between the termination and the device behind it. The second is between the main cable and a device at the middle of the cable. Figure 1 shows both stubs. The symbol "l" denotes the stub length. Keep this distance as short as possible. Keeping a stub's electrical length below one-fourth of the signal's transition time ensures that the stub behaves as a lumped load and not as a separate transmission line. If the stub is long, a signal that travels down the stub reflects to the main line after hitting the input impedance of the device at the end of the stub. This impedance is high compared with that of the cable. The net effect is degradation of signal quality on the bus. Keeping the stubs as short as possible avoids this problem. Instead of adding a long branch stub, loop the main cable to the device you wish to connect. If you must use a long stub, drive it with a special transceiver designed for the purpose.

Termination options

You have several options for terminating an RS-485 bus. The first option is no termination. This option is feasible if the cable is short and if the data rate is low. Reflections occur, but they settle after about three round-trip delays. For a short cable, the round-trip delay is short and, if the data rate is low, the unit interval is long. Under these conditions, the reflections settle out before sampling, which occurs at the middle of the bit interval.

The most popular termination option is to connect a single resistor across the conductor pair at each end. The resistor value matches the cable's differential-mode characteristic impedance. If you terminate the bus in this way, no reflections occur, and the signal fidelity is excellent. The problem with this termination option is the power dissipated in the termination resistors.

If you must minimize power dissipation, an RC termination may be the solution. In place of the single resistor, you use a resistor in series with a capacitor. The capacitor appears as a short circuit during transitions, and the resistor terminates the line. Once the capacitor charges, it blocks the dc loop current and presents a light load to the driver. Lowpass effects limit use of the RC termination to lower data-rate applications, however (Reference 3).

Another popular option is a modified parallel termination that also provides a fail-safe bias. A detailed discussion of fail-safe biasing occurs later in the article. Figure 5 compares the four popular termination methods. The main point to remember is that, if you use termination, you should locate the termination networks at the two extreme ends of the cable, not at every node.

Unique differential and RS-485 parameters

Four parameters that are important to differential data transmission and RS-485 are VOD, VOS, VGPD, and VCM. Figures 6, 7 and 8 illustrate these parameters, which are not common in the world of single-ended signaling and standard logic families.

VOD represents the differential output voltage of the driver across the termination load. The RS-485 standard refers to this parameter as "termination voltage" (VT), but VOD is also commonly used. You measure VOD differentially across the transmission line—not with respect to ground. On long cable runs, the dc resistance attenuates VOD, but the receivers require only a 200-mV potential to assume the proper state. Attenuation, therefore, is not a problem. At the driver output, VOD is 1.5V minimum. The IC manufacturer should guarantee this voltage under two test conditions: The first uses a simple differential load resistor. The second includes two 375(ohm) resistors connected to a common-mode supply. These resistors model the input impedance of 32 parallel ULs, all referenced to an extreme common-mode voltage. To make the 1.5V limit in this test, the driver must source or sink roughly 60 mA. This test is difficult and is important, because it essentially guarantees the system's differential-noise margin under worst-case loading and common-mode conditions.

Standards related to RS-485

EIA RS-485—Originally published in 1983, the multipoint standard specifies the concept of the unit load along with electrical characteristics of the drivers and receivers. It was developed from the RS-422 standard, adding multipoint capability, extended common-mode range, increased drive capability, and contention protection. It is an "electrical-only" standard that does not specify the function of the bus or any connectors.

TIA/EIA-485-A (PN-3498)—The TIA expects completion of the first revision to RS-485 this year (Project Number 3498). The goals of the revision are to clean up vague text and to provide additional information to clarify certain technical topics. This work will become the "A" revision of RS-485 once the balloting (approval) process is complete. In addition to the revision work, an application bulletin (PN-3615) is also in process. This document will provide additional application details and system considerations to aid the designer.

ISO/IEC 8482.1993—The current revision of this international standard maps closely to RS-485. The original ISO standard specified different limits and conditions. However, the 1993 revision changed many of these differences, and RS-485 and ISO 8482 are now similar.

Data sheets for RS-485 drivers usually do not include VOL or VOH specifications. The driver's VOL is typically around 1V. Even for CMOS devices, VOH is slightly above 3V, because both the source and sink paths of the output structure include a series-connected diode, which provides the common-mode tolerance for an Off driver. Because VOL is usually greater than 0.8V, an RS-485 driver is not TTL-compatible.

VOS represents the driver's offset voltage measured from the center point of the load with respect to the driver's ground reference. VOS is also called "VOC" for output common-mode voltage. This parameter is related to VCM.

VCM represents the common-mode voltage for which RS-485 is famous. The limit is -7V to +12V. Common-mode voltage is defined as the algebraic mean of the two local-ground-referenced voltages applied to the referenced terminals (receiver input pins, for example). The common-mode voltage represents the sum of three voltage sources. The first is the active driver's offset voltage. The second is coupled noise that shows up as common mode on both signal lines. The third is the ground-potential difference between the node and the active driver on the bus. Mathematically,

VCM=VOS+VNOISE+VGPD.

VGPD represents the ground-potential difference that can exist between nodes in the system. RS-485 allows for a 7V shift in grounds. A shift of 7V below the negative (0V) power rail yields the -7V common-mode limit, whereas 7V above the 5V positive power rail yields the other common-mode limit of 12V. Understanding these parameters enables improved component selection, because some devices trade off certain parameters to gain others.

To further illustrate RS-485's common-mode noise-rejection capability, you can conduct the following test: Connect a driver to a receiver via an unshielded twisted-pair cable. Then, couple a noise signal onto the line, and, from the scope, plot the resulting waveform at the receiver input (Figure 9). The plot includes the receiver's output signal. Note that the receiver clearly detects the correct signal state, despite the common-mode noise. Differential transmission offers this high noise rejection; a single-ended system would erroneously switch states several times under these test conditions.

Grounding and shielding

Although the potential difference between the data-pair conductors determines the signal without officially involving ground, the bus needs a ground wire to provide a return path for induced common-mode noise and currents, such as the receivers' input current. A typical mistake is to connect two nodes with only two wires. If you do this, the system may radiate high levels of EMI, because the common-mode return current finds its way back to the source, regardless of where the loop takes it. An intentional ground provides a low-impedance path in a known location, thus reducing emissions.

Electromagnetic-compatibility and application requirements determine whether you need a shield. A shield both prevents the coupling of external noise to the bus and limits emissions from the bus. Generally, a shield connects to a solid ground (normally, the metal frame around the system or subsystem) with a low impedance at one end and a series RC network at the other. This arrangement prevents the flow of dc ground-loop currents in the shield.

Contention protection

Because RS-485 allows for connecting multiple drivers to the bus, the standard addresses the topic of contention. When two or more drivers are in contention, the signal state on the bus is not guaranteed. If two drivers are on at the same time and if they are driving the same state, the bus state is valid. However, if the drivers are in opposite states, the bus state is undetermined, because the differential voltage on the bus drops to a low value within the receiver's threshold range. Because you do not know the driver states, you must assume the worst—namely, that the data on the bus is invalid.

Contention can also damage the ICs. If several drivers are in one state, a single driver in the opposite state sinks a high current (as much as 250 mA). This large current causes excessive power dissipation. A difference in ground potential between nodes only aggravates this dissipation. In this situation, the driver's junction temperature can increase beyond safe limits. The RS-485 standard recommends the use of special circuitry, such as a thermal shutdown circuit, to prevent such damage. Most RS-485 devices use this technique. The shutdown circuit disables the driver outputs when the junction temperature exceeds 150°C and automatically re-enables the outputs when the junction cools. If the fault is still present, the device cycles into and out of thermal shutdown until someone clears the fault.

Besides thermal shutdown, other current limiting is required to prevent accidental damage. If an active output is shorted to any voltage within the -7 to +12V range, the resulting current must not exceed 250 mA. In addition, the outputs of a driver must not sustain damage if they are shorted together indefinitely. (Entering thermal shutdown is allowed, of course.) Lastly, RS-485 drivers must source and sink large currents (60 mA). This situation requires outputs of rather large geometry, which provide robust ESD protection.

Special-function transceivers

You can handle many of the above-mentioned issues by using special transceivers, of which there are several types, differing in pinout or functions supported. The most common device is a standard transceiver (DS3695/DS75176B), which provides a two-pin connection to the RS-485 bus and a four-pin TTL interface (driver input, driver enable, receiver output, and receiver enable). Among the problems you can solve with an appropriate transceiver are these:

For ultra-low-power applications, the DS36C279 provides an auto-sleep function. Inactivity on the two enable lines automatically triggers the sleep mode, dropping the power-supply current to less than 10 µA. This characteristic is extremely valuable in applications that provide an interface connection but that are connected to their cables for downloading only a small percentage of the time. This is the case for package-tracking boxes carried by many overnight-delivery services. With this sleep feature, idle transceivers do not consume precious battery current.

For applications that are asynchronous and based on a standard UART, fail-safe biasing is an issue. UARTs look for a low or a high state, and, between characters, the line usually remains high. With RS-485, this condition is troublesome, because, when there are no active drivers on the bus, the bus state is undetermined. (See the following section for a detailed discussion of fail-safe biasing.) In this case, the DS36276 simplifies the hardware design. This unique transceiver's receiver detects a high state for a driven high and also for the nondriven (VID=0) bus state, thus providing the UART with the high state between characters and only valid start bits.

Although the discussion of configurations and the section on stubs advises minimizing stub length to avoid transmission-line problems, the application may not permit minimizing stub length. Another approach is to increase the driver's transition time to permit longer stubs without transmission-line effects. If you use the DS36C280, long stubs can branch off the main cable. This arrangement keeps the main cable short, whereas looping the cable back and forth to reach inconveniently located nodes would greatly increase the main-cable length. Besides allowing longer stubs, the slower edge rates generate lower emissions. Thus, this transceiver is also useful for applications that severely limit emitted noise.

Fail-safe biasing

The need for fail-safe operation is both the principal application issue and most frequently encountered problem with RS-485. Fail-safe biasing provides a known state in which there are no active drivers on the bus. Other standards do not have to deal with this issue, because they typically define a point-to-point or multidrop bus with only one driver. The one driver either drives the line or is off. Because there is only one source on the bus, the bus is off when the driver is off. RS-485, on the other hand, allows for connection of multiple drivers to the bus. The bus is either active or idle. When it is idle with no drivers on, a question arises as to the state of the bus. Is it high, low, or in the state last driven? The answer is any of the above. With no active drivers and low-impedance termination resistors, the resulting differential voltage across the conductor pair is close to zero, which is in the middle of the receivers' thresholds. Thus, the state of the bus is truly undetermined and cannot be guaranteed.

Some of the functional protocols that many applications use aggravate this problem. In an asynchronous bus, the first transition indicates the start of a character. It is important for the bus to change states on this leading edge. Otherwise, the clocking inside the UART is out of sync with the character and creates a framing error. The idle bus can also randomly switch because of noise. In this case, the noise emulates a valid start bit, which the UART latches. The result is a framing error or, worse, an interrupt that distracts the CPU from other work.

The way to provide fail-safe operation requires only two additional resistors. At one end of the bus (the master node, for example), connect a pullup and pulldown resistor (Figure 10). This arrangement provides a simple voltage divider on the bus when there are no active drivers. Select the resistors so that at least 200 mV appears across the conductor pair. This voltage puts the receivers into a known state. Values that can provide this bias are 750V for the pullup and pulldown resistors, 130V across the conductor pair at the fail-safe point, and a 120V termination at the other end of the cable. For balance, use the same value for the pullup and pulldown resistors. Reference 4 provides extensive details on this issue.

Forethought into these 10 areas before production greatly reduces the likelihood of problems. RS-485 is unique in its capabilities and requirements. Fully understanding these 10 issues leads to a rock-solid, trouble-free, multipoint differential interface that maximizes the benefits of RS-485 and provides the application with robust, rugged, highly noise-tolerant data communication.


John Goldie is an applications manager at National Semiconductor Corp in Santa Clara, CA. He holds a BSEE from San Francisco State University—San Francisco and has worked at National for eight years. His duties include customer support, new-product definition, and serving on industry-standards committees. He has served as the ad hoc chairman of such a committee for the Telecommunications Industries Association. His hobbies include photographing railroads and trains.


References

  1. Murdock, G and J Goldie, "AN-702: Build a direction-sensing bidirectional repeater," Interface Databook, National Semiconductor Corp, 1996.
  2. True, K, "AN-808: "Long transmission lines and data-signal quality." Interface Databook, National Semiconductor Corp, 1996.
  3. Vo, J, "AN-903 A comparison of differential-termination techniques," Interface Databook, National Semiconductor Corp, 1996.
  4. Goldie, J, "AN-847: "Fail-safe biasing of differential buses," Interface Databook, National Semiconductor Corp, 1996.
  5. ANSI/TIA/EIA-422-B-1995, Electrical characteristics of balanced-voltage digital-interface circuits.
  6. EIA RS-485-1983, Electrical characteristics of generators and receivers for use in balanced digital-multipoint systems.
  7. Sivasothy, S, "AN-409: Transceivers and repeaters meeting the EIA RS-485 interface standard," Interface Databook, National Semiconductor Corp, 1996.
  8. ISO/IEC 8482:1993, Information technology—telecommunications and information exchange between systems—twisted-pair multipoint interconnections.

| EDN Access | feedback | subscribe to EDN! |
| design features | out in front | design ideas | departments | products | columnist |


Copyright © 1996 EDN Magazine. EDN is a registered trademark of Reed Properties Inc, used under license.