Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Jabberwock

1
Software / Re: Microkontroller - JTAG
04. Mar 2008, 12:36
Ok, da ist kein Quarz drin sonder ein Oszillator. Ein Bauteil das die Funktion eines Quarzes nachahmt, also Takte erzeugt. Dieser ist aber sehr ungenau in seiner Frequenz. Deshalb kommt es zu Problemen mit der seriellen Übertragung von Daten. Das kann man am einfachsten umgehen in dem man einen "echten" Quarz nimmt, oder den internen kalibriert.

Die Fusebits kann ich dir auch nicht aus dem Kopf sagen. Einfach erstmal so lassen. Wenn du da nichts verstellt hast sollte das schon passen.

JTAG und UART können parallel laufen.
Aber am Rechner kannst du nur per UART etwas empfangen

Für JTAG kannst du PORT A nehmen. Wenn alles so geht wie ich mir das denke dann müsste das mit der Belegung passen.

Portpin |  Pin am JTAGkabel/ParallelPort
PA0     =     frei
PA1     =     Pin 4
PA2     =     Pin 3
PA3     =     Pin 2
PA7     =     Pin 13
GND    =      GND 

Aber wie schon gesagt, das geht noch nicht...
Hast du denn die UART Schnittstelle schon am laufen? Bekommst du eine Antwort im Terminal?
Bevor das nicht geht brauchen wir nicht weiter machen weil wir nicht sehen können was passiert.
2
Software / Re: Microkontroller - JTAG
04. Mar 2008, 09:23
Also das wird so nicht funktionieren... da muss noch einiges an Debugarbeit getan werden und sei mir nicht böse aber wenn du schon scheiterst beim aufspielen der .hex dann wird das wohl eher schwierig  werden.

Es kann damit noch nichts gepatcht werden!!! Es müsste jetzt erstmal geschaut werden ob die serielle Schnittstelle funktioniert, ich denke nicht dass es geht weil der interne Oszillator zu ungenau ist. Aber das kann man hinbekommen. Bei mir geht sie aber ich habe einen anderen uC, ohne die wird das weitere Debuggen sehr schwierig.
Wenn das geht dann kann man anfangen Bits an das JTAG zu senden und zu schauen was die Box davon hält. Dazu ist es aber nötig weiter zu programmieren. Eigentlich kann jetzt jeder daran weiter basteln.
Ich würde den AVR erstmal mit einer externen Spannung versorgen und dann per ISP http://s-huehn.de/elektronik/avr-prog/avr-prog.htm und PonnyProg die .hex drauf schieben. Im Datenbaltt die Pins (RX, TX, GND) des UART (serielle Schnittstelle) suchen und mit einem Stecker für den Rechner versehen. Dann im Terminal schauen ob bei Eingabe von "1" die Antwort "Verbindung OK" kommt. Wenn nicht, am einfachsten einen Quarz nutzen. Welche Frequenz ist eigentlich egal, muss dann halt im Programm angepasst werden.

Wenn das geht suchen wir uns ein paar Pins aus an die das JTAG kabel kommt. Aber erstmal Grundlagen schaffen...

mfg
Jabberwock

3
Software / Re: Microkontroller - JTAG
03. Mar 2008, 09:28
Hi, ich habe dir das jetzt mal passend für den Mega32 gemacht.
Ich nutze AVRStudio mit GCC. In dem .Zip ist das komplette Projekt mit fertigem .hex drin.

Wenn du den hexfile auf dem Chip hast kannst du ihn per rs232 an den Rechner hängst und solltest dann im Terminal. (9600 8N1 Fluss= keine) bei Eingabe einer "1" den String "Verbindung OK" bekommen. Wenn das nicht geht. Haut die serielle Verbindung nicht hin. Dann würde ich einen externen Quarz empfehlen. Weil ohne hast du keine debugmöglichkeit. Später kann man das ja dann weg lassen. Wenn es geht kannst du mit "2" den Patchvorgang starten.

Es sind noch keine Pins für das Wigglerkabel festgelegt. Am besten erstmal testen ob es überhaupt läuft. Dann können wir weiter sehen.
In dem Code kannst du per "uart_puts("debug")"  ausgaben erzeugen.

Es ist noch nicht fertig!!!! Aber ohne Box kann ich erstmal nicht mehr viel machen.
Wenn Fragen sind, Mail oder (icq: 269780240)


EDIT: Müsste auch auf ATMega16 laufen

mfg
Jabberwock
4
Software / Re: Microkontroller - JTAG
28. Feb 2008, 12:42
Es ist jetzt für den Butterfly angepasst weil ich keinen anderen hier habe. Da benutze ich den externen Uhrenquarz um den internen Oszillator zu kalibrieren. Das wird natürlich auf dem Mega32 dann nicht gehen, kann sein das dann die rs232 nicht richtig geht. Außerdem werden einige Register nicht passen. Aber ich kann es dir schicken und du kannst es versuchen. 
Das gilt auch für alle anderen die sich dran versuchen möchten.
Aber die Verbindung zur Box noch nicht wirklich da, deshalb  laufen alle lese- und scheibversuche ins Leere.
Da ist noch ein bisschen was zu tun.

Aber ich bin schon mal froh dass ich es jetzt endlich mal Kompiliert bekommen habe.

Wie ist das eigentlich mit dem Patch, muss der an einer bestimmten Stelle ausgeführt werden? Oder ist das egal wann man den startet?

