Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 28 774 614

  • Nb. de membres 189
  • Nb. d'articles 1 278
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» JTAG SAM460 (1)

JTAG SAM460 (1)#2743

8Contributeur(s)
XTOK-LJOBElwoodcortosinisrusPseudaxosdavebraco
3 Modérateur(s)
K-LElwoodcorto
XTO XTOicon_post
Bonjour,

Voici un petit post sur l'utilisation d'une sonde JTAG BDI2000 sur une SAM460Ex avec Amiga OS

La sonde BDI2000 n'est plus produite depuis longtemps mais peut se trouver sur Ebay.
Elle permet un debug en gélant completement le CPU et permet d'afficher les etats des registres/cache/MMU/.. du CPU
Elle dispose d'une interface de commande propriétaire pour faire des actions tres bas niveau ( halt et go du CPU et affcher des états)
Et aussi d'un interface GDB permetttant du debug source.

Voici un exemple de ce que l'on peut voir avec l'interface de commande propriétaire.

Je demarrre la carte et je lance la commande 'halt' alors que le CPU est toujours dans le Uboot.
On observe par exemple l'etat de la MMU avec la commande 'TLB 0 0xffffffff'

460EX>tlb 0 0xffffffff
IDX TID EPN SIZE VTS RPN USER WIMGE USRSVC
0 : 00 f0000000 256MB V0 -> 4_f0000000 U:0000 WI-G- XWRXWR
1 : 00 d0000000 256MB V0 -> c_00000000 U:0000 -I-G- -WR-WR
2 : 00 80000000 256MB V0 -> c_80000000 U:0000 -I-G- -WR-WR
3 : 00 90000000 256MB V0 -> c_90000000 U:0000 -I-G- -WR-WR
4 : 00 a0000000 256MB V0 -> d_a0000000 U:0000 -I-G- -WR-WR
5 : 00 b0000000 256MB V0 -> d_b0000000 U:0000 -I-G- -WR-WR
6 : 00 c0000000 256MB V0 -> d_c0000000 U:0000 -I-G- -WR-WR
7 : 00 e0000000 16MB V0 -> d_00000000 U:0000 -I-G- -WR-WR
8 : 00 e1000000 16MB V0 -> d_20000000 U:0000 -I-G- -WR-WR
9 : 00 e3000000 1KB V0 -> d_10000000 U:0000 -I-G- -WR-WR
10 : 00 e3001000 1KB V0 -> d_30000000 U:0000 -I-G- -WR-WR
11 : 00 e4000000 16KB V0 -> c_08010000 U:0000 -I-G- -WR-WR
12 : 00 e5000000 1MB V0 -> 4_00000000 U:0000 -I--- XWRXWR
13 : 00 ef000000 16MB V0 -> 4_ef000000 U:0000 -I-G- XWRXWR
14 : 00 e2000000 1MB V0 -> 4_bff00000 U:0000 -I-G- XWRXWR
15 : 00 00000000 256MB V0 -> 0_00000000 U:0000 -I--- XWRXWR
16 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- XWRXWR
17 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
18 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
19 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
20 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
21 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
22 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
23 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
24 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
25 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
26 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
27 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
28 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
29 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
30 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
31 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
32 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
33 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
34 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
35 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
36 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
37 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
38 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
39 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
40 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
41 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
42 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
43 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
44 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
45 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
46 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
47 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
48 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
49 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
50 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
51 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
52 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
53 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
54 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
55 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
56 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
57 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
58 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
59 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
60 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
61 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
62 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
63 : 00 00000000 1KB -0 -> 0_00000000 U:0000 ----- ------
On observe un etat de la MMU assez simple avec beaucoup de TLB (de 17 a 63) resté a 0.

Puis on continue l'execution avec la commande 'go' et on s'arrete avec la commande 'halt' lorsque l'on se trouve dans AmigaOS.
on observe l'etat de la MMU.

