Hallo! Ich bin gerade dabei ein eigenes Board mit dem XC167 zu entwickeln und die passende Software dazu zu schreiben. Als Programmierumgebung verwende ich VX-Tools von Tasking. Damit kann ich meine Software in den XC167 flashen. Für die Entwicklungsphase ist das auch ok. Für später möchte ich dafür aber meine eigene Software verwenden. Ich habe in der Dokumentation auch Infos zum BSL gefunden, aber keinen Quellcode für die 32 Bytes. Vielleicht kann mir hier jemand weiterhelfen? Grüße Jürgen
Hallo Jürgen, schau mal hier: http://www.keil.com/support/docs/1065.htm Sonst selber machen, das geht auch. Tschü Dude
Hallo Dude, danke für den Tipp. Ich arbeite nicht mit Keil, aber bei Tasking gibt es auch die Sourcen wie ich jetzt erfahren habe. Ich hoffe ich komme damit zurecht. Ich bin nicht der geborene Assemblerprogrammierer. Grüße Jürgen
Hallo, ich werde aus dem Ganzen nicht schlau! Ich habe einen Preloader geschrieben, der 0x40 Bytes in den Speicher von 0xE0024 bis 0xE0063 schreibt (siehe Sourcecode) und anschließend an die Stelle 0xE0024 springen soll. Der Preloader läuft (ich sende nach dem Empfang der 0x40 Bytes ein Zeichen über die serielle Schnittstelle). Allerdings speichere ich die 0x40 Bytes entweder an eine falsche Stelle oder der Sprung dahin funktioniert nicht. Ich wollte erstmal einen Pin toggeln lassen bzw. weitere Zeichen ausgeben. Nichts funktioniert. Hat jemand eine Idee was falsch laufen könnte? Danke Jürgen
Hallo Jürgen, wenn der Preloader (die 32 Byte) läuft, hast Du schon gewonnen. Bei dem nachgeladenen Code würde ich zuerst den Watchdog disablen und den Stack aufsetzen. Wenn der Preloader genau 32 Byte umfasst (NOPs einfügen) und wie bei Dir das nachgeladene Programm direkt dahinter liegt, wird es auch ohne Sprungbefehl aktiviert. Tschü Dude
Hallo Dude, ich bin jetzt ein bisschen weiter. Der Code, der nach dem Preloader geladen wird, sendet mir tatsächlich ein Byte zurück. Allerdings gibt es Probleme beim Senden mehrerer Bytes. Manchmal geht's manchmal nicht. Vielleicht liegt das daran, dass die Register durch den BSL nicht korrekt gesetzt wurden. Da muss ich jetzt nochmal danach schauen. Allerdings bekommt man auch keine Information, welche Einstellungen der BSL vornimmt. Grüße Jürgen
Hallo Jürgen, der BSL konfiguriert die Schnittestelle sicherlich richtig, wenn die Baudrate mit dem Takgeber möglich ist. Rechne das mal für Deine Konfiguration (Quarz) nach, oder wähle eine andere Baudrate für die erste Initialisierung. Der BSL hat eine automatische Baudratenerkennung anhand des ersten (Null-) Byte, das er zur Initialisierung empfängt. Als Antwort sendet er darauf eine Kennung der Chip Familie (s. Manual). Wenn dieses Byte stimmig ist, passt die UART Konfiguration. Wie sendest Du "mehrere Bytes"? Ist sichergestellt, dass es keinen Buffer overflow gibt? Tschü Dude
Hallo Dude, die Schnittstelleneinstellungen waren wohl schon in Ordnung. Nachdem ich jetzt aber auch fast alle anderen Register auf die Werte meiner "normalen" Software gesetzt habe, kann ich auch mehrere Zeichen hintereinander senden. Was jetzt genau die Ursache war, habe ich nicht im Detail nachvollzogen. Ich prüfe vor jedem Zeichen auf den Transmit-Interrupt, so dass es sichergestellt ist, dass der Sendepuffer schon leer ist. Danke und Grüße Jürgen
Glückwunsch Jürgen, dann hast Du es ja geschafft. Viel Erfolg mit den nächsten Schritten! Tschü Dude
Hallo Dude, ich habe mittlerweile ein ganz merkwürdiges Phänomen: Ich kann mein Programm übertragen und ich kann Zugriffe auf das Flash ausführen lesen, löschen, schreiben..., aber es gibt Probleme, wenn ich zuviel Code (vielleicht auch zuviele Funktionsaufrufe) in meinem Programm habe. Mein Programm macht dann undefinierbare Dinge zum Beispiel in Zeile 10, wenn ich in Zeile 15 eine Ausgabe über RS232 machen würde. Ohne die Zeile 15 läuft mein Programm bis zum Ende fehlerfrei. Kann da beim Linken etwas schief gehen? Bis auf den zusätzlichen Funktionsaufruf (von Zeile 15) kann ich aber nicht soviele Unterschiede feststellen. Den Stack habe ich auch schon vergrößert, leider ohne Erfolg. Hast du noch eine Idee? Grüße Jürgen
Hallo Dude, ich habe den Fehler mittlerweile gefunden. Mein Konverter srectobin funktionierte nicht richtig. Er hat die Lücken im Code nicht gefüllt. Ich habe das mittlerweile korrigiert und es scheint jetzt problemlos zu funktionieren. Grüße Jürgen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.