You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

175 lines
6.8 KiB

  1. /** @page primerjtag OpenOCD JTAG Primer
  2. JTAG is unnecessarily confusing, because JTAG is often confused with
  3. boundary scan, which is just one of its possible functions.
  4. JTAG is simply a communication interface designed to allow communication
  5. to functions contained on devices, for the designed purposes of
  6. initialisation, programming, testing, debugging, and anything else you
  7. want to use it for (as a chip designer).
  8. Think of JTAG as I2C for testing. It doesn't define what it can do,
  9. just a logical interface that allows a uniform channel for communication.
  10. See @par
  11. http://en.wikipedia.org/wiki/Joint_Test_Action_Group
  12. and @par
  13. http://www.inaccessnetworks.com/projects/ianjtag/jtag-intro/jtag-state-machine-large.png
  14. The first page (among other things) shows a logical representation
  15. describing how multiple devices are wired up using JTAG. JTAG does not
  16. specify, data rates or interface levels (3.3V/1.8V, etc) each device can
  17. support different data rates/interface logic levels. How to wire them
  18. in a compatible way is an exercise for an engineer.
  19. Basically TMS controls which shift register is placed on the device,
  20. between TDI and TDO. The second diagram shows the state transitions on
  21. TMS which will select different shift registers.
  22. The first thing you need to do is reset the state machine, because when
  23. you connect to a chip you do not know what state the controller is in,you need
  24. to clock TMS as 1, at least 7 times. This will put you into "Test Logic
  25. Reset" State. Knowing this, you can, once reset, then track what each
  26. transition on TMS will do, and hence know what state the JTAG state
  27. machine is in.
  28. There are 2 "types" of shift registers. The Instruction shift register
  29. and the data shift register. The sizes of these are undefined, and can
  30. change from chip to chip. The Instruction register is used to select
  31. which Data register/data register function is used, and the data
  32. register is used to read data from that function or write data to it.
  33. Each of the states control what happens to either the data register or
  34. instruction register.
  35. For example, one of the data registers will be known as "bypass" this is
  36. (usually) a single bit which has no function and is used to bypass the
  37. chip. Assume we have 3 identical chips, wired up like the picture
  38. and each has a 3 bit instruction register, and there are 2 known
  39. instructions (110 = bypass, 010 = some other function) if we want to use
  40. "some other function", on the second chip in the line, and not change
  41. the other chips we would do the following transitions.
  42. From Test Logic Reset, TMS goes:
  43. 0 1 1 0 0
  44. which puts every chip in the chain into the "Shift IR state"
  45. Then (while holding TMS as 0) TDI goes:
  46. 0 1 1 0 1 0 0 1 1
  47. which puts the following values in the instruction shift register for
  48. each chip [110] [010] [110]
  49. The order is reversed, because we shift out the least significant bit
  50. first. Then we transition TMS:
  51. 1 1 1 1 0 0
  52. which puts us in the "Shift DR state".
  53. Now when we clock data onto TDI (again while holding TMS to 0) , the
  54. data shifts through the data registers, and because of the instruction
  55. registers we selected (some other function has 8 bits in its data
  56. register), our total data register in the chain looks like this:
  57. 0 00000000 0
  58. The first and last bit are in the "bypassed" chips, so values read from
  59. them are irrelevant and data written to them is ignored. But we need to
  60. write bits for those registers, because they are in the chain.
  61. If we wanted to write 0xF5 to the data register we would clock out of
  62. TDI (holding TMS to 0):
  63. 0 1 0 1 0 1 1 1 1 0
  64. Again, we are clocking the least-significant bit first. Then we would
  65. clock TMS:
  66. 1 1 0
  67. which updates the selected data register with the value 0xF5 and returns
  68. us to run test idle.
  69. If we needed to read the data register before over-writing it with F5,
  70. no sweat, that's already done, because the TDI/TDO are set up as a
  71. circular shift register, so if you write enough bits to fill the shift
  72. register, you will receive the "captured" contents of the data registers
  73. simultaneously on TDO.
  74. That's JTAG in a nutshell. On top of this, you need to get specs for
  75. target chips and work out what the various instruction registers/data
  76. registers do, so you can actually do something useful. That's where it
  77. gets interesting. But in and of itself, JTAG is actually very simple.
  78. @section primerjtag More Reading
  79. The following link goes to an HTML (or PDF) introduction to JTAG,
  80. written by one of the original members of the JTAG committee: @par
  81. http://www.asset-intertech.com/products/boundscan.htm
  82. A separate primer contains information about @subpage primerjtagbs for
  83. developers that want to extend OpenOCD for such purposes.
  84. */
  85. /** @page primerjtagbs JTAG Boundary Scan Primer
  86. The following page provides an introduction on JTAG that focuses on its
  87. boundary scan capabilities: @par
  88. http://www.engr.udayton.edu/faculty/jloomis/ece446/notes/jtag/jtag1.html
  89. OpenOCD does not presently have clear means of using JTAG for boundary
  90. scan testing purposes; however, some developers have explored the
  91. possibilities. The page contains information that may be useful to
  92. those wishing to implement boundary scan capabilities in OpenOCD.
  93. @section primerbsdl The BSDL Language
  94. For more information on the Boundary Scan Description Language (BSDL),
  95. the following page provides a good introduction: @par
  96. http://www.radio-electronics.com/info/t_and_m/boundaryscan/bsdl.php
  97. @section primerbsdlvendors Vendor BSDL Files
  98. NXP LPC: @par
  99. http://www.standardics.nxp.com/support/models/lpc2000/
  100. Freescale PowerPC: @par
  101. http://www.freescale.com/webapp/sps/site/overview.jsp?code=DRPPCBSDLFLS
  102. Freescale i.MX1 (too old): @par
  103. http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX1&nodeId=0162468rH311432973ZrDR&fpsp=1&tab=Design_Tools_Tab
  104. Renesas R32C/117: @par
  105. http://sg.renesas.com/fmwk.jsp?cnt=r32c116_7_8_root.jsp&fp=/products/mpumcu/m16c_family/r32c100_series/r32c116_7_8_group/
  106. - The device page does not come with BSDL file; you have to register to
  107. download them. @par
  108. http://www.corelis.com/support/BSDL.htm
  109. TI links theirs right off the generic page for each chip;
  110. this may be the case for other vendors as well. For example:
  111. - DaVinci DM355 -- http://www.ti.com/litv/zip/sprm262b
  112. - DaVinci DM6446
  113. - 2.1 silicon -- http://www.ti.com/litv/zip/sprm325a
  114. - older silicon -- http://www.ti.com/litv/zip/sprm203
  115. - OMAP 3530
  116. - CBB package -- http://www.ti.com/litv/zip/sprm315b
  117. - 515 ball s-PGBA, POP, 0.4mm pitch
  118. - CUS package -- http://www.ti.com/litv/zip/sprm314a
  119. - 515 ball s-PGBA, POP, 0.5mm pitch
  120. - CBC package -- http://www.ti.com/litv/zip/sprm346
  121. - 423 ball s-PGBA, 0.65mm pitch
  122. Many other files are available in the "Semiconductor Manufacturer's BSDL
  123. files" section of the following site: @par
  124. http://www.freelabs.com/~whitis/electronics/jtag/
  125. */
  126. /** @file
  127. This file contains the @ref primerjtag and @ref primerjtagbs page.
  128. */