460EX>tlb 0 0xffffffff
IDX TID EPN SIZE VTS RPN USER WIMGE USRSVC
0 : 00 62171000 4KB V1 -> 0_03215000 U:0000 ----- -WR-WR
1 : 00 ffcbc000 4KB V1 -> 0_02f11000 U:0000 ----- -WR-WR
2 : 00 6ffaa000 4KB V1 -> 0_00057000 U:0000 ----- -WR-WR
3 : 00 ffff4000 4KB V1 -> 0_7fffe000 U:0000 ----- -WR-WR
4 : 00 7fa33000 4KB V1 -> 0_7d369000 U:0000 ----- X-RX-R
5 : 00 7fa34000 4KB V1 -> 0_7d36a000 U:0000 ----- X-RX-R
6 : 00 7fa32000 4KB V1 -> 0_7d368000 U:0000 ----- X-RX-R
7 : 00 7fa5b000 4KB V1 -> 0_7d317000 U:0000 ----- X-RX-R
8 : 00 60391000 4KB V1 -> 0_7d1ac000 U:0000 ----- -WR-WR
9 : 00 6ffae000 4KB V1 -> 0_0004f000 U:0000 ----- -WR-WR
10 : 00 6fffe000 4KB V1 -> 0_00009000 U:0000 ----- -WR-WR
11 : 00 60393000 4KB V1 -> 0_7d1ae000 U:0000 ----- -WR-WR
12 : 00 6ff9d000 4KB V1 -> 0_0005d000 U:0000 ----- -WR-WR
13 : 00 6fd54000 4KB V1 -> 0_023f9000 U:0000 ----- -WR-WR
14 : 00 6003b000 4KB V1 -> 0_7d4ae000 U:0000 ----- -WR-WR
15 : 00 ffbf6000 4KB V1 -> 0_7d183000 U:0000 ----- -WR-WR
16 : 00 60ffe000 4KB V1 -> 0_7ea8f000 U:0000 ----- -WR-WR
17 : 00 62ca4000 4KB V1 -> 0_7c98a000 U:0000 ----- -WR-WR
18 : 00 ffcc0000 4KB V1 -> 0_00cdd000 U:0000 ----- -WR-WR
19 : 00 61005000 4KB V1 -> 0_7ea86000 U:0000 ----- -WR-WR
20 : 00 621bd000 4KB V1 -> 0_02e83000 U:0000 ----- -WR-WR
21 : 00 621be000 4KB V1 -> 0_02e84000 U:0000 ----- -WR-WR
22 : 00 6ff6e000 4KB V1 -> 0_7ffd5000 U:0000 ----- -WR-WR
23 : 00 61b0a000 4KB V1 -> 0_7e45c000 U:0000 ----- -WR-WR
24 : 00 6ff1b000 4KB V1 -> 0_7ffbb000 U:0000 ----- -WR-WR
25 : 00 6ff60000 4KB V1 -> 0_0017a000 U:0000 ----- -WR-WR
26 : 00 61b14000 4KB V1 -> 0_7d2ff000 U:0000 ----- -WR-WR
27 : 00 621b1000 4KB V1 -> 0_02f49000 U:0000 ----- -WR-WR
28 : 00 02300000 256KB V1 -> 0_02300000 U:0000 ----- -WR-WR
29 : 00 02200000 1MB V1 -> 0_02200000 U:0000 ----- -WR-WR
30 : 00 02100000 1MB V1 -> 0_02100000 U:0000 ----- -WR-WR
31 : 00 02000000 1MB V1 -> 0_02000000 U:0000 ----- -WR-WR
32 : 00 01f00000 1MB V1 -> 0_01f00000 U:0000 ----- X-RX-R
33 : 00 01e00000 1MB V1 -> 0_01e00000 U:0000 ----- X-RX-R
34 : 00 01d00000 1MB V1 -> 0_01d00000 U:0000 ----- X-RX-R
35 : 00 01c00000 1MB V1 -> 0_01c00000 U:0000 ----- X-RX-R
36 : 00 01b00000 1MB V1 -> 0_01b00000 U:0000 ----- X-RX-R
37 : 00 01a00000 1MB V1 -> 0_01a00000 U:0000 ----- X-RX-R
38 : 00 01900000 1MB V1 -> 0_01900000 U:0000 ----- X-RX-R
39 : 00 01800000 1MB V1 -> 0_01800000 U:0000 ----- X-RX-R
40 : 00 01700000 1MB V1 -> 0_01700000 U:0000 ----- --R-WR
41 : 00 01600000 1MB V1 -> 0_01600000 U:0000 ----- --R-WR
42 : 00 01500000 1MB V1 -> 0_01500000 U:0000 ----- --R-WR
43 : 00 01400000 1MB V1 -> 0_01400000 U:0000 ----- --R-WR
44 : 00 01300000 1MB V1 -> 0_01300000 U:0000 ----- --R-WR
45 : 00 01200000 1MB V1 -> 0_01200000 U:0000 ----- --R-WR
46 : 00 01100000 1MB V1 -> 0_01100000 U:0000 ----- --R-WR
47 : 00 01000000 1MB V1 -> 0_01000000 U:0000 ----- --R-WR
48 : 00 e0040000 64KB V1 -> 4_00040000 U:0000 -I-G- -WR-WR
49 : 00 e0100000 64KB V1 -> 4_00100000 U:0000 -I-G- -WR-WR
50 : 00 ff000000 4KB V1 -> 4_ff000000 U:0000 -I-G- -WR-WR
51 : 00 ff000000 4KB V0 -> 4_ff000000 U:0000 -I-G- -WR-WR
52 : 00 e9000000 16MB V1 -> d_e9000000 U:0000 -I-G- -WR-WR
53 : 00 e9000000 16MB V0 -> d_e9000000 U:0000 -I-G- -WR-WR
54 : 00 e2000000 1MB V0 -> 4_bff00000 U:0000 -I-G- -WR-WR
55 : 00 eec00000 1MB V0 -> c_0ec00000 U:0000 -I-G- -WR-WR
56 : 00 e8000000 16MB V0 -> c_08000000 U:0000 -I-G- -WR-WR
57 : 00 e2000000 1MB V1 -> 4_bff00000 U:0000 -I-G- -WR-WR
58 : 00 eec00000 1MB V1 -> c_0ec00000 U:0000 -I-G- -WR-WR
59 : 00 e8000000 16MB V1 -> c_08000000 U:0000 -I-G- -WR-WR
60 : 00 ef000000 16MB V0 -> 4_ef000000 U:0000 -I-G- -WR-WR
61 : 00 ef000000 16MB V1 -> 4_ef000000 U:0000 -I-G- -WR-WR
62 : 00 40000000 1GB V0 -> 0_40000000 U:0000 ----- XWRXWR
63 : 00 00000000 1GB V0 -> 0_00000000 U:0000 ----- XWRXWR

