Page 1 of 1

1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 07 Aug 2016, 21:04
by critor
En avril 2015, Lionel Debroux nous signalait la prise de contrôle totale des calculatrices HP Prime via la voie matérielle du JTAG sur le site Cemetech.
Une fois les connexions JTAG correctement soudées, il devenait alors possible de reprogrammer totalement l'intégralité de la mémoire NAND, y compris la zone d'amorçage contenant le Boot Code, et ce même si la calculatrice n'était plus en état de démarrer correctement ! :o
Les applications directes de la technique étaient de réparer des calculatrices inutilisables (mémoire Flash-NAND corrompue ou effacée), ou d'injecter des failles qui pouvaient être exploitées par la suite (Boot Code modifié par exemple).



Là où la HP Prime sortie à la rentrée 2013 était encore relativement jeune, sur les TI-Nspire sorties dès la rentrée 2007 pour les modèles monochromes, personne n'avait jamais réussi un tel exploit malgré des années ayant vu défiler des gens très compétents. :'(
Pourtant, dans le contexte des recherches visibles à l'époque sur le site Yaronet et ayant conduit à la sortie du jailbreak Ndless 1.0 pour la rentrée 2010, l'on suspectait déjà la présence de connexions JTAG.

397398445La présence du JTAG est devenue de plus en plus une certitude, lorsque nous pûmes observer la carte de développement du TI-Phoenix 1, nom de code interne de la gamme TI-Nspire monochrome.

Cette carte datée de décembre 2005 fut utilisée par les ingénieurs Texas Instruments pendant la phase initiale de développement, ayant l'avantage d'exposer à échelle humaine des moyens de contrôle directs des différents composants, y compris ceux renfermés dans la puce ASIC.
Et cette carte comportait justement un bloc dénommé JTAG avec deux connecteurs usuels 14 et 20 broches... :o

3019Ces connecteurs étaient bien évidemment absents des cartes mères miniaturisées des TI-Nspire. Mais nous avons pu remarquer sur les modèles monochromes puis couleur, la présence interne de contacts pour un connecteur J04 manquant à 30 broches. :o

Un connecteur fort bizarrement présent sur les prototypes prêtés par Texas Instruments à divers partenaires et pas toujours récupérés, ce qui fait que certains d'entre eux se retrouvent régulièrement revendus en ligne, notamment en Chine. Un connecteur que nous soupçonnions donc très fortement d'implémenter entre autres le JTAG. ;)

3035Dès octobre 2013 nous récupérions donc une calculatrice TI-Nspire CX munie d'un tel connecteur, et arrivions même à l'identifier ! :D



72137214Désormais munis des bonnes références et connecteurs, près de deux ans et demi après, nous venons enfin de réaliser la toute première connexion JTAG fonctionnelle avec cette calculatrice, à l'aide d'un adaptateur USB/JTAG de chez Olimex, le TMS320-JTAG-USB XDS100 V2 ! :bj:

En effet, une fois la calculatrice connectée le logiciel OpenOCD détecte deux éléments exploitables :
Code: Select all
Open On-Chip Debugger 0.9.0 (2015-08-15-12:41)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 1500 kHz
Warn : Using DEPRECATED interface driver 'ft2232'
Info : Consider using the 'ftdi' interface driver, with configuration files in interface/ftdi/...
Info : device: 6 "2232H"
Info : deviceID: 67348176
Info : SerialNumber: TIWBH0NSA
Info : Description: Texas Instruments Inc.XDS100 Ver 2.0 A
Info : max TCK change to: 30000 kHz
Info : clock speed 1500 kHz
Warn : There are no enabled taps.  AUTO PROBING MIGHT NOT WORK!!
Info : JTAG tap: auto0.tap tap/device found: 0x1b900f0f (mfg: 0x787, part: 0xb900, ver: 0x1)
Info : JTAG tap: auto1.tap tap/device found: 0x07926f0f (mfg: 0x787, part: 0x7926, ver: 0x0)

Les deux éléments ont pour identifiant de fabricant 0x787, ce qui est le code générique pour de la technologie ARM, la même utilisée par le processeur des TI-Nspire, tout colle ! :bj:

A titre d'information pour ceux souhaitant tenter de reproduire l'exploit, le fichier de configuration OpenOCD utilisé à ce jour est le suivant :
Code: Select all
#
# Texas Instruments XDS100v2
#
# http://processors.wiki.ti.com/index.php/XDS100#XDS100v2_Features
#

