Microkontroller - JTAG

Started by asgard, 09. Jan 2008, 17:15

previous topic - next topic
Go Down

asgard

Hallo Zusammen,

vielleicht haben wir den ein oder anderen hier, der sich gut mit Mikrokontrollern auskennt und Lust hat ein wenig mitzuhelfen ;)

Es wäre schon, wenn sich jemand melden würde, der den Bootloader-Patcher in eine Mikrokontroller-Variante umsetzt.

Sourcecode vom patcher ist hier verfügbar:
http://www.t-hack.com/wiki/index.php/Disable_X300T_Signature_Check

Es soll eine lösung entstehen, mit der es möglich ist, einen Mikrokontroller direkt auf den Jtag-Anschluss der X30XT zu löten. Dieser soll dann den Bootloader patchen, damit man die Box nicht immer am rechner haben muss...(über jtag verbunden)

Ich persönlich hab leider viel zu wenig erfahrung...dachte es sei leichter...

Grüße
Asgard

The Invisible

ich hab hierzu mal topsoft angeschrieben ob der sowas anbieten könnte er ist derjenige der sowas für den 1000er humax gemacht hat damit man nicht immer über pc booten muss. vielleicht meldet er sich ja.

T-Paul

Habe mich eben mit einem guten Bekannten (ein ziemlicher Elektronik Freak) über ne Microcontroller Lösung unterhalten. Da er selber hier nicht aktiv ist, hat er mich gebeten dies hier für Ihn zu posten:

Quote

Die Software ist sicher mit einem Microcontroller machbar wenns über den parallelport geht. Es dürfte sogar ein einfacher 8051 Prozessor (der hat einen 8 Bit Datenbus) ausreichen, die Pins des Datenbusses kannste wie den Parallelport softwaretechnisch für viele Zwecke misbrauchen, also müsste die Software in 8051 ASM übersetzt werden, bzw. viel einfacher mit einem C Compiler für 8051 Prozessoren umgesetzt werden. (geht natürlich NICHT 1:1). Achso nochwas: je nach dem was genau zu machen ist (an signalen) ist evtl. sogar ein einfacherer chip möglich, das könnte man sagen nachdem man das C Proggie mal durchpflügt hat.


Hab das nun mal 1:1 aus ICQ rüber kopiert.
Freiheit statt Angst -- Stoppt den Überwachungswahn!
-> Keine Stasi 2.0! <-
http://www.freiheitstattangst.de

mce2222

mit einem 8051 wirds bestimmt gehen, aber ich denke das dürfte etwas overpowered sein ;)

ein PIC12F629 die optimale Lösung sein. Der hat 8pins, kommt mit 2-5.5V klar, eingebauten Oszillator, 1KB Flash und kostet fast nichts ;)
keinerlei externe Beschaltung notwendig... also 7 kabel ran und fertig... vielleicht noch ein achtes wenn wir irgendwo eine Reset Leitung auftreiben.

plenkk

Ich könnte das eigentlich spaßeshalber mal in AVRASM (bin kein PIC-Mensch :)) bauen. Fertige JTAG-Lösungen dafür dürfte es ja auf jeden Fall geben. Muss mal schauen, ob ich noch einen kleinen AVR rumliegen habe.

Ist der X30xT komplett 3.3V?

Paul

+ - 0,2v was ich so gemessen hab

asgard


Ich könnte das eigentlich spaßeshalber mal in AVRASM (bin kein PIC-Mensch :)) bauen. Fertige JTAG-Lösungen dafür dürfte es ja auf jeden Fall geben. Muss mal schauen, ob ich noch einen kleinen AVR rumliegen habe.


da bin ich ja gespannt :)! Freu mich schon auf deine Lösung!

plenkk

Erstmal muss ich JTAG an meinem X301 aktivieren... mal sehen, ob ich das hinbekomme mit der Lötstelle. Habe ihn ja erst seit zwei Tagen :D

Wenn mir jemand einen X300 zuschickt, gehts schneller ;D

Paul

zuschiken nicht aber da können wir ggf schon was deichseln das bei mir auf dem testen kannst.

hardware sollte alles vorhanden sein (fun pic atmels progger usw.) jtag ist gemoddet und läuft.


asgard

Hey plenkk,


Erstmal muss ich JTAG an meinem X301 aktivieren... mal sehen, ob ich das hinbekomme mit der Lötstelle. Habe ihn ja erst seit zwei Tagen :D



wie sieht's aus? Jtag schon am laufen? Ich warte schon ganz sehnsüchtig auf dein ergebnis  ::)

Im Notfall leihe ich dir meine X300T...  :P

plenkk

Ja, beim zweiten Versuch läuft nun JTAG, seit gerade eben. Zumindest läuft gerade das Dump-Tool und hat keine Fehlermeldung geworfen.

Könnte gut sein, dass ich in ein paar Tagen soweit bin mit dem "Modchip" :)

asgard


Könnte gut sein, dass ich in ein paar Tagen soweit bin mit dem "Modchip" :)



gogogogo!  ;D

Jabberwock

Hallo, ich bin ganz neu hier und über den Umbau meiner S100 auf das Forum hier gestoßen. Ich mich den Vormittag mal eingelesen. Ist ja alles sehr interessant was ihr schon geschafft habe. Vor allem in der recht kurzen Zeit.