On oberve une programmation bien plus riche.
Les connaisseurs reconnaitront les zones OS et Application ainsi que les zones I/O.

Je tente le debug avec l'interface GDB au lieu cette interface de commande propriétaire pour un prochain Post.

Christophe.



Amiga 500 / SAM460LE / SAM460EX
K-L K-Licon_post
Intéressant !

Mais question de noob : quelles sont les applications concrètes de l'utilisation de ce connecteur ?
--
AmigaONE X1000 1,8 Ghz (A-Eon), Radeon RX560, 2 Go de Ram et OS4.1 FE
Sam460LE 1,14 Ghz (ACube Systems), Radeon RX560, 2 Go de Ram et OS4.1 FE
XTO XTOicon_post
Une sonde JTAG est obligatoire pour mettre au point le BOOT. (Quand je dis mettre au point, je veux dire Debugger)
Elle est aussi obligatoire pour mettre au point les couches basses de l'OS.
Si l'OS ne propose pas de service de debug pour le developpement des drivers, elle est aussi nécessaire pour mettre au point les drivers.
Et pareil pour les applications mais c'est rare car tous les OS propose une solution logicielle avec du GDB.

Ensuite, la sonde est obligatoire pour investiguer des cas de plantage du system complet, c'est la seule solution pour observer quelque chose et espérer comprendre l'origine du plantage quand tout est bloqué.

La sonde permet aussi posteriori d'observer comment un logiciel comme un boot ou un OS a mis en oeuvre les ressources du CPU, c'est ce que que je montre dans mon post précédent.
Ca peut donc servir a du retro-ingenierie.

Je profite de ce post pour lancer un appel pour savoir si quelqu'un à la documentation du CPU de la SAM460EX: le Users's Manual du CPU PPC460EX.
Il parait qu'il se nommme "PPC460EX_460EXr_460GT_UM2024.pdf"
Amiga 500 / SAM460LE / SAM460EX
K-L K-Licon_post
Je n'ai pas ce document (Elwood ?).