interface ft2232
ft2232_device_desc "Texas Instruments Inc.XDS100 Ver 2.0"
ft2232_layout xds100v2
adapter_khz 1500


Ce sont de nouveaux horizons qui s'ouvrent aujourd'hui sur TI-Nspire, avec là encore la possibilité de reprogrammer la mémoire NAND des calculatrices hors service, et peut-être de reconfigurer divers autres petites choses intéressantes... ;)



Un grand merci aux nombreuses personnes bien plus compétentes que nous, qui ont bien voulu nous assister et aider sur plusieurs années dans cette tâche inédite pour nous. :bj:

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 07 Aug 2016, 22:18
by Wistaro
Reprogrammer la NAND d'une Nspire...

C'est cool :bj: !

Bientôt l'ASIC de la Nspire n'aura plus de secret :p

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 08 Aug 2016, 06:13
by Lionel Debroux
Pour l'instant, on ne sait pas si c'est possible de reprogrammer la NAND à travers le JTAG. Mais réussir à communiquer avec le JTAG d'une Nspire est une grande avancée :)

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 01 Jan 2018, 21:52
by critor
Fichier de config JTAG un peu plus étoffé, basé entre autre sur celui de la HP Prime :
https://pastebin.com/41Fsa0tM

J'ai supposé que le composant de même ID 0x07926f0f était le cpu ARM.
Aucune idée de comment configurer le second composant 0x1b900f0f détecté si ce n'est pas un cpu.

Code: Select all
#
# Texas Instruments XDS100v2
#
# http://processors.wiki.ti.com/index.php/XDS100#XDS100v2_Features
#

interface ft2232
ft2232_device_desc "Texas Instruments Inc.XDS100 Ver 2.0"
ft2232_layout xds100v2

adapter_khz 60
adapter_nsrst_delay 200
jtag_ntrst_delay 200
reset_config trst_and_srst srst_pulls_trst

# TI-Nspire Navigator
#jtag newtap auto0 tap -irlen 6 -expected-id 0x2b89102f

# TI-Nspire CX
jtag newtap auto0  tap -irlen 4 -expected-id 0x1b900f0f
jtag newtap nspire cpu -irlen 4 -expected-id 0x07926f0f
target create nspire.cpu arm926ejs -endian little -chain-position nspire.cpu

scan_chain
targets


On avance... très doucement :
Code: Select all
>openocd.exe
Open On-Chip Debugger 0.9.0 (2015-08-15-12:41)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 60 kHz
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
trst_and_srst srst_pulls_trst srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
0 auto0.tap              Y     0x00000000 0x1b900f0f     4 0x01  0x03
1 nspire.cpu             Y     0x00000000 0x07926f0f     4 0x01  0x03
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
0* nspire.cpu         arm926ejs  little nspire.cpu         unknown
Warn : Using DEPRECATED interface driver 'ft2232'
Info : Consider using the 'ftdi' interface driver, with configuration files in interface/ftdi/...
Info : device: 6 "2232H"
Info : deviceID: 67348176
Info : SerialNumber: TIWBH0NSA
Info : Description: Texas Instruments Inc.XDS100 Ver 2.0 A
Info : max TCK change to: 30000 kHz
Info : clock speed 60 kHz
Info : JTAG tap: auto0.tap tap/device found: 0x1b900f0f (mfg: 0x787, part: 0xb900, ver: 0x1)
Info : JTAG tap: nspire.cpu tap/device found: 0x07926f0f (mfg: 0x787, part: 0x7926, ver: 0x0)
Info : Embedded ICE version 6

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 01 Jan 2018, 22:42
by critor
Allez, je suis généreux, une petite ligne de plus avec le 2ème élément qui est un boundary scan :
Code: Select all
#
# Texas Instruments XDS100v2
#
# http://processors.wiki.ti.com/index.php/XDS100#XDS100v2_Features
#

interface ft2232
ft2232_device_desc "Texas Instruments Inc.XDS100 Ver 2.0"
ft2232_layout xds100v2

adapter_khz 500
adapter_nsrst_delay 10
jtag_ntrst_delay 200
reset_config trst_and_srst srst_pulls_trst

# TI-Nspire Navigator
#jtag newtap auto0 tap -irlen 6 -expected-id 0x2b89102f