Ich könnte vielleicht behilflich sein bei der Programmierung des Modechip. Ich habe schon ein paar Sachen mit AVRs gemacht und hätte auch Lust meinen Beitrag zu leisten. Ich habe zwar noch keine Box aber macht ja nix.

@plenkk: Ich würde mich freuen wenn ich dir behilflich sein darf.
Wie weit bist du denn schon?  Vielleicht können wir uns ein bisschen austauschen.
Arbeitet sonst noch wer daran?

Ich habe mir mal den Code angeschaut, weiß aber nicht ob ich das richtig verstanden habe.

Eigentlich muss doch nur die bootloderversion ermittelt werden und dann die Endsprechenden Daten an die richtige Adressen geschrieben werden, oder?
Also vereinfacht dargestellt müsste es diese Funktion sein um die Version zu bekommen
Code: [Select]


void apply_patch(char *filename, unsigned int start, unsigned int length)
{

if (!patchOk)
{
patchOk = patch1053();
}

if (!patchOk)
{
patchOk = patch1051();
}

if (!patchOk)
{
patchOk = patch1039();
}

if (patchOk)
{
printf("Patch applied !\n");
    printf("...   now press OK Button on the X300T.\n");

}
else
{
printf("unknown Bootloader version. please dump it !\n");
}
}



und diese um die Daten zu lesen und zu schreiben.  Dazu muss natürlich eine JTAG Kommunikation mit dem Prozessor aufgebaut werden und vielleicht noch einen seriellen Output um zu sehen was passier.

Code: [Select]


boolean patch1053()
{
unsigned int addr1, addr2, data1, data2, data3, data4;
addr1 = 0x93640150;
data1 = ejtag_read(addr1);
data2 = ejtag_read(addr1+4);
// printf("0x93640150: %x%x\n", data1, data2);
if (data1 != 0x0cd8dce4 || data2 != 0x24040001)     // Auswerten der Daten
{
return false;
}

addr2 = 0x93640250;
data3 = ejtag_read(addr2);
data4 = ejtag_read(addr2+4);
// printf("0x93640250: %x%x\n", data3, data4);
if (data3 != 0x0cd8dce4 || data4 != 0x24040001)
{
return false;
}

printf("Bootloader Version 1053 found\n");
ejtag_write(addr1, 0x10000019);   //  jal 0x93637390   -->  b 0x936401B8
ejtag_write(addr1+4, 0x00);
ejtag_write(addr2, 0x1000ffd9);   //  jal 0x93637390   -->  b 0x936401B8
ejtag_write(addr2+4, 0x00);
// hash always correct
ejtag_write(0x93641E90, 0x00000000);   //  b loc_93641EA8  -->  NOP    //Wenn alle daten zu der Version passen schreibe an die Adresse

// signature skip flag
addr1 = 0x937E1728;
ejtag_write(addr1, 0x01000000);                             //Signatur skip flag immer gleich!!!!
return true;
}

boolean patch1051()
{usw.



Habe ich in dem Code was übersehen? Sind noch mehr Sachen nötig um den bootloader zu patchen, oder sind das nur die zwei Adressen die da geändert werden?

1. Also JTAG Verbindung zu dem Prozessor aufbauen
2. Adressen 1, 2, 3, 4, lesen und vergleichen zu welcher Version das passt
3. Passende Daten schreiben
Fertig!

Würde mich freuen wenn das was werden würde.
Die Box scheint ja wirklich ein sehr interessantes Gerät zu sein. 

Mfg
Jabberwock 

andi

hey,

also grob zusammengefasst sind die 3 punkte völlig ausreichend!
mich würde auch mal interessieren, wie weit denn plenkk nun gekommen ist?

hier wurde ja die version mit pic favorisiert. da ich persönlich eher aus die avr's bevorzuge, könnte ich mir auch ne realisierung mit attiny11/12 vorstellen ..


grüße
andi

Jabberwock

Hi,

ich habe den Code mal im AVRStudio eingefügt und ein bisschen angepasst aber ganz lässt es sich nicht kompelliert 
Ich habe immer noch 3 Fehler die ich nicht wegbekomme. Ganz zu schweigen von den vielen Warnungen. Da sind auch ein Haufen Variablen die gar nicht genutzt werden. Ich glaube den Code so direkt aus dem Windows Programm zu übernehmen wird nicht so einfach. Zwar sind die Funktionen zum lesen und scheiben schon ok so nur wird die Verbindung ja über den Parallelport hergestellt und den gibt es ja hier nicht. Ich habe leider keine Ahnung wie ich so eine Verbindung zu dem Prozessor herstellen könnte.

Ich habe aber eine Idee, es gibt diesen nachbau JTAGICEhttp://www.uc-projects.com/JTAG_Software.htm und es gibt ein Kommunikationsprotokoll   http://www.atmel.com/dyn/resources/prod_documents/doc2524.pdf. Der Programmer wird seriell angesprochen. Wenn man jetzt an den Code des Programmes kommt könnte man ihn dazu bringen die entsprechenden Aktionen durchzuführen in dem er die Befehle per URAT an sich selber sendet. Also einfach den RX Pin mit dem TX Pin verbinden. Das müsste eigentlich gehen. Nur weiß ich nicht ob man an den Code des Programmers kommt. Oder man nimmt einen zweiten Chip der die Befehle dann an den Programmer sendet. Dann müsste der Code nicht geändert werden.

Ich glaube ich werde mir erstmal eine Box besorgen müssen bevor es weiter gehen kann…

Go Up