annotate Calypso-test-reset @ 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 396d44c543e3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 Reset logic and on/off states in the Calypso+Iota chipset
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 =========================================================
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 Our beloved Calypso+Iota chipset provides a special reset signal (called
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 nTESTRESET on Leonardo schematics) that is just for testing, development and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 debugging, not used at all in the normal life cycle of a phone handset or
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 modem. This special test reset is triggered when you press the RESET button on
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 a TI/FreeCalypso development board (D-Sample or FCDEV3B), and it can also be
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 triggered slightly indirectly through the reset pin on the TI-style JTAG
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 connector. The way this reset works is very quirky and requires a lot of
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 explanation, but before one can properly understand this test reset, we first
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 need to look at the "regular" power-on reset, switch-on and switch-off logic
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 that works in the absence of nTESTRESET.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 Before looking at resets and switch-on and switch-off sequences, we first need
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 to understand the power domains that are involved. There are two major power
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 domains of interest: there is the main power domain that is physically powered
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 off when the mobile device is not in the switched-on state, and there is the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 RTC power domain that is powered at all times whenever the battery is physically
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 present, or perhaps even from a separate backup battery (a tiny coin cell) that
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 provides RTC power when the main battery is removed. The always-on RTC power
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 domain allows the real time clock to maintain the time of day while the mobile
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 is otherwise off (hence the name), and it also provides power to the logic that
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 allows the rest of the mobile (the main power domain) to be powered on,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 initialized, booted, run and eventually switched off again in an orderly manner.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 All reset and on/off logic in our chipset happens in the VRPC (Voltage Reference
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 and Power Control) block in the Iota chip; all of Calypso and the rest of Iota
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 are fully subservient to this VRPC block. It is crucial to understand the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 difference between powering on and off vs. switching on and off: in the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 terminology that is established in TI's chip datasheets and application notes,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 powering on means physically providing battery power to the chipset (inserting
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 the battery into a phone that had it removed, or connecting a VBAT power supply
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 to the orange power input connector on one of our development boards), and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 powering off means physically removing all battery power, i.e., yanking the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 battery out of a phone or disconnecting the power supply from the development
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 board. In board designs with a backup battery or a provision for one, it is
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 even more complicated: a power-on happens when either the main battery or a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 backup battery becomes present, and a power-off happens when both batteries are
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 removed, leaving the Iota chipset without any energy source whatsoever. In
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 contrast, the actions of a user turning her phone on and off are called
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 switch-on and switch-off, respectively.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 The RTC power domain is powered on and receives its power-on reset (POR) on a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 power-on event and loses power only on a full power-off (complete loss of all
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 battery power), whereas the main power domain is powered on and lifted out of
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 reset only on a switch-on, and powered back down and held in reset on a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 switch-off. The Calypso chip receives two reset signals from the Iota (meaning
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 that each signal is an output from the Iota and an input to the Calypso):
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 nRESPWON and ON_nOFF. The nRESPWON signal is asserted (active low) only on a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 hardware power-on (and also on nTESTRESET as will be explained in due course)
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 and stays high (inactive) at all other times, whereas ON_nOFF is driven high on
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 switch-on and low on switch-off. When the ON_nOFF signal is driven low by the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 Iota ABB in the switched-off state, all main (non-RTC) logic in the Calypso is
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 held in reset, and in any case that logic cannot function as the physical power
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 to it (coming from LDO regulators in the Iota) will typically be turned off.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 When the Iota ABB drives ON_nOFF high on switch-on, it does so after the LDO
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 regulators for the main power domain have been turned on and have had enough
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 time to stabilize; in the Calypso chip the transition of ON_nOFF from low to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 high causes the ARM7 core to boot.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 A true power-on reset happens only when all battery power is removed and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 reconnected: in simple designs without a backup battery one would need to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 remove the main battery or the power supply providing VBAT and also disconnect
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 anything that may be feeding power into the system through pull-up resistors;
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 in more complex designs that feature a backup battery, both the main battery
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 and the backup battery would need to be removed and reconnected in order to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 trigger a POR. Such a complete POR would reset the RTC power domain, and on
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 exit from the POR the VRPC block will be in the switched-off state, with
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 everything except the RTC powered off and waiting for the user to press the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 PWON button.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 The green LED on the FCDEV3B indicates the state of the ON_nOFF signal, and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 thus allows you to see if the VRPC block is switched on (LED on) or switched
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 off (LED off). The actual VRPC state machine in the Iota chip is a little more
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 complicated and has 5 states, not just two (the states are NOBAT, BACKUP, OFF,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 ACTIVE and SLEEP), but I am simplifying here - for the complete details, please
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 see the VRPC description in Iota datasheet TWL3025_SWRS021.pdf, section 4.10
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 starting on page 40. The transition from OFF to ACTIVE (switch-on event)
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 happens whenever the PWON button is pressed or charging voltage is applied (on
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 hardware that has charging circuits), whereas commanding a switch-off (going
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 back to OFF) requires having Calypso ARM7 firmware establish communication with
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 the Iota ABB over SPI and send a DEVOFF command. If the Calypso firmware
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 requests a switch-off when the PWON button is held down (jumper on FCDEV3B) or
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 when a charging power source is present, the Iota VRPC goes through a switch-off
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 immediately followed by a switch-on, effecting a very deep kind of reboot.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 nTESTRESET enters the picture
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 =============================
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 So where does nTESTRESET fit in the just-described architecture of on/off
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 switching and resets? Contrary to what one might naively think, it is NOT an
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 externally-triggerable way to simulate a POR, nor is it simply ANDed or ORed
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 together with some other internal reset signal. Instead as you can see in
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 Figure 4-8 on page 43 of the TWL3025_SWRS021.pdf datasheet, it is its own
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 separate and very special path through the VRPC state machine that is never
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 exercised at all in normal product operation.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 When you press the RESET button or trigger a reset through JTAG connector pin 2
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 (let's call it XDS_RESET), the VRPC state machine will unconditionally leave
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 whatever state it was in and will be forced into this special nTESTRESET state
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 that does not occur at any other time. For as long as nTESTRESET is held low,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 both reset signals to the Calypso (nRESPWON and ON_nOFF) will be held low as
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 well, putting the Calypso into a POR-like superdeep reset, but meanwhile the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 LDO regulators are fully turned on, not off! While nTESTRESET is held low, the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 green LED on the FCDEV3B will be off (ON_nOFF is low), but the regulators are
16
396d44c543e3 Calypso-test-reset: typo fix
Mychaela Falconia <falcon@freecalypso.org>
parents: 15
diff changeset
107 on, as can be seen on JTAG connector pin 5 where the V-IO rail is brought out.
15
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 This combination of ON_nOFF low (green LED off) but regulators on happens only
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 in this special nTESTRESET-held-low state and not at any other time.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 When the RESET button and XDS_RESET are both released, causing nTESTRESET to go
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 back to high, the VRPC state machine goes from the special nTESTRESET state to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 the ACTIVE (switched-on) state via a special direct transition that bypasses
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 the normal checks. Calypso reset inputs nRESPWON and ON_nOFF go from low to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 high at the same time (this is the only time when they do it like this), and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 the ARM7 core boots.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 Thus the test reset triggered via nTESTRESET is not a simple POR-like reset,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 instead it is a very special "deep reset, then unconditional power-on and boot"
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 kind of operation. As a practical matter, it does its intended job of giving
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 developers an unconditional and unstoppable way to take control of the chipset
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 when the ARM7 processor and its code execution are in a runaway state: in the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 Calypso+Iota on/off architecture, the most "kosher" way to cleanly reset the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 system would be a switch-off followed by a switch-on, but a normal switch-off
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 is a quite complex operation that has to be performed by ARM7 firmware, and it
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 is thus unavailable when the processor executes something other than perfectly
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 good firmware code with clean soft-power-off functionality. The test reset
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 mechanism provides a solution, although it is a solution that may be quite
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 difficult to understand at first.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 It is also important to note that nTESTRESET acts the same way and puts the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 chipset into the exact same state regardless of *all* prior state, as in not
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 only prior sw state, but also prior hw state: in particular, it works exactly
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 the same way whether the chipset was switched on or switched off prior to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 nTESTRESET assertion. If the system was previously switched on, running some
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 code that hung or become uncontrollable, nTESTRESET can be thought of as acting
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 mostly like a typical processor reset that most software developers are used to,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 but if the system was previously switched off, nTESTRESET acts like a different
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 kind of "turn on" command, producing a switch-on that is distinguishable from
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 all other switch-on causes like PWON and charger-plug.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 Lack of debouncing
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 ==================
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 It is important to note that there is no debouncing circuit for nTESTRESET
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 inside the Iota chip, like there is for the regular PWON button. Thus shorting
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 nTESTRESET to GND directly with a finger-actuated pushbutton switch is not
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 particularly good, although TI's Leonardo schematics depict just such an
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 arrangement, and it works OK on the FCDEV3B in practice.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 The entity that drives nTESTRESET to the Calypso+Iota system takes full
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 responsibility for ensuring proper timing. The reset which is propagated from
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 nTESTRESET to nRESPWON and ON_nOFF needs to have a certain duration in order to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 reset all logic properly, and there is nothing in the chipset itself to assure
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 such, unlike what happens on normal switch-on sequences - instead it is the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 responsibility of the nTESTRESET driving source. The exact timing requirements
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 are not stated anywhere (at least none that we could find), but if you are
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 driving nTESTRESET from a programmatic source (presumably via the XDS_RESET
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 signal path described below), I would give it a 50 ms pulse.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 When nTESTRESET is shorted to GND with a finger-actuated pushbutton switch, one
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 needs to watch out for contact bounce. If the dry contact switch does a lot of
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 make-break bounce, that make-break noise will translate directly into Calypso
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 and Iota resets being asserted and negated just as rapidly, which is certainly
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 not clean. The final release from reset is the most important part though: if
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 the system is put through a bunch of erratic resets as a result of contact
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 bounce on the initial RESET button press, there should be no problem if there
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 is a long solid reset at the end, with a clean release from it. But if the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 release from reset is also accompanied by contact bounce with make-break events
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 on the order of microseconds, then the chipset may enter garbage state by way
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 of an improperly timed reset. The nTESTRESET signal was clearly designed to be
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 driven by development systems that can produce controlled timing, not by
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 bounce-prone electromechanical switches driven by bounce-prone human fingers.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 nTESTRESET vs. XDS_RESET
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 ========================
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 In its native form the internal nTESTRESET signal is pulled up to a non-logic
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 voltage rail (specifically UPR, which normally follows VBAT in the absence of
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 backup batteries), and it can be shorted or pulled to GND either by pushbutton
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 switches (aside from the contact bounce problem noted above) or by OC/OD
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 drivers. It cannot, however, be driven by any kind of external push-pull
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 driver, and more generally it cannot be connected to any circuit that operates
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 on standard logic voltages like 3.3 V - the VBAT rail will typically be in the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 3.6 to 4.2 V range, which is too high for external 3.3 V logic.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 But TI Back In The Day had a need to drive this test reset from their XDS510
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 and XDS560 "emulator" pods, and the only reset signal those pods put out is the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 one that was originally intended for JTAG TRST (which does not exist in the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 Calypso+Iota chipset), driven with a push-pull driver. TI's solution was to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 insert a clever transistor circuit between JTAG connector pin 2 (the pin that
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 was originally intended to be TRST) and the internal nTESTRESET signal; this
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 circuit is depicted on the available Leonardo schematics, it has been replicated
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 on our FCDEV3B, and we have every reason to believe that it is the same on TI's
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 D-Sample board as well. The effect of this circuit is that whenever the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 external XDS_RESET signal is driven low and the internal V-IO rail has power
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 (see below), the internal nTESTRESET signal is driven low (asserted), and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 whenever the external XDS_RESET signal is either driven high or left alone, the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 internal nTESTRESET signal is left alone, high from the pull-up to UPR - but
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 the nTESTRESET and XDS_RESET electrical nets are never exposed directly to each
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 other's voltages.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 This clever solution does however have one side effect which is visible to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 developers working with these boards: the reset signal isolation circuit can
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 only propagate an asserted low from XDS_RESET to nTESTRESET when the V-IO rail
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 has power, i.e., when Iota regulators are turned on - and in the normal
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 switched-off state these regulators are turned off. Thus the operator needs to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 first cause a switch-on or at least a regulator turn-on by pressing either the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 PWON button or the RESET button, and once V-IO is on, the external host driving
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 the XDS_RESET signal via the JTAG connector can take over.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 Another unexpected quirk is that XDS_RESET can still sometimes work even though
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 the Iota regulators are off (VRPC in the switched-off state) if some leakage
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 power is being fed into the V-IO rail from UART or JTAG lines through pull-up
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 resistors - but this behaviour should be considered an unfortunate design
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 blemish, not something to be relied on.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 Test reset, then switch-off, then switch-on quirk
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 =================================================
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 If you use any version of FreeCalypso host tools earlier than the upcoming
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 fc-host-tools-r11 release with an FCDEV3B, you might have noticed a really odd
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 quirk: if you make an fc-loadtool entry via the RESET button instead of PWON,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 then exit your loadtool session cleanly, such that the green LED goes out, the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 board ends up in a weird state - if you then do a subsequent switch-on via PWON,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 something goes wrong (fc-loadtool entry doesn't work, regular fw also hangs
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 instead of producing rvinterf output) - it seems as though if you have done a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 RESET once, only another RESET works from then on, and PWON stops working
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 correctly. Yet if you press the RESET button without fc-loadtool and let the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 regular firmware boot from this nTESTRESET switch-on, and then execute a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 switch-off through the firmware (AT@POFF, fc-shell poweroff, or press, hold and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 release the PWON button) the board is powered off in a clean state - subsequent
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 PWON works just fine. What in the world is going on?
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 The secret magic was discovered by carefully studying the TCS211 firmware code
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 we've inherited from TI. It turns out that our Iota chip has at least one
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 secret undocumented register (or perhaps many more, who knows) that is not
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 documented in the TWL3025_SWRS021.pdf datasheet, and any Calypso programs (full
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 firmwares or standalone programs like our loadagent) that execute a Iota
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 poweroff (really switch-off) operation need to make a special write to this
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 magic register in order to avoid trouble in the test reset, then switch-off,
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 then switch-on sequence.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 We are calling this undocumented Iota register VRPCAUX (its official name is
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 unknown, but there is a seemingly-corresponding register in TI's newer Syren
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 ABB chip which the firmware calls VRPCAUX, and the name logically fits in terms
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 of the function), and it is accessed via undocumented register page 2.
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 Officially both Iota and Syren ABB chips only have register pages 0 and 1, but
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 it turns out that both chips also have an undocumented page 2 - and in order to
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 access this secret page 2, one first needs to issue a special (also secret)
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 unlock command through yet other registers - whew!
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 So just *why* do we need to mess around with secret undocumented Iota registers
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 from our production code? From what we can tell, this VRPCAUX register lives
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 in the VRPC block in the RTC power domain, and it preserves its state when the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 rest of the system is powered down in the switched-off state. Apparently this
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 register controls some aspects of the switch-on process, and when an nTESTRESET
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 reset-and-boot sequence is performed, this VRPCAUX register is loaded with a
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 different configuration than on normal POR. It appears that the "normal" value
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 of VRPCAUX in the absence of test reset operations is 0x007 (bit meaning unknown
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 of course when we are dealing with secret undocumented stuff), and this value
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 is needed for switch-on and possibly other things (sleep entry and exit, ABB
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 interrupts, who knows) to work correctly. But if we boot via nTESTRESET and
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 read the secret register, we see 0x2E7 instead - and if we do a normal DEVOFF
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 command without changing it to 0x007 first, we get into the broken state where
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266 PWON switch-ons don't work. (It is very reassuring though that another
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 nTESTRESET always works no matter what - so it looks like this debug reset is
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 truly irrespective of all prior hw state.)
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 TI's TCS211 firmware has a bit of magic in its boot code path in the ABB_on()
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 function in the chipsetsw/drivers/drv_core/abb/abb.c module, and it has this
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 attention-drawing comment:
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 // Restore the ABB checks and debouncing if start on TESTRESETZ
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 The code following this comment goes through the gymnastics of enabling access
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 to register page 2, then writing 0x007 into the register which we've named
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 VRPCAUX. (That's what it does for Iota; for Syren it also writes a few other
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 registers also in that same undocumented page 2.) Reproducing these steps in
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 our target-utils code (loadagent and friends) has resulted in the problem
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 behaviour going away: now we can enter fc-loadtool via the RESET button, then
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 exit loadtool (loadagent poweroff command executed on the target), and the
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283 board is powered off cleanly, with both PWON and RESET working for subsequent
38cc5795d79c Calypso-test-reset article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 switch-ons. Whew!