Booloader file ändern
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Entwicklungswerkzeuge  |  Booloader file ändern « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Booloader file ändern  (Gelesen 1687 mal)
 
WF1
Newbie
*
Offline Offline

Beiträge: 33


Profil anzeigen
« am: Dezember 18, 2010, 19:38:46 »

Hallo,
vor längerer Zeit hat man hier schon mal beim Ändern eines Booloaderfiles helfen können. Vielleicht kann man mir heute auch den entscheidenden TIP geben.

Ich verwende den folgenden Bootloader (http://www.mecanique.co.uk/code-studio/loader/index.html) in Zusammenhang mit einem Basic-Compiler (http://www.protonbasic.co.uk/content.php/141-Proton-Development-Suite).

Mit dem Bootloader werden fertige Dateien im Hex-Format für verschiedene PIC geliefert, die dann vor dem eigentlichen Programm in den PIC geladen werden. Aber leider sind Bootloader-Dateien nur immer für Quarzfrequenzen von 4 MHz und 20 MHz dabei. Ich benötige aber andere Frequenzen, wie 1 MHz, 8 MHz, 16 MHZ, 16 MHz und 24 MHz.

Ich habe mir mal für einen PIC18F252 den 4 MHz-Code und den 20 MHz-Code disassembled um zu sehen was unterschiedlich ist.

Es sind nur 2 Code-Passagen, die sich unterscheiden:

4 MHz-Code:
07D86: 0E0C  --> movlw 0Ch
20 MHz-Code:
07D86: 0E40  --> movlw 40h

Und an anderer Stelle noch:
4 MHz-Code:
07EF0: 0E08  --> movlw 8

20 MHz-Code:
07EF0: 0E18  --> movlw 18h

Eigentlich können nur das die Werte für die unterschiedliche Frequenz sein. Leider kann ich mit den Werten nichts anfangen, da ich da nichts mit 4 oder 20 finden kann. Das einen Hinweis auf die Frequenz gibt.

Weiß jemand Rat?
Vielen Dank.

Gruß
Wilfried













Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #1 am: Dezember 20, 2010, 03:26:55 »

Hall Wilfried,

du verschweigst den interessantesten Part: Wohin werden die Daten kopiert?

Auf die Schnelle sieht es fuer mich so aus:
Der von dir verwendete Bootloader nutzt die RS232 Schnittstelle, das einzige was also im Code wirklich abhaengig von der Taktfrequenz ist, ist das Register das die Baud-Rate einstellt.
Wenn du jetzt den Code fuer einen anderen Controller anpassen willst, schlage ich folgendes Vorgehen vor:
1. Du suchst dir einen Hexcode passend fuer deinen Controller
2. Du suchst nach den taktabhaengigen Registern, was wohl nur das Baudrate Register des UART ist.
3. Je nach Programmer musst du noch die CONFIG anpassen, also Oszillator und/oder Takt. Am besten sagst du dem Programmer, dass er eine von dir festgelegte CONFIG schreiben soll.

Gruss,
Stefan
« Letzte Änderung: Dezember 20, 2010, 05:49:58 von Stampede » Gespeichert

WF1
Newbie
*
Offline Offline

Beiträge: 33


Profil anzeigen
« Antworten #2 am: Dezember 20, 2010, 19:04:57 »

Hallo Stefan,

ich wusste nicht, dass da nur die USART eingestellt werden muss wenn man die Taktrate ändern will.

Demnach sieht das ganz gut aus. Die Übertragubngsrate beim programmieren ist demnach 76.8 kbps. Ich kann somit die Werte entsprechend dem Datenbaltt des PIC zuordnen:
4 MHz-Code:
07D86: 0E0C  --> movlw 0Ch --> SPBRG = 12d
20 MHz-Code:
07D86: 0E40  --> movlw 40h --> SPBRG = 64d

Und weiter für:
1 MHz --> SPBRG = 2d
10 MHz --> SPBRG = 32d
16 MHz --> SPBRG = 51d
25 MHz --> SPBRG = 80d
33 MHZ --> SPBRG = 106d
40 MHz --> SPBRG = 129d
Ich werde das mal über die Feiertage ausprobieren.
Jetzt fehlt mir nur noch der Wert für 8 MHz. Weißt Du wie man den Wert ermitteln kann?

Danke erst einmal und Gruß
Wilfried






Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #3 am: Dezember 21, 2010, 01:31:19 »

Hi Wilfried,

Zitat
ich wusste nicht, dass da nur die USART eingestellt werden muss wenn man die Taktrate ändern will.
Da RS232 ein asynchroner Bus ist, ist das vonnoeten.
Zitat
Die Übertragubngsrate beim programmieren ist demnach 76.8 kbps.
Nein, sicher nicht. 76,8k Baud ist kein gaengiger Wert. Das USART wird im Highspeed Modus genutzt werden, bei den von dir genannten Werten ergibt sich dann eine Uebertragung von 19,2k Baud.

Zitat
Jetzt fehlt mir nur noch der Wert für 8 MHz. Weißt Du wie man den Wert ermitteln kann?
http://ww1.microchip.com/downloads/en/DeviceDoc/39564c.pdf
Abschnitt 16.1.

Gruss
Stefan
Gespeichert

WF1
Newbie
*
Offline Offline

Beiträge: 33


Profil anzeigen
« Antworten #4 am: Dezember 21, 2010, 17:40:51 »

Hallo Stefan,

ja Du hast Recht, 19.2 kB ist der richtige Wert. Ich war in der falschen Tabelle.
Die Werte für die Frequenz sind somit klar.

Bloß was bedeuten die anderen Unterschiede hier:
Und an anderer Stelle noch:
4 MHz-Code:
07EF0: 0E08  --> movlw 8

20 MHz-Code:
07EF0: 0E18  --> movlw 18h

Ich habe mal den kompletten Code angehängt.
Ich habe auch mal den Code von einem PIC18F452 disassembliert. Das mit den Frequenzen paßt. An den Stellen
Und an anderer Stelle noch:
4 MHz-Code:
07EF0: 0E08  --> movlw 0Ch
20 MHz-Code:
07EF0: 0E18  --> movlw 1Ch
Ich habe darauf auch mal das Datenblatt auf Unterschiede zwischen dem 18F252 und dem 18F452 durchsucht, aber nichts gefunden was unterschiedlich ist.

Vielleicht hst Du noch eine Idee?

Gruß
Wilfried

* 18F252_04.asm (10.01 KB - runtergeladen 59 Mal.)
* 18F252_20.asm (9.21 KB - runtergeladen 60 Mal.)
* 18F452_04.asm (9.21 KB - runtergeladen 54 Mal.)
* 18F452_20.asm (9.21 KB - runtergeladen 71 Mal.)
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #5 am: Dezember 22, 2010, 01:21:16 »

Hallo,

Zitat
Bloß was bedeuten die anderen Unterschiede hier:
Und an anderer Stelle noch:
4 MHz-Code:
07EF0: 0E08  --> movlw 8

20 MHz-Code:
07EF0: 0E18  --> movlw 18h
Habe mir nur mal auf die schnelle den ersten Code angeschaut. Btw: Du haettest mal erwaehnen soll, dass der nachfolgende Befehl ein call ist. Ohne den nachfolgenden Befehl zu kennen ist movlw voellig sinnlos.
Die Werte werden direkt in den TX Buffer des USART geschrieben, sprich an den PIC geschickt. Ich gehe davon aus, die Software erkennt damit, um welche Art von PIC es sich handelt. Das ist noetig, denn die PIC18 haben verschiedene Blockgroessen beim Beschreiben des Flash, und um das Timing anzupassen, damit der PIC auch Daten annehmen kann. (Das kann er nicht wenn er auf den Flash schreibend zugreift).

Zitat
Ich habe darauf auch mal das Datenblatt auf Unterschiede zwischen dem 18F252 und dem 18F452 durchsucht, aber nichts gefunden was unterschiedlich ist.
Wirst du auch nicht, bis auf die Register, die nur beim 452 vorhanden sind (wie z.B PortE).

Gruss Stefan
Gespeichert

WF1
Newbie
*
Offline Offline

Beiträge: 33


Profil anzeigen
« Antworten #6 am: Dezember 22, 2010, 12:29:00 »

Hallo,

Zitat
Die Werte werden direkt in den TX Buffer des USART geschrieben, sprich an den PIC geschickt. Ich gehe davon aus, die Software erkennt damit, um welche Art von PIC es sich handelt.
Sowas hatte ich mit auch schon gedacht. Bloß warum ist dann bei dem selben PIC an der Stelle 07EF0 ein unterschiedlicher Wert?

Gruß
Wilfried
Gespeichert
Stampede
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 969



Profil anzeigen WWW
« Antworten #7 am: Dezember 23, 2010, 01:35:52 »

Hallo,

Zitat
Sowas hatte ich mit auch schon gedacht. Bloß warum ist dann bei dem selben PIC an der Stelle 07EF0 ein unterschiedlicher Wert?
Ich kann ja auch nicht alles wissen Smiley . Bedenke, dass der PIC in Abhaenigikeit der Taktfrequenz die Befehle unterschiedlich schnell abarbeitet. Wahrscheinlich wird das in der PC Software beruecksichtigt, um den PIC so schnell wie moeglich zu beschreiben.

Soviel Gedanken wie du dir schon gemacht hast, haettest du auch dir deinen eignen BL schreiben koennen, oder du nutzt gleich einen mit USB und das Framwork von MC.  Smiley

Gruss,
Stefan
Gespeichert

Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.04 Sekunden mit 18 Zugriffen.
 
Top! Top!