Comparing JTAG, SPI, and I2C Application Note by Russell Hanabusa 1. Introduction This paper discusses three popular serial buses: JTAG, SPI, and I2C. A typical electronic product today will have one or more serial buses in them. Using a serial bus in a system has many advantages over a parallel bus. 1. Lower component cost 2. Smaller printed circuit board 3. Simplified design 4. Typically, lower power consumption The trade-off for these advantages is inherently lower data transfer rates than a parallel bus system. In serial buses only one wire carries data into and/or out of the device. In some cases there is one signal for carrying data into the device another different signal for carrying data out of the device. On the other hand in parallel buses many signals transfer data simultaneously into and out of the device. The following table provides a quick overview comparing these serial buses: Table 1.1 Overview of SPI, I2C, and JTAG Serial Buses Name Architecture Feature Multi- Master Data Rate Flyby Data Transfer Full Duplex SPI (Serial) 2 shared uni-directional data signals and a shared clock Bi-directional communication on share bus Possible, but not standard 1 Mbps No Yes I2C (Inter IC) Shared data signal, and a shared clock signal Bi-directional communication on shared bus Yes 100 kbps, 400 kbps, 3.2 Mbps Yes No JTAG (Joint Test Action Group) Daisy Chain data signal Can verify device connectivity, in-circuit emulation, device configuration, and internal device functional testing No 10-100 MHz N/A N/A These three serial buses are described in the following sections. 2. SPI SPI is an acronym for Serial Peripheral Interface bus. SPI allows for full-duplex data transfers. Typically, there is only one bus master, all other SPI devices are slaves. Some vendors (example: Xilinx™) provide a means for SPI bus arbitration, but this is not a requirement of the SPI standard. SPI has a shared data bus. The master transmits data on the SO signal line and receives data on the SI signal line, this allows the bus master to simultaneously transmit and receive data. All data transfers must take place between the Bus Master and slaves. Data transfers directly between two slave devices (Flyby transfers) are not allowed. The SPI Bus Master signals are shown below. SCK SPI Bus Clock output by SPI Bus Master SI Input Data to Bus Master SO Output Data from Bus Master Publication Number comparing_serial_interfaces_an Revision 01 Issue Date April 13, 2007 A pplication Note Figure 2.1 shows an example of an SPI system with one bus master and three slave devices. The SPI Bus Master outputs an individual device select signal for each SPI device slave. Figure 2.1 Typical SPI Bus System SO SI SCK SCK SPI Bus Master SO SI SCK DEVICE 1 CS# SO SI DEVICE 2 W# HOLD# CS# W# HOLD# SCK SO SI DEVICE 3 CS# W# HOLD# CS1# CS2# CS3# Figure 2.2 is an example of an SPI read bus cycle of a Spansion SPI Flash. For Spansion SPI devices, data is sampled on the rising edge of SCK and changes on the falling edge of SCK. Figure 2.2 SPI Bus Cycle CS# Mode 3 SCK 0 1 2 3 4 5 6 7 8 9 10 28 29 30 31 32 33 34 35 36 37 38 39 Mode 0 Command 24-Bit Address 23 22 21 SI 3 2 1 0 MSB SO Hi-Z Data Out 1 7 6 5 4 3 2 Data Out 2 1 0 7 MSB The bus cycle events are as follows: 1. CS# is asserted low to select the Flash. 2. The SPI read command is send. 3. The internal 24-bit Flash memory address is send. 4. The first Flash data byte is read out. In Figure 2.2 at the left of the SCK signal are shown the options of Mode 0 and Mode 3. Depending on the system SCK should be high (Mode3) when idle. In other systems SCK it should be low (Mode0) when idle. In both mode 0 and 3 data is clocked in on the rising edge of clock and out on the falling edge of clock. The SPI bus is a loose standard. Some devices can have a reversed SCK polarity. Note that some SPI devices can be connected in a daisy chain manner, but again this is not a requirement of the SPI standard. It is possible to daisy chain SPI devices with the data output of the first SPI device going into the data input of the 2nd SPI and so on. This paper does not discuss this. Note that, like with JTAG, none of the daisy chained devices would have independent access to the bus master. 2 Comparing JTAG, SPI, and I2C comparing_serial_interfaces_an_01 April 13, 2007 App l ic atio n 3. No t e I2C I2C is an acronym for Inter IC bus. I2C allows for multiple bus masters and flyby data transfers. Standard I2C can support data transfer up to 100 kbs. There is also fast I2C at 400 kbs and high speed I2C at 3.4 Mbps. The I2C Bus Master signals are shown below: SCL SPI Bus Clock. SDA Data I2C bus has only two signals: SCL and SDA. They are both bi-directional and open collector. Pull-up resistors on SCL and SDA are required. SCL is used for clock and wait. SDA is used for address and data since there is only one data line full-duplex cannot be supported. Figure 3.1 shows an example I2C system is shown below with two Master/Slave devices and two Slave only devices. The I2C bus does not have device select signals, but selects an I2C device by sending a device select byte. Therefore, all I2C devices must be preprogrammed with a unique I2C bus address before they are used on the I2C bus. The I2C protocol supports up to 127 addressable devices. Figure 3.1 Typical I2C Bus System Pull Up Resistors SCL SDA SCL SDA SCL Master/ Slave #1 3.1 SDA SCL Master/ Slave #2 SDA SCL Slave #3 SDA Slave #4 I2C Bus Cycle The I2C clock signal (SCK) is generated by the current master, but all the slaves can hold the SCK signal low until they are ready to allow it to go high. In this way a rising SCK is delayed until the slowest I2C device is ready. Figure 3.2 shows the transfer of a byte to a slave, the slave acknowledges the transfer, and then holds down SCL until it is ready for the next byte. Figure 3.2 I2C Bus Cycle START MSB LSB Acknowledgement signals from receiver 8 9 SDA SCL 1 2 6 7 1 SCL held low by slave to hold off the next data until it is ready . Bus arbitration is done with the SDA line. All of the potential bus masters simultaneously try to drive the SDA signal. When any bus master detects that they have driven a '1', but detected a '0' on the SDA signal it has lost the bus arbitration. It will immediately give up driving the SDA signal and will go into slave mode incase it was the addressed slave device. April 13, 2007 comparing_serial_interfaces_an_01 Comparing JTAG, SPI, and I2C 3 A pplication 4. Note JTAG The Joint Test Action Group (JTAG) method of connection is the IEEE standard #1149. It is also known as “JTAG boundary scan”. JTAG is commonly used for the following applications: 1. Board Assembly Test (verifies the connectivity of device pins to the PCB) 2. Development Tool (in-circuit emulator) 3. System Debug (provides a “back door” into the system) 4. Testing internal device circuitry (not be discussed here) Typically, JTAG is a feature found in relatively high pin count devices, but not in low pin count devices. I2C and SPI can be found in both high pin count devices like microcontrollers and in low pin count devices like A/D converters. JTAG uses four (plus an optional reset signal) wires to pass data through devices in a daisy chain. These signals are shown below: 1. TDI (Test Data In) - Daisy Chained 2. TDO (Test Data Out) - Daisy Chained 3. TCK (Test Clock) - Shared 4. TMS (Test Mode Select) - Shared 5. TRST (Test ReSeT) optional Figure 4.1 shows an example of a JTAG circuit is shown in the following figure. There is a JTAG Controller Connection and three JTAG devices. Figure 4.1 JTAG Bus System TMS TCK JTAG Controller Connector TDI TCK TMS TCK TMS TCK TMS Device #1 Device #2 Device #3 TDI TDI TDI TDO TDO TDO TD0 A JTAG Controller is connected at the connector and it drives TCK and TDI into DEVICE #1. The TDI data eventually passed out of the DEVICE #1 TDO pin into DEVICE #2 and so on until the daisy chain is closed back at the JTAG Controller at TDO. The buses signals TMS and TCK control the data transfer. 4 Comparing JTAG, SPI, and I2C comparing_serial_interfaces_an_01 April 13, 2007 App l ic atio n 4.1 No t e JTAG Bus Cycle Data outputs change on the falling edge of TCK and data is sampled on rising edge of TCK. TMS and TRST are not shown. Data transfers with JTAG are takes more clocks than the other serial buses, because in JTAG the data must pass sequentially through the devices in the chain. See Figure 4.2. Figure 4.2 JTAG Bus Cycle TCK TDI/TDO 0 1 0 0 1 1 0 LSB 1 MSB 5. Summary Using serial buses instead of parallel buses can cut component costs, space, and power consumption. Lower system performance is typical, but could be acceptable in many applications. Complete systems can be built using either SPI or I2C. JTAG is typically used only during product development, manufacturing, or servicing. April 13, 2007 comparing_serial_interfaces_an_01 Comparing JTAG, SPI, and I2C 5 A pplication 6. Note Revision History Section Description Revision 01 (April 13, 2007) Initial release 6 Comparing JTAG, SPI, and I2C comparing_serial_interfaces_an_01 April 13, 2007 App l ic atio n No t e Colophon The products described in this document are designed, developed and manufactured as contemplated for general use, including without limitation, ordinary industrial use, general office use, personal use, and household use, but are not designed, developed and manufactured as contemplated (1) for any use that includes fatal risks or dangers that, unless extremely high safety is secured, could have a serious effect to the public, and could lead directly to death, personal injury, severe physical damage or other loss (i.e., nuclear reaction control in nuclear facility, aircraft flight control, air traffic control, mass transport control, medical life support system, missile launch control in weapon system), or (2) for any use where chance of failure is intolerable (i.e., submersible repeater and artificial satellite). Please note that Spansion will not be liable to you and/or any third party for any claims or damages arising in connection with above-mentioned uses of the products. Any semiconductor devices have an inherent chance of failure. You must protect against injury, damage or loss from such failures by incorporating safety design measures into your facility and equipment such as redundancy, fire protection, and prevention of over-current levels and other abnormal operating conditions. If any products described in this document represent goods or technologies subject to certain restrictions on export under the Foreign Exchange and Foreign Trade Law of Japan, the US Export Administration Regulations or the applicable laws of any other country, the prior authorization by the respective government entity will be required for export of those products. Trademarks and Notice The contents of this document are subject to change without notice. This document may contain information on a Spansion product under development by Spansion. Spansion reserves the right to change or discontinue work on any product without notice. The information in this document is provided as is without warranty or guarantee of any kind as to its accuracy, completeness, operability, fitness for particular purpose, merchantability, non-infringement of third-party rights, or any other warranty, express, implied, or statutory. Spansion assumes no liability for any damages of any kind arising out of the use of the information in this document. Copyright © 2007 Spansion Inc. All rights reserved. Spansion®, the Spansion Logo, MirrorBit®, MirrorBit® Eclipse™, ORNAND™, HD-SIM™ and combinations thereof, are trademarks of Spansion LLC in the US and other countries. Other names used are for informational purposes only and may be trademarks of their respective owners. April 13, 2007 comparing_serial_interfaces_an_01 Comparing JTAG, SPI, and I2C 7