# TI-Nspire
jtag newtap nspire bs  -irlen 4 -expected-id 0x1b900f0f
jtag newtap nspire cpu -irlen 4 -expected-id 0x07926f0f
target create nspire.cpu arm926ejs -endian little -chain-position nspire.cpu

scan_chain
targets



Code: Select all
>openocd.exe
Open On-Chip Debugger 0.9.0 (2015-08-15-12:41)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter speed: 500 kHz
adapter_nsrst_delay: 10
jtag_ntrst_delay: 200
trst_and_srst srst_pulls_trst srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
0 nspire.bs              Y     0x00000000 0x1b900f0f     4 0x01  0x03
1 nspire.cpu             Y     0x00000000 0x07926f0f     4 0x01  0x03
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
0* nspire.cpu         arm926ejs  little nspire.cpu         unknown
Warn : Using DEPRECATED interface driver 'ft2232'
Info : Consider using the 'ftdi' interface driver, with configuration files in interface/ftdi/...
Info : device: 6 "2232H"
Info : deviceID: 67348176
Info : SerialNumber: TIWBH0NSA
Info : Description: Texas Instruments Inc.XDS100 Ver 2.0 A
Info : max TCK change to: 30000 kHz
Info : clock speed 500 kHz
Info : JTAG tap: nspire.bs tap/device found: 0x1b900f0f (mfg: 0x787, part: 0xb900, ver: 0x1)
Info : JTAG tap: nspire.cpu tap/device found: 0x07926f0f (mfg: 0x787, part: 0x7926, ver: 0x0)
Info : Embedded ICE version 6
Info : nspire.cpu: hardware has 2 breakpoint/watchpoint units

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 28 Feb 2018, 23:03
by critor
Je continue à avancer. A pas d'escargot car n'y connaissant pas grand chose et ne recevant aucune aide, mais j'avance.

Bonne nouvelle, les TI-Nspire TouchPad utilisent le même format de connecteur JTAG que les TI-Nspire CX. :bj:

1ère connexion JTAG TI-Nspire TouchPad fonctionnelle ce soir, je raconterai comment dans une news prochainement. :bj:

Je découvre donc les valeurs à configurer comme vous :
Code: Select all
openocd.exe -f openocd.cfg
Open On-Chip Debugger 0.9.0 (2016-09-01) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 500 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : clock speed 500 kHz
Warn : There are no enabled taps.  AUTO PROBING MIGHT NOT WORK!!
Info : JTAG tap: auto0.tap tap/device found: 0xb069316d (mfg: 0x0b6 (ZSP Corp.), part: 0x0693, ver: 0xb)
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 29 -expected-id 0xb069316d"
Warn : gdb services need one or more targets defined
Info : JTAG tap: auto0.tap tap/device found: 0x0792606d (mfg: 0x036 (LSI Logic), part: 0x7926, ver: 0x0)
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
0 auto0.tap              Y     0x0792606d 0x00000000    29 0x01  0x03
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------


Comme conseillé par OpenOCD, je suis passé du pilote ft2232 au pilote ftdi.
Mais pour faire fonctionner correctement mon interface JTAG dans ce cas le fichier de config est plus compliqué, lançant la détection 2 fois et obtenant je suppose de mauvaises valeurs la première fois.

Contrairement aux CX, le fabricant de la puce principale sur les TouchPad n'est donc pas TI (0x787), mais LSI Logic (0x036).