5
Software / Re: Microkontroller - JTAG
28. Feb 2008, 12:09
So... ich habe jetzt alle Fehler soweit raus und kann es Kompillieren  ;D  Es sind allerdings noch ein paar Warnungen da und beim Simulieren kommen  Stack Overflows. Aber ich habe es einfach mal auf den AVRButterfly geschoben und es läuft! Zumindes soweit wie ich es ohne Box testen kann.
Es kommen schön die Fehlermeldungen auf dem Terminal an.

Das ist die Ausgbe die ich bekommen:
Quote
Probing bus ... Done

                    CPU Chip ID: *** Unknown or NO CPU Chip ID Detected ***

                                        Issuing Processor / Peripheral Reset ... Done
                                        Halting Processor ... <Processor did NOT enter Debug Mode!> ... Done
                            Clearing Watchdog ...


Bei Clearing Watchdog ... bleibt er hängen da kein Watchdog da ist ...


6
Software / Re: Microkontroller - JTAG
28. Feb 2008, 09:05
Hi,
ich habe mir das grade noch mal angeschaut, kann mir jemand den folgenden Code erläutern, beziehungsweise meine Überlegung dazu mal prüfen?

Die Funktion clockin wird von den einigen andern Funktionen aufgerufen unter andrem ReadWriteData, ReadData und WriteData was ja grade die interessanten Funktionen sind.

if(wiggler) data = (1 << WTDO) | (0 << WTCK) | (tms << WTMS) | (tdi << WTDI) | (1 << WTRST_N);
Das sind genau die Pins die im Wiki für das Wiggler Interface beschrieben sind.

Wenn ich jetzt einfach 5 Pins am AVR wie oben definiere dann wäre das doch der gleiche output wie am Parallelport, oder nicht?
Ist die clockin die Outputfuktion?  Könnte da so funktionieren?

Code: [Select]
static unsigned char clockin(int tms, int tdi)
{
   unsigned char data;

   tms = tms ? 1 : 0;
   tdi = tdi ? 1 : 0;
   
   if(wiggler) data = (1 << WTDO) | (0 << WTCK) | (tms << WTMS) | (tdi << WTDI) | (1 << WTRST_N);
   else        data = (1 << TDO) | (0 << TCK) | (tms << TMS) | (tdi << TDI);
   #ifdef WINDOWS_VERSION   // ---- Compiler Specific Code ---- 
      _outp(0x378, data); 
   #else 
      //ioctl(pfd, PPWDATA, &data);  Was ist das???
   #endif

   if(wiggler) data = (1 << WTDO) | (1 << WTCK) | (tms << WTMS) | (tdi << WTDI) | (1 << WTRST_N);
   else        data = (1 << TDO) | (1 << TCK) | (tms << TMS) | (tdi << TDI);
   #ifdef WINDOWS_VERSION   // ---- Compiler Specific Code ---- 
      _outp(0x378, data); 
   #else 
      //ioctl(pfd, PPWDATA, &data);  Was ist das???
   #endif

   #ifdef WINDOWS_VERSION   // ---- Compiler Specific Code ---- 
      data = (unsigned char)_inp(0x379); 
   #else 
    //  ioctl(pfd, PPRSTATUS, &data); 
   #endif

   data ^= 0x80;
   data >>= (wiggler ? WTDO : TDO);
   data &= 1;

   return data;
}



patch()                           ruft          ejtag_read(addr1)                  auf
ejtag_read(addr1)             ruft          ejtag_pracc_read(addr)           auf
ejtag_pracc_read(addr)      ruft          ExecuteDebugModule(pracc_readword_code_module)   auf    (pracc_readword_code_module) ist die Assembler Funktion um den Speicher zu lesen denke ich   

ExecuteDebugModule(pracc_readword_code_module)    ruft  ReadWriteData(PRACC | PROBEN | SETDEV)   und    ReadData()    mehrfach auf
ReadData() WriteData()  ReadWriteData()   rufen die oben beschreibende clockin() auf.

Also landet alles irgendwann da und wird über die Pins rausgeschickt.

Ich weiß nicht ob ich das alles richtig verstanden habe aber es scheint mir schon so zu sein.
Kann das jemand so bestätigen?
7
Software / Re: Microkontroller - JTAG
28. Feb 2008, 06:59
ja das ist mir schon klar, ist auch soweit schon fertig.
Ich habe alle "printf" Ausgaben auf die serielle Schnittstelle gelegt um am Terminal zu sehen wie weit er kommt. Zurzeit würde der Patchvorgang durch eine Tastatureingabe gestartet werden. Da ich noch keine Box habe konnte ich den original patch noch nicht durchführen und weiß nicht genau wann der gestartet werden soll/muss und woran man erkennt das der richtige Zeitpunkt da ist.

Mein Problem ist das ich nicht weiß wie die Verbindung zum Prozessor funktioniert und irgendwie finde ich dazu auch nicht soviel im Netz.

Wenn jemand Interesse an dem Code hat einfach melden. Ich mache das ja auch nur nebenbei. Vielleicht bekommt ja jemand die letzen Fehler raus.   

mfg
Jabberwock
8
Software / Re: Microkontroller - JTAG
27. Feb 2008, 14:35
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…
9
Software / Re: Microkontroller - JTAG
26. Feb 2008, 14:06
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