FreeCalypso > hg > freecalypso-docs
annotate Calypso-JTAG-notes @ 23:14391ad53281
FCDEV3B-repackaging article removed for legal reasons
The idea expressed in that article, namely the idea that some party other than
Mother Mychaela could be permitted to create a derived work based on FCDEV3B
board design and have it be accepted into the FreeCalypso family, is no longer
allowed by our current stance on the matters of intellectual property,
particularly Falconia IP.
For technical content, the new FC-modem-family and Quadband-ideas articles
should fully supplant this old FCDEV3B-repackaging article.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 23 Oct 2019 00:43:21 +0000 |
parents | 7ba5c951803c |
children |
rev | line source |
---|---|
18
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 This document describes the quirks of Calypso JTAG in an abstract, tool- |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 independent sense, and also covers the little bit of experience we've had with |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 TI's original official tools, but does not delve into OpenOCD specifics. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 For OpenOCD-on-Calypso custom config and instructions, please refer to the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 freecalyps-hwlab repository - but the present document should still be read |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 first. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 Unconventional reset structure |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 ============================== |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 The first major way in which the JTAG interface on Calypso development boards |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 (or more generally, what is available in the Calypso+Iota chipset) differs from |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 "canonical" JTAG is that this chipset does NOT have reset signals that are |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 anything like classic TRST or SRST. Instead there is only one bundled-with-JTAG |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 reset signal (we call it XDS_RESET) which is turned into Iota nTESTRESET through |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 a transistor circuit - please refer to the Calypso-test-reset article. Aside |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 from its effects on the VRPC state machine described in that article, this test |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 reset can be thought of as a simultaneous combination of an equivalent of TRST |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 (all JTAG logic is hard-reset), an equivalent of SRST (the Calypso is fully |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 reset and proceeds with a cold boot) and more (all hardware is reset at a very |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 deep level), but comparisons to classic TRST and SRST aren't really appropriate |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 as the latter signals simply don't exist in our chipset. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 However, despite its highly unconventional nature, this XDS_RESET signal |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 provided along with JTAG on TI's development boards performs a very important |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 function: this combination of JTAG and test reset allows a "reset and hold |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 still" maneuvre where all hardware is put into its pristine state with a very |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 deep reset, but the ARM7 CPU is halted before it gets a chance to execute any |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 instructions from the reset vector. This ability is not particularly important |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 on current Calypso hardware with a working and enabled boot ROM, but it was |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 vital on earlier platforms without this boot ROM: if the flash is blank or |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 contains a bad code image, or if RAM is mapped onto the boot chip select |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 instead of flash, allowing the ARM7 core to execute garbage out of reset is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 bad, whereas having a "reset and hold still" ability allows guaranteed reliable |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 recovery and bootstrapping from a blank or bricked state. As explained later |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 in this article, this "reset and hold still" maneuvre is executed by first |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 giving the target a test reset pulse (which unstoppably blows away all prior hw |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 state), then immediately (the timing is critical) performing certain |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 manipulations via the JTAG scan chain - thus the bundling of the XDS_RESET |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 signal with JTAG is important. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 EMU0 and EMU1 signals |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 ===================== |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 In addition to the 4 standard JTAG signals TCK, TDI, TDO and TMS, the Calypso |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 provides two TI-proprietary signals called EMU0 and EMU1. (The test reset goes |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 to the Iota ABB, not to the Calypso.) These EMU0 and EMU1 signals are brought |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 out to the 14-pin JTAG connector on TI's D-Sample and E-Sample boards, and also |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 on our FCDEV3B. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 The function of these two signals is completely unknown: all we know is that |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 they are listed as "bidirectional in/out" in the cal000.pdf document, and that |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 same-named signals also exist on TI's general-purpose DSP chips, both C54x and |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 the newer families, where they are also very poorly documented. We don't know |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 what these EMU0/1 signals do on the Calypso, and it is a particular unknown |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 whether they are specific to the DSP part or if the ARM7 part can also make use |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 of them somehow. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 I (Mother Mychaela) previously thought that these signals might facilitate a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 way to halt the ARM7 core without going through the scan chain, or a different |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 way to halt directly out of reset than the one we ultimately found, but a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 recent experiment has shown that pulling either or both of these signals low |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 (they are pulled up on target boards) has absolutely no visible effect on ARM7 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 code execution, whether they are pulled low coming out of test reset or while |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 running. Thus until we recover more understanding of what is going on inside |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 the chip, we are going to ignore these two signals and leave them unconnected. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 Iota not included in the JTAG scan chain |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 ======================================== |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 In addition to the Calypso chip itself (the DBB), the Iota ABB chip also has |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 JTAG pins and could potentially be included in the scan chain. However, this |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 wiring arrangement is not typically used: both on TI's D-Sample board and on |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 our own FCDEV3B (based on Leonardo schematics) the JTAG interface is wired only |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 to the Calypso and not to Iota. The same arrangement has also been found in |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 all historical commercial phones and modems that provide a JTAG interface. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 We don't have any plans to change this arrangement in any of our future designs: |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 in the absence of 100% complete understanding of the internals of both chips, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 there is no telling what unexpected gotcha may occur if the Iota chip is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 included in the same scan chain as the Calypso, hence we are not doing that. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 ARM7 and C54x DSP cores |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 ======================= |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 The regular JTAG scan chain inside the Calypso goes through two TAPs |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 corresponding to the two processor cores. The ARM7 TAP with a 4-bit IR is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 closer to TDI, and the C54x DSP TAP with an 8-bit IR is closer to TDO. The |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 debug interface to the ARM7 core through its respective TAP is consistent with |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 public ARM7TDMI documentation from ARM except for one important quirk described |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 below, but we know absolutely nothing about the DSP TAP and its debug protocol |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 other than how to put it into BYPASS so we can operate on the ARM. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 It appears from passing references in some TI documents that they did intend to |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 have an ability to debug the Calypso DSP via JTAG "emulation", and TI's CCS |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 software working through TI's XDS510 or XDS560 hardware (the same setup that |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 successfully connects to the ARM7 part of the Calypso) supports C54x targets. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 However, we have no idea how any potential JTAG access to the DSP would interact |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 with its reset control coming from the ARM or with its power saving modes, and |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 it is very likely that there are some security mechanisms restricting debug |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 access to the DSP (perhaps needing some secret key to unlock it), thus being |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 able to debug the DSP via JTAG is not something we can realistically hope for |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 unless we either buy out the complete chip design from TI or physically |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 reverse-engineer the chip transistor by transistor, both options being equally |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 cost-prohibitive. At our current level of budgetary means, our ability to use |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 the JTAG interface on the Calypso is limited to the ARM7 part, not the DSP. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 Non-standard extension to the ARM7TDMI TAP |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 ========================================== |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 We know that TI made at least one non-standard extension to the ARM7TDMI TAP in |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 the Calypso because it implements at least one additional opcode that does not |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 appear in any public documentation from ARM. When connecting to this ARM7 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 target, TI's CCS software working through XDS510 or XDS560 hardware apparently |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 scans a 0xB opcode (4'b1011) through the IR, and then apparently scans 2'b10 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 through the 2-bit DR selected by this opcode. (I said "apparently" because so |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 far the only people who have actually sniffed the JTAG communications produced |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 by the XDS+CCS combo were OsmocomBB people, not anyone from the FreeCalypso |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 team, hence we don't have any authentic knowledge currently.) Experiments with |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 OpenOCD show that the just-described sequence of IR and DR scans with an |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 unknown instruction and an unknown data register is necessary in order to allow |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 halting the ARM7 core: if we try to halt it in the standard ARM7TDMI way (either |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 via DBGRQ or via a catch-all breakpoint unit setup) without doing the magic |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 sequence first, no halt is effected. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 Fortunately though, after we issue the non-understood magic sequence once, all |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 subsequent ARM7TDMI halt/resume manipulations done in the standard way appear |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 to work just fine, no more quirks. The only time when the "halt unlock" magic |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 sequence needs to be repeated is after a reset, which is expected. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 Interaction with the watchdog timer |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 =================================== |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 The Calypso chip includes a watchdog timer feature; if this watchdog timer is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 enabled and allowed to expire, it effects a fairly deep reset of the chip. The |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 Calypso boot ROM code and most firmware designs do a step early on to disable |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 this watchdog, and it is not subsequently re-enabled except to effect a reboot |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 when so desired, but as the ARM7 core first comes out of reset and starts |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 executing instructions from the reset vector (whether ROM or external memory), |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 the watchdog timer is enabled and ticking. This watchdog timer interacts with |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 JTAG as follows: |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 1) When the ARM7 core is halted via JTAG, the watchdog timer (if enabled) is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 NOT stopped or paused, but keeps ticking. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 2) If a watchdog reset occurs while the ARM7 core is halted, everything goes |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 out of whack, consistent with the note in standard ARM7TDMI documentation |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 which says that a reset must not be applied to the core while it is in debug |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 halt state. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 Therefore, if the ARM7 core is to be halted at a time when the watchdog timer |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 is enabled and ticking, the halt operation must be quickly followed by two |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 system bus write operations (mwh command in OpenOCD) to the WATCHDOG_TIM_MODE |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 register, executing the watchdog disable sequence before the timer is allowed |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 to expire while halted. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 JTAG clock speed |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 ================ |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 It is often stated that the JTAG clock speed must be no greater than 1/6 of the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 system clock speed when talking to ARM cores, and that JTAG access is blocked |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 when the core goes into a power saving mode with the clock stopped. Neither of |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 these constraints applies to our beloved Calypso though: the stated issues occur |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 in chip designs which internally synchronize JTAG signals including TCK to their |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 system clock, but Calypso and its predecessors don't do that, they use the hard |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 macrocell version of the ARM7TDMI core instead, use TCK directly to clock JTAG- |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 specific logic and perform "hard" clock switching for debug mode. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 According to the available cal000_a.pdf document, the maximum TCK frequency |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 supported by the Calypso is 10 MHz, which also appears to be the only TCK |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 frequency which TI's older XDS510 "emulator" pods can produce without hardware |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 modifications. This 10 MHz TCK frequency can be used no matter what frequency |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 is fed to Calypso's main CLKTCXO clock input or what frequency the ARM7 core is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 configured to run at, and JTAG keeps working even when the main clock is |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 completely stopped. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 It is possible to halt the Calypso ARM7 core when it is in a sleep mode, even |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 in deep sleep: manipulation of internal scan chain 2 to set DBGRQ is a JTAG-only |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 operation, contained entirely in the TCK clock domain, thus it works even with |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 the main VCXO stopped, and the actual halt occurs on wakeup when the ARM7 core |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 regains its regular clock and sees the internal DBGRQ signal asserted. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 Halting immediately out of reset |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 ================================ |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 To me (Mother Mychaela) it always seemed evident that the Calypso and its |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 predecessors had to have some way to perform a "reset and hold still" maneuvre, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 as this capability was absolutely essential for deterministic bootstrapping and |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 recovery of boards before the Calypso boot ROM subsumed that function. However, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 the exact manipulations required to achieve this effect have remained elusive |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 for a long time until I found the answer in May-June of 2019. The trick is NOT |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 done through EMU0/1 pins like I once thought, and the method used on many other |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 chips involving classic TRST and SRST signals is clearly not applicable to the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 Calypso given its very different reset structure. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 The answer lies in the clocking architecture of TI GSM chipsets, involving a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 VCXO that is started and stopped and a 32.768 kHz clock which is always running. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 When the Calypso starts its boot process in response to the ON_nOFF signal |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 going from low to high (in the XDS-triggered test reset scenario this event |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 immediately follows the release of external reset), the main VCXO is off (i.e., |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 it hasn't been started yet) and only the 32.768 kHz clock is running. At this |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 point the ARM7 core receives no clock at all (the 32.768 kHz clock is never fed |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 to the ARM7), and the ULPD block (the same block that handles deep sleep) goes |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 through the sequence of first enabling the main VCXO, then waiting for it to |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 stabilize. This sequence takes about 8192 cycles of the slow clock (about |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 250 ms), and only at the completion of this sequence the ARM7 core gets its |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 first clock. But during that 250 ms time window the JTAG logic is out of its |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 reset and functioning, and it can be operated because Calypso JTAG does not |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 depend on the main ARM clock which is stopped. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 The following sequence of steps successfully achieves the effect of resetting |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 the Calypso+Iota chipset and all board-level peripherals that are subservient |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 to it, and halting the Calypso directly at the reset vector before the first |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 instruction is executed: |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 1) Give the chipset a test reset pulse via the XDS_RESET line; the exact |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 required duration is not known, but my OpenOCD-based proof of concept gives |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 a 50 ms pulse. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 2) Immediately after releasing the reset or after a short delay (my PoC does a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 10 ms delay), start exercising the JTAG scan chain, which has been fully |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 reset - it will be responsive at this point. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 3) Perform the "magic" IR and DR scans to enable halting ability, just like we |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 do when we wish to halt an already-running Calypso. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 4) Going through scan chain 2 inside the ARM7TDMI TAP, set the DBGRQ bit. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 All steps up to this one must happen before Calypso ULPD enables the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 VCXO-derived clock to the ARM7. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 5) Also going through scan chain 2, poll and wait for DBGACK to get set, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 indicating that the ARM7TDMI core halted - this event will happen when the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 core gets its first clocks. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 6) Once the ARM7TDMI core is halted, perform the two mwh operations to the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 0xFFFFF804 register (WATCHDOG_TIM_MODE) to disable the watchdog, otherwise |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 it will generate another internal reset and mess up the system state. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 We never found any built-in provision in TI's CCS (see below) or any script for |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 CCS that does the above, instead I (Mother Mychaela) found it on my own by |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 thinking about how it could possibly be done, and proved the idea working |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 with an OpenOCD setup presented in the freecalypso-hwlab repository. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 Original official TI tools |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 ========================== |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 TI's original and official tool for operating on Calypso JTAG was their Code |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 Composer Studio (CCS) software, working through TI's XDS510 and XDS560 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 "emulator" hardware. The original hardware solution was the XDS510, and I mean |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 the original XDS510 which was an ISA card made by TI themselves, not any of the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 later "XDS510-class" "emulators" made by companies acting as TI's 3rd-party |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 partners. The next successor to this original XDS510 was the original XDS560, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 also made by TI themselves and distinct from the later "XDS560-class" devices |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 by TI's 3rd-party partner companies. The original XDS560 is a PCI card rather |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 than ISA, thus a little easier to get working in 2019, and also more readily |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 available on ebay. Both XDS510 and XDS560 consist of a desktop PC card (ISA or |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 PCI) and an active pod, and the pod has a non-detachable target connection cable |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 coming out of it, terminating in a female connector mating with the TI-style |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 14-pin JTAG header. The pod connector fits perfectly to TI's original D-Sample |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 board, but on our FCDEV3B it fails to fit because the JTAG and dual UART headers |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 are too close together. Therefore, anyone who is interested in connecting TI's |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 original XDS510 or XDS560 to an FCDEV3B would need to get some male-to-female |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 jumper wires or make a custom-crimped interposer cable. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 The version of CCS which we found to work with these "emulator" adapters (both |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 XDS510 and XDS560) and with Calypso targets is this one: |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 ftp://ftp.freecalypso.org/pub/GSM/TI_tools/CCS/CCS_3.3.83.20_win32.zip |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 In order to get this CCS to work with a Calypso target, you will need to create |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 a "custom board" configuration in CCS setup - none of the predefined board |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 configs shipped with CCS will work. To create the needed "custom board" config, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 select your "emulator" (XDS510 or XDS560), then add an ARM7 target and a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 TMS320C5400 target in this order, which is the order from TDI to TDO. With this |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 custom config saved, running CCS brings up what they call the Parallel Debug |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 Manager, which supposedly supports coordinated debugging of both ARM and DSP |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 cores. However, I (Mother Mychaela) have not tried connecting to the DSP part, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 only ARM7; another FreeCalypso community member who also got a working XDS510 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 setup talking to an FCDEV3B did try it, but saw what appears to be garbage. As |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 discussed earlier in this article, we are completely in the blind here, hence |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 this direction is not being seriously explored at the present. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 In order to play with just the ARM7 core, leaving the DSP alone, select the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 ARM7 target in the Open menu in Parallel Debug Manager - the main CCS debug |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 window will then open, and it will be specific to the ARM7 target. In my own |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 testing all further operations were done from the latter window and its menus. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 Reset with TI's tools |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 --------------------- |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 Both XDS510 and XDS560 "emulators" have only one reset output; on TI's general- |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 purpose DSP development boards outside of the GSM Skunkworks division this one |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 reset line was TRST, whereas on D-Sample and Leonardo boards (and on our |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 FCDEV3B) this signal is repurposed to drive Iota nTESTRESET through a clever |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 transistor circuit. TI's general-purpose (non-GSM) DSP chips and boards have |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 internal pull-downs on TRST rather than pull-ups (JTAG logic permanently held |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 down in reset when no "emulator" is connected), hence both XDS510 and XDS560 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 pods drive this signal with an active push-pull driver - which is why Calypso |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 development boards include the special transistor circuit rather than connect |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 the XDS_RESET line (as we call it) directly to internal nTESTRESET. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 Prior to initialization, a "cold" XDS560 pod has its reset output held low, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 thus the target board will be held down in test reset and will appear completely |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 unresponsive. To initialize the XDS560 and release it from reset, select |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 "Emulator Reset" from the Debug menu. For this operation to succeed, the LDO |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 regulators in the Iota ABB need to be turned on, putting out 2.8 V on the V-IO |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 rail which is used as the target voltage reference by the XDS560 pod, so you |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 will probably need to press either the PWON button or the RESET button on the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 FCDEV3B initially - and if the green LED stays off after that button press, you |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 know that the board is being held down in test reset by the XDS560 pod. Then |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 do the "Emulator Reset" operation, at which point the green LED will turn on |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 and the board will boot normally. From this point onward, doing a repeated |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 "Emulator Reset" operation causes a low-then-high pulse to be put out on the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 XDS_RESET line, resetting the board and once again causing it to go through a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 fresh boot. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 Connecting to the ARM7 core and halting it |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 ------------------------------------------ |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 Once the XDS560 has been initialized and the target board has been lifted out |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 of test reset with the "Emulator Reset" operation, you can execute the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 "Connect target" operation, also in the Debug menu. This operation produces a |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 successful halt (I can only guess that this step is the point at which the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 mysterious 0xB JTAG instruction and the unknown 2-bit register scan are issued, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 unlocking the halting ability on this modified ARM7TDMI core), but the halt |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 happens at whichever point the ARM7 core happens to be in its code execution, |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 i.e., the generic, non-GSM-specific CCS has no knowledge of the peculiar timing |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 sequence that is required to achieve a halt directly out of reset on the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 Calypso. It is my (Mychaela's) guess that CCS probably has some scripting |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 ability for more advanced users, and that TI's GSM Skunkworks division used |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 this custom scripting mechanism to do a sequence of {Emulator reset, then |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 connect to target and halt, then execute two register writes to disable the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 watchdog} with machine rather human timing between the steps. Machine rather |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 than human timing is required in order to hit the 250 ms window between the |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 release of reset and the beginning of ARM core execution, and also to disable |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 the watchdog after the halt via two register writes before it goes off. |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 Using OpenOCD on Calypso targets |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 ================================ |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 Building on top of the work that was done almost a decade earlier by some people |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 in the OsmocomBB camp (they sniffed the magic "halt unlock" sequence from an |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 XDS+CCS setup and gained the ability to halt an already-running Calypso with |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 OpenOCD, albeit without the reset magic) and adding the more in-depth |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 understanding provided by Mother Mychaela, we now have the ability to use |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 OpenOCD with a simple FT2232D adapter (instead of TI's XDS+CCS) to connect to |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 JTAG on TI/FC development boards, both D-Sample and FCDEV3B, gaining the power |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 of Free Software instead of proprietary tools. For the details, please refer |
7ba5c951803c
Calypso-JTAG-notes article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 to the freecalypso-hwlab repository. |