PIC bootloader
#1
Hei, elektroonikud!
Ma olen siin juba paar päeva vaevelnud probleemi kallal, kuidas kirjutada läbi omtehtud bootloaderi PICi konfi baite. Konkreetne kivi on PIC18F46K80.
Kõik muu kirjutub ilusasti kuid konfiga tekib jama - esimene bait aardressil 0x30 00 00 on progejaga tagasi lugedes alati 00. Kommenteerides konfiala kirjutamise jupi välja, viga kaob. Muud konfibaidid kirjutatakse õigesti. Data kirjutamise puhvrisse tuleb õige (debug-väljatrükk näitab).
Toimetan nii:
- kustutan konfiala 15 baiti
- kirjutan baidid TBLWRT*+ käsuga
- sätin biti WR mis peaks käivitama kirjutamise
Enne kustutamist ja kirjutamist sean TBLPTR= 0x 30 00 00
JA ikka....
Mis loll viga see on, mida ma ei suuda näha?
PHP Kood:
clrwdt movlw 0x30 movwf TBLPTRU ; kustuta senised confibaidid clrf TBLPTRH clrf TBLPTRL BCF EECON1,EEPGD BSF EECON1,CFGS BSF EECON1,WREN ; kirjuta FLASHi, luba kirjutamine BSF EECON1,FREE ; enable Erase operation MOVLW 0x55 ; lahtilukustamine MOVWF EECON2 MOVLW 0xAA MOVWF EECON2 BSF EECON1,WR ; kustuta blokk, prose hangub seniks. nop BCF EECON1,WREN ; keela kirjutamine FLASHi ja row erase BCF EECON1,FREE clrwdt movlw 0x30 movwf TBLPTRU ; taasta aadress clrf TBLPTRH clrf TBLPTRL LFSR .2,BootloaderBuf2 ; 0E baiti conffi kirjutada, soorts siin movlw 0x0C movwf Count bldr_end3: movff POSTINC2,TABLAT TBLWT*+ clrwdt decfsz Count goto bldr_end3 clrwdt movlw 0x30 movwf TBLPTRU ; taasta aadress clrf TBLPTRH clrf TBLPTRL ; TBLRD*- BCF EECON1,EEPGD BSF EECON1,CFGS call bwr_flsh2 ; käivitab kirjutamise tsükli - 64 baiti.

Head aastavahetust !
/Felch
Vasta
#2
(31-12-2014, 09:35 PM)felch Kirjutas: movlw 0x0C
movwf Count
bldr_end3: movff POSTINC2,TABLAT
TBLWT*+
clrwdt
decfsz Count
goto bldr_end3
clrwdt
Head aastavahetust !
/Felch
Minusugune laiskvorst Kirjutab C-s ja laseb valmis bootloaderil laadida.

Aga PIC*4550 jutus nad teevad seda kirjutust terake teisiti.
Kas nad on jobud või peabki see nii olema?

MOVLW D’32’ ; number of bytes in holding register
MOVWF COUNTER
WRITE_BYTE_TO_HREGS
MOVF POSTINC0, W ; get low byte of buffer data
MOVWF TABLAT ; present data to table latch
TBLWT+* ; write data, perform a short write
; to internal TBLWT holding register.
DECFSZ COUNTER ; loop until buffers are full
BRA WRITE_WORD_TO_HREGS

Head ja transleeruvat uut aastat.
A.R.
Vasta
#3
Ivanovi lihtmeetod:

topi iga käsu vahele 10 nop-i

Kui korda läheb, teab timingu probleeme otsida.

Noh, ja errata-dest on ka palju huvitavat välja tulnud, ei usu et see PIC erand on Smile
Vasta
#4
Niipaljukest ma kodutööd enne tegin, et lugesin errata lehte - selle asja kohta polnud midagi öeldud.NOP on hea lahend aga hetkel tundub mitte see olevat. Flashi koodibaidid kirjutatakse ju täpselt analoogse rutiiniga ja toimib. Konfiala on samuti prose enda sisemine flash, vaid aadress on teine. Kogu toimetamine käib prose ränikivises kõhus, mingeid perifeeriaseadmeid ei kasutata ja kirjutamise ajal on ka kõik katkestused keelatud. See on nagunii viimane etapp, peale seda tehakse reset.

A.R., su viidatud kood on ju sama mis minulgi! Vaid baitide arv on teine ja kirjutamise käske pole näidatud (otse flashi kirjutamise sest TBLWRT kirjutab vaid mäluregistritesse).
Konfibaidid kirjutuvad aga esimene läheb alati aia taha. Tundub, et siin on mingi kiiks...mida ma sellest hiljem teades ka ise DS-is selgelt näeks. Aga paraku veel ei tea...
Miks ma teen ise bootloaderit? Sest see peab töötama MODBUS protokolliga ühel tellimustööl - spetsiifiline plaat. Minu teada ei töeta ükski bootloader modbus'i käske.
Asi iseenesest tuli suht talutav - elab üle ka voolukatkestused bootloadimise ajal jne. Kui sellest viimasest veast ka üle saaks...
Vasta
#5
(02-01-2015, 08:36 PM)felch Kirjutas: A.R., su viidatud kood on ju sama mis minulgi!
Jäi silma väike vahe nimedes.
***

0. aadresile ei kirjuta!
Kas 1. saab 0. või 1. sisu?

Kas need teised TBLWT käsud ( TBLWT*, TBLWT*+, TBLWT*-, TBLWT+*)
saavad sellele 0. pihta?
Vast annab seda 0. sisu eraldi, mitte tsüklis, kirjutada?

Kas oled seda kirjutist proovinud ka mõne teist marki PICi peal?
Võib ju olla sellel tüübil mingi käsu anomaalia.
Vasta
#6
Felch, kas leidsid kala üles ? Valgusta teisigi ! Smile
Vasta
#7
Veel ei ole leidnud, panin ta mõneks ajaks kõrvale. Ilmselt pean varsti edasi tegelema. Kui vea leian, annan kindlasti teada.
Vasta


Alamfoorumi hüpe:


Kasutaja, kes vaatavad seda teemat: 1 külali(st)ne