Merci pour ces explications, on est vraims sur du très bas niveau. Quelle est la différence avec une liaison série ?
--
AmigaONE X1000 1,8 Ghz (A-Eon), Radeon RX560, 2 Go de Ram et OS4.1 FE
Sam460LE 1,14 Ghz (ACube Systems), Radeon RX560, 2 Go de Ram et OS4.1 FE
JOB JOBicon_post
Une liaison série nécessite la "coopération" logicielle de l'ordinateur, c'est-à-dire qu'il faut qu'il y ait du code (applicatif ou dans l'OS) qui tourne et qui lise les octets arrivant sur l'interface série et les interprète. C'était par exemple le cas du ROMWack des premiers Amiga. A contrario, le JTAG est directement gravé dans le silicium du processeur. A l'origine, le but du JTAG était de permettre le test poussé du processeur avant sa sortie d'usine, en allant exercer sa logique interne au moyen de vecteurs de test. Par la suite, il a naturellement été étendu au debug logiciel.
K-L K-Licon_post
Merci pour toutes ces précisions !
--
AmigaONE X1000 1,8 Ghz (A-Eon), Radeon RX560, 2 Go de Ram et OS4.1 FE
Sam460LE 1,14 Ghz (ACube Systems), Radeon RX560, 2 Go de Ram et OS4.1 FE
Elwood Elwoodicon_post
Citation : XTO
Je profite de ce post pour lancer un appel pour savoir si quelqu'un à la documentation du CPU de la SAM460EX: le Users's Manual du CPU PPC460EX.


Mail envoyé :-)

Merci pour les explications. ça me fait fortement pensé aux Action Replay mais je suppose que celles-ci fonctionnent en se connectant sur le bus mémoire.

Et sinon, quel est ton objectif d'utiliser ce JTAG ? Tu développes quelque chose en particulier ?
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
 Message édité par : Elwood / 12-11-2023 21:50
corto cortoicon_post
@XTO C'est vraiment génial que tu ais pu faire fonctionner ta sonde avec la Sam460 !! Je suis bien sûr curieux de voir comment tu as procédé, ce qui a été nécessaire, au niveau matériel et logiciel, s'il y a eu des difficultés, quelle sont été les étapes, les points d'attention ...

J'aimerais être en mesure de pouvoir faire cela par exemple sur la Sam440 !

Ce qui serait intéressant à terme, c'est d'avoir un cas concret où l'usage d'un JTAG a pu dépanner.

Pour le manuel 460ex ... je n'ai rien trouvé de détaillé, juste le manuel sur lequel tu as dû tombé. En suivant la voie officielle, je crains qu'on n'obtienne rien sachant qu'AMCC a été revendu plusieurs fois ...
X1000 - 8GB - Radeon HD6570
Sam440 flex - Radeon 9250
XTO XTOicon_post
@Elwood
Avec le JTAG, j'ai envie de porter le debugger que je développe et commercialise, en le portant sur d'autres cartes, cela révèle souvent des bugs dormant s ou qui n'apparaissent pas ou peu sur d'autres cartes.
Voici une version free du debugger sur rapsberry-pi pour les curieux : https://github.com/farjump/raspberry-pi
Pour le moment cela n'a rien a voir avec AmigaOS, car mon debugger serait lancé par le Uboot pour permettre du developpement baremetal sur la SAM460.

Et dans un second temps, il serait possible de fait coexister mon debugger avec AmigaOS.

@corto
Pour mettre en oeuvre le JTAG sur une SAM460, j'ai utilisé une sonde Abatron BDI2000 qui peut se trouver sur ebay ( abatron ne produit plus depuis des années), il a 3 parties, le boitier principale, l'alimentation et le cable de connection entre le boitier principale et le CPU. (l'alimentation et le cable sont assez classique et peuvent se bricoler facilement).
Une BDI2000 permet le debug JTAG de nombreux CPU: PPC , ARM, MIPS ...
Il existe un firmware specifique au PPC440 a installer dans le boitier principale. Il existe un logiciel windows pour realiser l'ecriture de ce firmware et qui se trouve dans le meme ZIP que le firmware PPC440.
Il te faut ensuite un tftp server, client telnet et un logiciel GNU GDB pour powerpc, moi je developpe sous linux mais tu peux aussi utiliser Windows.

Concrètement, tu pourrais avec le JTAG mettre au point un nouvel Uboot (plus moderne ou avec des features custom). On peut avec le JTAG observer l'etat des caches pour avoir une petite idée si une configuration autres des caches ne permettrait pas d'avoir de meilleurs perfos. Mettre au point et faire tourner un freeRTOS au lieu d'un AMIGAOS en sorti de uboot......

J'ai pu trouver la documentation que je cherchais, merci pour voitre aide.

Amiga 500 / SAM460LE / SAM460EX
sinisrus sinisrusicon_post
@XTO

Je ne sais pas si cela pourrais permettre de savoir pourquoi il n'est pas possible de porter "GART" sur sam460 (apparemment c'est un problème de décohérence de cache si j'ai bien compris) mais si c'est le cas ça serait génial car actuellement niveau 3D sans GART la sam460 est à la ramasse :-(
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme