Sari la conținut
ELFORUM - Forumul electronistilor

Bootloader Microchip


Ashky

Postări Recomandate

Vreau sa folosesc bootloaderul de la microchip (AN851), si refuza sa functioneze.Ca o paranteza, astia chiar nu probeaza ce publica pe site? E a n'spea aplicatie de la ei care nu merge.Am reusit sa-l fac sa mearga partial, adica memoria program.Nu reusesc sa-l fac sa scrie corect eepromul intern.Indiferent de situatie scrie de la adresa 0 la F ultimele valori setate in asm.

De exemplu in asm eepromul e asa:

000000 01 03 34 AB CD 00 FF 81 20 20 20 53 69 73 74 65 000010 6D 75 6C 20 65 73 74 65 20 20 20 20 20 20 20 20 000020 20 69 6E 69 74 69 61 6C 69 7A 61 74 20 20 20 20 

si bootloaderul scrie asa:

000000 20 69 6E 69 74 69 61 6C 69 7A 61 74 20 20 20 20000010 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF000020 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF000030 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF000040 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

Nu mai stiu ce sa-i fac. Am instalat si Visual Basic sa verific daca trimite bine datele si la cunostintele mele nu am gasit nimic gresit.Daca ma poate ajuta cineva dau o bere!

Link spre comentariu
  • Răspunsuri 9
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Ashky

    5

  • puiu

    3

  • sofian

    1

  • alexmirica

    1

Top autori în acest subiect

Daca te uiti cu atentie pe cele 2 bin-uri date de tine, ai sa remarci ca pur si simplu ti-a "halit" niste bytes pe seriala. Folosesti cumva USB-RS232 converter? Alea nu merg stralucit, incearca la settings (in device manager -> com ports) sa setezi buffer-ul la minim si latenta la 1ms. Ar trebui sa mearga.

Link spre comentariu

Bootloaderul scrie intai memoria program si indiferent cat are de scris nu mananca din ea, problema apare doar la eeprom.Adica indiferent cat am de scris in eeprom ultimii 16 octeti ii scrie in primele 16 adrese.Deci nu e o problema de comunicatie. 16 de fiecare data, nu o data 14, o data 12...Sunt ferm convins ca problema e ori in firmware, ori in aplicatia PC.

Link spre comentariu

Aici sapam si eu, softul original modifica ambele adrese eeprom, numai ca picu meu (18F4520) nu are multa memorie eeprom si nu are registrul EEADRH.Am sters linia care il incrementa.Pana acum merge brici, scrie memoria program, config-ul, dar daca am de scris mai mult de 16 adrese in eeprom e jale.Chiar nu pricep, codul din asm pare ok, iar in VB6 functia care trimite datele e aceeasi ptr tot ce inseamna scriere in pic.

 

Asta e codul din VB6

Function WriteRangeDevMem(BlockSize As Byte, BytsPerAddr As Byte, BCom As Byte, InFile As String) As Integer    ReDim OutData(50) As Byte    Dim RetStat As Integer    Dim ProgressInd As Integer    Dim FileLine As String    Dim picA As PIC    'Setup data file creation    Set fs = CreateObject("Scripting.FileSystemObject")    Set a = fs.OpenTextFile(VB.App.Path & "\" & InFile, 1, False, 0)    Set b = fs.CreateTextFile(PicBootS.ErrorLogFile, True)            AbortFlag = 1    ProgressInd = 1    Do While a.AtEndOfStream <> True        DoEvents        FileLine = a.ReadLine                'check for an abort        If AbortFlag = 0 Then            If ProgressInd = -101 Then                Exit Do            End If                        ProgressInd = -100            Exit Do        End If                   picA.BootAddr = (CLng(Val("&H1" & Mid(FileLine, 1, 6))) And 16777215) \ BytsPerAddr        picA.BootCmd = BCom        picA.BytesPerAddr = BytsPerAddr -> aici primeste 1        picA.BytesPerBlock = BlockSize -> aici tot 1        picA.MaxRetrys = PicBootS.MaxRetry        picA.BootDatLen = 16                For i = 0 To 15            OutData(i) = CByte(Val("&H" & Mid(FileLine, i * 3 + 8, 2)))        Next i                RetStat = WritePIC(PicBootS.PortHandle, picA, OutData(0))        If RetStat < 0 Then            WriteRangeDevMem = RetStat            Exit Function        End If        picA.BootCmd = BCom - 1        'RetStat = VerifyPIC(PicBootS.PortHandle, picA, OutData(0))        RetStat = 1 'Verify is done below now        If RetStat < 0 Then            If RetStat = -12 Then                b.WriteLine (FileLine)                ProgressInd = -101            Else                WriteRangeDevMem = RetStat                Exit Function            End If        Else            ProgressInd = 1        End If                       Fm_Bootload.StatusBar1.Panels(1).Text = "Writing: " & picA.BootAddr    Loop    

Si asta e in PIC

WriteEE		movlw   b'00000100'		movwf   EECON1		clrf        EEADRWriteEepromLoop    	             movff     POSTINC0, EEDATA		rcall	StartWrite				btfsc	EECON1, WR		bra	$ - 2		incf	EEADR, F		decfsz	COUNTER, F	;COUNTER = 16		             bra         WriteEepromLoop		bra	SendAcknowledge

Deci citeste dintr-un fisier text cate o linie si trimite picului cate 16 adrese, nu inteleg de ce o ia mereu de la 0

Link spre comentariu

1. Din cauza vitezei am gresit inainte si in loc de 256 am scris 16.2. Drebuie incrementat EEADR cu 16. Din pacate eu lucrez in ASM si nu pot la prima vedere sa vad ce nu-i place C. Programatori in C ar putea sa-ti spuna.3.De ce nu incerci sa scri o locatie nu un bloc de 16. Eu am lucrat cu PIC18F452 'taticul' lui PIC18F4520 si a scris corect eepromul, ii drept ca nu foloseam bootloaderul ci programatorul ICD 2.

Link spre comentariu

Asa este, am vazut clrf EEADR, dar mai era o problema, bootloaderul primeste adresa in 3 registri (H,U si L) si in loc sa incarce in EEADR byte-ul L incarca H, adica de fiecare data 00 (traiasca simulatorul).Am modificat din H in L si acum merge perfect.Multumesc de ajutor.

Link spre comentariu

In AN851 zice PIC16/PIC18 bootloader si cica era testat pe 18f452, dar intentionat e scris gresit, altfel nu-mi explic un org 0x00A pus aiurea, in VB6 si in pic nu era scrisa functia de sters eeprom-ul, schimbarea vitezei portului serial nu sunt convins ca functioneaza (asta chiar nu ma intereseaza, dar ca idee), remaparea vectorilor reset si int la 0x200 in loc de 0x800 si mai sunt greseli dar nu-mi aduc aminte acum de ele.Decat sa mai iau vre-un fw de la MC mai bine il fac eu de la 0 ca sigur dureaza mai putin.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări