[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [gulliver] Re: bootloader PIC
|
From |
launay <pierre dot launay at ac-rennes dot fr> |
|
Subject |
Re: [gulliver] Re: bootloader PIC |
|
Date |
Mon, 10 Apr 2006 23:29:31 +0200 |
David MENTRE a écrit :
Salut Pierre,
[ Copie sur gulliver@, histoire que ça serve à d'autres et que d'autres
puissent ajouter leurs propres commentaires. ]
Pour l'ajout du copyright, je considère personnellement qu'on peut
l'ajouter si les modifications sont « substantielles ». La définition
exacte du substantiel est laissé à la libre appréciation du
contributeur. ;)
Cf. suppra :
1. faire tes modifs ;
2. documenter dans le changelog ;
3. faire un patch en l'envoyer à l'auteur original ;
4. éventuellement, proposer ta version modifiée ou attendre que
l'auteur original l'intègre.
En shell ça fait :
$ cp src/ src-pl/
$ cd src-pl/; [hack hack hack]
$ $EDITOR ChangeLog # documenter les changements
$ cd ..
$ diff -Naur src/ src-pl/ > src-changes.patch
$ Mail auteur-original at toto dot com < src-changes.patch
Mais si l'anglais pose problème, c'est un moindre mal de documenter en
français. Je peux aussi te filer un coup de main si tu veux.
J'espère que je réponds à tes questions.
Amicalement,
d.
Salut David et tous ceux qui s'interessent au PIC
Les sources du bootloader de jack
http://www.wsu.edu/~jackdoll/jmon/jmonitor1.0.tar.gz
Dans ce fichier compressé, je travail sur les sources dans le
répertoire: source/jmon_V10/
qui contient 4 fichiers :
f877_jmon.inc: fichiers de définition des variables et définitions
utiles pour l'assembleur
jm1.asm: fichier principal contient le bootloader en assembleur
subs1.inc: un fichier qui contient des routines en assembleur pour
gérer la liason série.
readme.txt: quelques explications en anglais pour l'utilisation et les
modifications à effectuer en fonctions de la fréquence du quartz du PIC
1) Pour l'utiliser, il faut lire le readme.txt
2) Adapter le baud rate en fonction de la vitesse de transmission
souhaitée 9600 bauds ou 19200 bauds et du quartz utilisé.
3) faire gpasm jm1.asm dans une console, on obtient divers fichier dont
le fichier à programmer jm1.hex (gpasm faire partie de gputils, à
installer avec synaptic sur Ubuntu)
4) avec une carte programmateur et une carte PIC le programmer avec un
logiciel comme pkp (extrait de Pikdev)
C'est tout et ça marche !
Le bootloader pour PIC tient dans 768 octets (moins de 1k byte)
Je n'ai modifié que 2 fichiers dont un seul vraiment
Le fichier très légèrement modifié est f877_jmon.inc
diff f877_jmon.inc f877_jmon2.inc >f877_jmon.txt
53,54c53,55
< monitor equ 01d00h ;()jump into monitor, hard reset
< runmon equ 01d23h ;()jump into monitor
---
> startuser equ 01cffh ; run user code
> monitor equ 01d08h ;()jump into monitor, hard reset
> runmon equ 01d2ah ;()jump into monitor
75c76
< sendcrlf equ 01edah ;(0)send a cr/lf sequence
---
> sendcrlf equ 01eebh ;(0)send a cr/lf sequence
84,87c85,91
<
;==========================================================================
< ;baud rate constant with 20MHz clock...
< baud_rate equ 040h ;19200 d'64'(subroutine serialsetup)
< ;baud_9600 equ 081h ;d'129'
---
>
;==========================================================================
> ; read readme.txt for more information
> ;baud rate constant with 4MHz clock...
> baud_rate equ 019h ;9600 d'25'(subroutine serialsetup)
>
> ; Timer0 prescaler with 4MHz clock...
> scale_tmr0 equ b'00000101' ;tmr0 prescaler, 1:64
Le fichier le plus modifié est jm1.asm dont voici les modifications en
français:
diff jm1.asm moniteur.asm >moniteur.txt
30c30
< include <f877_jmon.inc> ;def header
---
> include <f877_jmon2.inc> ;def header
47c47
< org 01d00h ;768 bytes for resident monitor code(1d00-1fff)
---
> org 01cffh ;768 bytes for resident monitor code(1d00-1fff)
48a49,58
> startuser ; run user code saut vers le programme de l'utilisateur
> clrf pclath ;pour un saut en page 0
> nop ;on place ici ce qui devait
> nop ;être en 0x00
> nop
> nop
> nop
> nop ; 8 nop si on reçoit une ligne entière
> nop ; pour éviter d'écraser le bootloader
> nop
56c66
< movlw b'00000111' ;tmr0 prescaler, 1:256
---
> movlw scale_tmr0 ;tmr0 prescaler see readme.txt
75,76c85,87
< clrf pclath
< goto 020h ;run user code
---
> ;clrf pclath
> ;goto 020h ;run user code
> goto startuser ;run user code
447,448c458,471
< rrf eeadr,f ;actual addr is 1/2
< ;protect monitor code.......
---
> rrf eeadr,f ;actual addr is 1/2
> ; modification deplace le contenu de 0000-0003 en d000-d003
> ; move 0000-003 to D000-D003
> iorlw 0x00 ; test high address
> btfss status,z ;high address =0 ?
> goto protect ; no goto protect
> movlw 0xfc ; high address =0
> addwf eeadr,w
> btfsc status,c; low address <04 ?
> goto record ; no goto record (high address =0)
> movlw 0x1d
> movwf eeadrh ; move 0000-003 to 1d00-1d03
> goto record ; goto record (high address =1d)
> protect;protect monitor code.......
454c477
< ;4th byte is record type,-only 00,01 are recognized
---
> record ;4th byte is record type,-only 00,01 are recognized
590c613
C'est tout simplement le fichier diff que je vous ai mis
Pour info > : ligne du fichier original jm1.asm
<: ligne du fichier moniteur.asm
Fichier log proposé :
La modification apportée avec les fichiers
moniteur.asm et f877_jmon2.inc permettent qu'un même fichier utilisateur
par exemple user.hex puissent être programmé indifféremment avec un
programmateur de PIC standard avec le mode ICSP ou avec le bootloader
moniteur et une liaison série.
En mode ICSP les adresses 0000 à 0003 contiennent un saut vers le
programme utilisateur.
En mode Bootloader les adresses 0000 à 0003 contiennent un saut vers le
programme du bootloader. Mais au bout de 4 secondes, si aucune touche du
clavier n'est appuyé, on fait un saut vers le programme utilisateur.
La modification consiste à déplacer le contenu des adresses 0000 à 0003
en D000 à D003, et
au bout de 4 secondes, si aucune touche du clavier n'est appuyé, on fait
un saut en D000
Fin fichier log proposé
Quelques explications :
Jack Dallhausen doit travailler en assembleur, donc il commence ses
programmes en 0020h
avec un org 0020h c'est très simple.
inconvénient
1)c'est pas standard avec un fichier programmer en mode ICSP
2) les IT sont comprises entre 0004h et 0020h, il n'a que 28 octets,
donc il faut faire attention à ne pas déborder et à utiliser des call
dans les it.
3) Si quelqu'un prend un fichier écrit pour le mode ICSP et l'envoie avc
le bootloader jm1.asm
Les 4 premières adresses 0000 à 0003 sont écrasées par le programme de
l'utilsateur sans avertissement et le bootloader est inutilisable.
4) le plus important pour moi, dans le cas de programme écrit en C, le
org n'existe pas, on peut toujours bidouiller mais c'est déconseillé par
SDCC (le compilateur libre) donc pour des élèves qui débutent cela me
semble pas très pédagogique.
Questions:
Cherche bonne âme pour traduire le fichier log proposé pour soulager David
Faut il mettre les fichier diffs dans le fichier log ?
Pour le patch cela me parait bien gros pour quelques modifications
Globalement dans le fichier jm1.hex il y avait 31 octets de libre, il en
reste 13 de libre avec moniteur.hex (info dans MEMORY USAGE MAP des
fichiers jm1.lst et moniteur.lst)
Merci d'avance
Pierre