![]() |
|
PIC bootloader - Printerisõbralik versioon +- Elektroonikafoorum.com (https://elektroonikafoorum.com) +-- Foorum: Arutelud (https://elektroonikafoorum.com/forum-3.html) +--- Foorum: Programmeerimine (https://elektroonikafoorum.com/forum-5.html) +--- Teema: PIC bootloader (/thread-588.html) |
PIC bootloader - felch - 31-12-2014 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 RE: PIC bootloader - A.R. - 01-01-2015 (31-12-2014, 09:35 PM)felch Kirjutas: movlw 0x0CMinusugune 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. RE: PIC bootloader - madis - 01-01-2015 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
RE: PIC bootloader - felch - 02-01-2015 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... RE: PIC bootloader - A.R. - 03-01-2015 (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. RE: PIC bootloader - madis - 07-01-2015 Felch, kas leidsid kala üles ? Valgusta teisigi !
RE: PIC bootloader - felch - 09-01-2015 Veel ei ole leidnud, panin ta mõneks ajaks kõrvale. Ilmselt pean varsti edasi tegelema. Kui vea leian, annan kindlasti teada. |