bonjour,
je souhaite mettre en place un bootloader qui chargerait le programme principal par I2C ,mais je ne connais pas trop le fonctionnement des bootloaders ,si quelqu'un aurai un exemple pour ce type d'utilisation sa serai cool.
merci
-----
bonjour,
je souhaite mettre en place un bootloader qui chargerait le programme principal par I2C ,mais je ne connais pas trop le fonctionnement des bootloaders ,si quelqu'un aurai un exemple pour ce type d'utilisation sa serai cool.
merci
Personne peu m'aider
Salut,
Bigonoff cours PART-5 pour savoir tout ce qu'il faut pour un bootloader PIC18 (c'est de l'asm mais facilement transposable)
Le même bigonoff, pour l'utilisation de l'I2C, ou une librairie de ton outil de développement.
Bon courage
salut a tous ,
je viens de faire mon bootloader en C pour le pic 18F6520
mais je doit readresser les vecteur d'interruption ainsi que les adresse du bootloader et du programme principal ,
ou doit-je faire ces modification ?
si s 'est sur le .lib , avec quel logiciel doit je le modifier?
merci
Ca dépend de ton compilo.
Si tu utilises MCC18, alors tu dois modifier le <18fxxxx>.lkr
Prend exemple sur d'autres bootloaders sur le site de micro sheep.
OK, je te remercie
voici mon linker modifié:
// File: 18f6520i.lkr
// Sample ICD2 linker script for the PIC18F6520 processor
LIBPATH .
FILES c018i.o
FILES clib.lib
FILES p18f6520.lib
CODEPAGE NAME=boot START=0x0 END=0x1FF PROTECTED
CODEPAGE NAME=h_int_vect START=0x208 END=0x217 PROTECTED
CODEPAGE NAME=l_int_vect START=0x218 END=0x229 PROTECTED
CODEPAGE NAME=page START=0x22A END=0x7D7F
CODEPAGE NAME=debug START=0x7D80 END=0x7FFF PROTECTED
CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED
CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED
ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7F3
DATABANK NAME=dbgspr START=0x7F4 END=0x7FF PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
SECTION NAME=CONFIG ROM=config
STACK SIZE=0x100 RAM=gpr6
si vous voyez des erreurs , faite moi signe.
je ne comprend pas , comment je defini mon emplacement boot , car comme cela sa ne fonctionne pas?
merci
c est bon j ai reussi a alouer mes adresse ,
mais maintenant je n'arrive pas a écrire dans la flash ,il faut que j'ecris octet par octet , mais je viens de voir qu il y a TBLWT qui écrit un octet dans le buffer interne , c est la que je ne comprend rien,
voici mon code pour programmer la flash:
void ecrire_flash( char adH, char adL, char data)
{
EEADRH = adH; // écrit un octet dans la flash
EEADR = adL;
EEDATA = data;
EECON1bits.EEPGD = 1; //access data Flash memory
EECON1bits.CFGS = 0; //access data eeprom memory
EECON1bits.WREN = 1; //enable write
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1; // start writing
while (EECON1bits.WR){}
EECON1bits.WREN = 0; //disable write
Nop();
Nop();
Nop();
comment dois-je gerer le TBLWT ?
salut,
personne aurai des routine en C , pour ecrire en flash ? SVP
merci
bonjour ,
je viens d'utiliser le bootloader RS232 pour PIC 18F6520
Mais des que je rajoute ce SP sa me met cette erreur:
Executing: "C:\mcc18\mpasm\MPASMWIN.e xe" /q /p18F6520 "bootloader2.asm" /l"bootloader2.lst" /e"bootloader2.err"
Error[118] C:\BOOTLOADER ASSEMBLEUR POUPOU V2\BOOTLOADER3\BOOTLOADER2.ASM 675 : Overwriting previous address contents (0200)
; ****************************** ****************************** *****************
RdI2C
clrwdt
bsf SSPCON1,CKP ; relache clock
btfss PIR1,SSPIF
bra $ - 2
bcf SSPCON1,CKP ; maintient clock
;----------------------------------------------------------------
; State 1: I2C write operation, last byte was an address byte
; SSPSTAT bits: S = 1, D_A = 0, R_W = 0, BF = 1
;
; State 2: I2C write operation, last byte was a data byte
; SSPSTAT bits: S = 1, D_A = 1, R_W = 0, BF = 1
;----------------------------------------------------------------
SSP_Handler
movf SSPSTAT,W ; Get the value of SSPSTAT
andlw b'10101101' ; Mask out unimportant bits in SSPSTAT.
movwf Temp ; for comparision checking.
State1: ; Write operation, last byte was an
movlw b'10001001' ; address, buffer is full.
xorwf Temp,W ;
btfss STATUS,Z ; Are we in State1? si "0" saut sspbuf
goto State2 ; No, check for next state.....
movf SSPBUF,W ; Do a dummy read of the SSPBUF.
bcf PIR1,SSPIF
goto RdI2C
State2: ; Write operation, last byte was data,
movlw b'10101001' ; buffer is full.
xorwf Temp,W
btfss STATUS,Z ; Are we in State2?
goto State1 ; No, check for next state.....
movf SSPBUF,W ; Get the byte from the SSP.
movwf RXDATA ; Put it in the buffer.
bcf PIR1,SSPIF
return
; Unlock and start the write or erase sequence.