Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:reverse-engineering:jtag:start [2013/02/16 07:41] – [Netlist Extraction] alex | en:reverse-engineering:jtag:start [2013/02/18 21:40] (current) – [Links] alex | ||
|---|---|---|---|
| Line 13: | Line 13: | ||
| ===== Netlist Extraction ===== | ===== Netlist Extraction ===== | ||
| - | Once a JTAG access port is located on a board, extracting a netlist is relatively straightforward. | + | Once a JTAG access port is located on a board, extracting a netlist is relatively straightforward. |
| The process of netlist extraction is very simple. | The process of netlist extraction is very simple. | ||
| - | As the JTAG boundary scan functionality allows for access to the IO pins of the chips, it is possible to probe pins with external signal sources and sinks as well as other JTAG enabled pins. I created | + | As the JTAG boundary scan functionality allows for access to the IO pins of the chips, it is possible to probe pins with external signal sources and sinks as well as other JTAG enabled pins. I created |
| ===== ftjrev ===== | ===== ftjrev ===== | ||
| - | ftjrev is a powerful JTAG reverse-engineering tool. When coupled with an FTDI based JTAG cable and connected to a target board, ftjrev can be used to extract a netlist of interconnections between JTAG enabled components. | + | [[..: |
| ftjrev performs four main functions: scanning for clocks, scanning for JTAG accessible connections, | ftjrev performs four main functions: scanning for clocks, scanning for JTAG accessible connections, | ||
| - | ==== Clock scanning ==== | + | Please see the [[..:..:projects:ftjrev:|ftjrev]] page for instructions |
| - | + | ||
| - | Scanning for clocks looks for pins that change without any stimulus. | + | |
| - | + | ||
| - | Example: | + | |
| - | + | ||
| - | < | + | |
| - | $ ./ftjrev clocks | + | |
| - | Found 3 devices with total IR length of 26 | + | |
| - | Device 0: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Device 1: IDCODE 21C2E093 (XC3S1200E-FT256) | + | |
| - | Device 2: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Total boundary scan chain: 8572 | + | |
| - | Clock pass... | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Scanning ==== | + | |
| - | + | ||
| - | Scanning for JTAG accessible connections looks for connections between JTAG pins. It works by setting all of the IO pins as inputs, and then walking a toggling output around and reading in all the input pins. Pins that are pulled along with the test output are noted and reported. | + | |
| - | + | ||
| - | Example: | + | |
| - | + | ||
| - | < | + | |
| - | $ ./ftjrev scan | + | |
| - | Found 3 devices with total IR length of 26 | + | |
| - | Device 0: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Device 1: IDCODE 21C2E093 (XC3S1200E-FT256) | + | |
| - | Device 2: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Total boundary scan chain: 8572 | + | |
| - | Clock pass... | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]:IO_AN14 | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]:IO_J13 | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]:IO_K13 | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | Pin pass... | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | .... | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Input probing ==== | + | |
| - | + | ||
| - | Input probing does the same thing as scanning, but instead of walking an output pin around on the board, it toggles a GPIO pin on the FTDI chip in the JTAG cable. | + | |
| - | + | ||
| - | Example: | + | |
| - | + | ||
| - | < | + | |
| - | $ ./ftjrev | + | |
| - | Found 3 devices with total IR length of 26 | + | |
| - | Device 0: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Device 1: IDCODE 21C2E093 (XC3S1200E-FT256) | + | |
| - | Device 2: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Total boundary scan chain: 8572 | + | |
| - | Clock pass... | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | Probing inputs, press ctrl+c to stop... | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | 0[XC5VLX330-FFG1760]: | + | |
| - | .... | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Output probing ==== | + | |
| - | + | ||
| - | Output probing walks a toggling output pin around the board while at the same time printing the name of the pin to STDOUT. | + | |
| - | + | ||
| - | Example: | + | |
| - | + | ||
| - | < | + | |
| - | $ stty -F / | + | |
| - | $ ./ftjrev oprobe > / | + | |
| - | Found 3 devices with total IR length of 26 | + | |
| - | Device 0: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Device 1: IDCODE 21C2E093 (XC3S1200E-FT256) | + | |
| - | Device 2: IDCODE 2295C093 (XC5VLX330-FFG1760) | + | |
| - | Total boundary scan chain: 8572 | + | |
| - | Clock pass... | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 0[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 1[XC3S1200E-FT256]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | CLOCK: 2[XC5VLX330-FFG1760]: | + | |
| - | Probing outputs, press ctrl+c to stop... | + | |
| - | </ | + | |
| - | + | ||
| - | + | ||
| ===== Links ===== | ===== Links ===== | ||
| + | * [[..: | ||
| * [[https:// | * [[https:// | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[http:// | ||