Voici donc la config qui vient avec, et que j'ai améliorée depuis la dernière fois, pour pouvoir basculer facilement entre :
  • nos différents appareils avec JTAG que je peux connecter à ce jour et donc leurs configs (TI-Nspire CX, TI-Nspire TouchPad, TI-Nspire ViewScreen, TI-Nspire Navigator)
  • mes interfaces JTAG (j'en ai pris une deuxième exprès pour le connecteur 20 broches TI-Nspire ViewScreen mais ne suis arrivé à rien avec à date)
  • les pilotes ft2232 et ftdi, puisque OpenOCD recommande fortement de passer à l'ftdi et que la nouvelle interface JTAG marche encore moins bien avec l'ancien pilote
Code: Select all
#set DRV "ft2232"
set DRV "ftdi"

set INT "xds100v2"
#set INT "tinyh"

#set TRG "navigator"
#set TRG "viewscreen"
set TRG "nspire"
#set TRG "cx"
#set TRG "none"

# *** DRIVERS ***
interface $DRV

# *** INTERFACES ***
if { $INT=="xds100v2" } {
   set INT_DESC "Texas Instruments Inc.XDS100 Ver 2.0"
   set INT_VID 0x0403
   set INT_PID 0xa6d0
}
if { $INT=="tinyh" } {
   set INT_DESC "Olimex OpenOCD JTAG ARM-USB-TINY-H"
   set INT_VID 0x15ba
   set INT_PID 0x002a
}
if { $DRV=="ft2232" } {
   ft2232_device_desc "$INT_DESC"
   ft2232_vid_pid $INT_VID $INT_PID
   ft2232_layout $INT
}
if { $DRV=="ftdi"} {
   ftdi_vid_pid $INT_VID $INT_PID
   if { $INT=="xds100v2"} {
      ftdi_layout_init 0x0038 0x597b
      ftdi_layout_signal nTRST -data 0x0010
      ftdi_layout_signal nSRST -oe 0x0100
      ftdi_layout_signal EMU_EN -data 0x0020
      ftdi_layout_signal EMU0 -oe 0x0040
      ftdi_layout_signal EMU1 -oe 0x1000
      ftdi_layout_signal PWR_RST -data 0x0800
      ftdi_layout_signal LOOPBACK -data 0x4000
   }
   if { $INT=="tinyh"} {
      ftdi_layout_init 0x0808 0x0a1b
      ftdi_layout_signal nSRST -oe 0x0200
      ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100
      ftdi_layout_signal LED -data 0x0800
   }
   transport select jtag
}

adapter_khz 500

# *** TARGETS ***
if { $TRG=="navigator" } {   # TI-Nspire Navigator access point
   jtag newtap nsnav jrc -irlen 6 -expected-id 0x2b89102f -ircapture 0x1 -irmask 0x3f
   target create nsnav.jrc cortex_a -chain-position nsnav.jrc
}
if { $TRG=="viewscreen" } {   # TI-Nspire+ calculator / TI-Nspire ViewScreen
   jtag newtap nspirep cpu -irlen 4 -expected-id 0x0692602f
   jtag newtap nspirep unknown -irlen 2 -expected-id 0x00000000 -ircapture 0x1 -irmask 0x3
   target create nspirep.cpu arm926ejs -endian little -chain-position nspirep.cpu
}
if { $TRG=="cx" } {   # TI-Nspire CX calculator
   jtag newtap nspire bs  -irlen 4 -expected-id 0x1b900f0f
   jtag newtap nspire cpu -irlen 4 -expected-id 0x07926f0f
   target create nspire.cpu arm926ejs -endian little -chain-position nspire.cpu
}
if { $TRG=="nspire" } {   # TI-Nspire calculator
   jtag newtap nspire cpu -irlen 4 -expected-id 0x0792606d
   target create nspire.cpu arm926ejs -endian little -chain-position nspire.cpu
}

init
if { $DRV=="ftdi"  && $INT=="xds100v2"} {
   ftdi_set_signal PWR_RST 1
   jtag arp_init
}

scan_chain
targets


Et le résultat : :)
Code: Select all
openocd.exe -f openocd.cfg
Open On-Chip Debugger 0.9.0 (2016-09-01) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
adapter speed: 500 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : clock speed 500 kHz
Info : JTAG tap: nspire.cpu tap/device found: 0x0792606d (mfg: 0x036 (LSI Logic), part: 0x7926, ver: 0x0)
Info : Embedded ICE version 6
Info : nspire.cpu: hardware has 2 breakpoint/watchpoint units
Info : JTAG tap: nspire.cpu tap/device found: 0x0792606d (mfg: 0x036 (LSI Logic), part: 0x7926, ver: 0x0)
   TapName             Enabled  IdCode     Expected   IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
0 nspire.cpu             Y     0x0792606d 0x0792606d     4 0x01  0x03
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
0* nspire.cpu         arm926ejs  little nspire.cpu         running

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 07 Mar 2018, 12:39
by critor
Annoncé le connecteur JTAG TI-Nspire TouchPad :
viewtopic.php?f=43&t=21141#p228087

Re: 1ère connexion JTAG fonctionnelle sur TI-Nspire CX

Unread postPosted: 17 Mar 2018, 18:39
by critor
Connexion maintenant annoncée : :)
viewtopic.php?f=43&t=21190&p=228647#p228647