Tokig bugg i bootloader!!! (ATMega644)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av sodjan »

Att det sker page-vis är ju en sak, hurvida det går över huvudtaget
är ju en helt annan. Och att det *finns* EEPROM hjälper inte heller
om det inte räcker till. Att kunna lagra applikationsdata i flash
är praktiskt och bekvämt.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av snigelen »

Med lock-bits kan man som sagt avgör var LPM skall kunna läsa och var SPM skall kunna skriva (dvs läsa resp. skriva från/till application section eller bootloader section).

LPM kan finnas var som helst i flash och läsa var som helst ifrån (om man inte förhindrat det med lock bits).

SPM kan BARA (endast, enbart) köras från bootloader-sektionen om en sådan finns. Detta är omöjligt att ändra på. Man kan sedan begränsa var den skall få skriva med lock-bits, t.ex att den inte skall få skriva till bootloader sektionen.

Men rätta mig gärna om jag har fel.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av sodjan »

Nejdå, du verkar ha helt rätt. Det är just det som är problemet. :-)
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av snigelen »

Det var mest ett förtydligande angående

> En bootloader skall alltså uppdateras från applikationsområdet. Vilket kan vara fullt
> möjligt beroende på hur fuses är satta.

Det finns alltså, enligt vad jag sett/förstått, inte några fuses som gör att SPM går att exekvera från application section.

Men jag tycker nog inte det är något problem. Det finns ju som sagt EEPROM för "ganska konstant" data. Hade inte det funnits så hade det ju varit betydligt mer begränsande. T.ex STM32 brukar inte ha EEPROM, men där kan man ju lite enklare skriva till flash.
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av Icecap »

Ett problem är det ju faktisk! Iaf. för Jesse.

Med detta fel kan bootloadern inte uppgraderas per automatik men någon måste handha enheten manuellt och med enheter spridd rejält geografisk är det ett problem som heter duga.
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av exile »

Visst går det att skriva med SPM från applikations området beroende på vilka fuse som är satt, enligt ATmega644 på sidan 273.

Så vilken lösning det blir beror på vilka fuse som är satta.
Om det är fel satt kan den enda lösningen vara att programmera om dem med ISP.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av snigelen »

Nej det står det inte. Det står "No restrictions for SPM or (E)LPM accessing the Application
section."

Men nu har vi väl spammat tillräckligt men SPM (ha nästan SPAM :)) i den här tråden. Om någon känner för att diskutera det mer så tycker jag att det är lämpligare att starta en ny tråd.

Så till ursprungsfrågan. Jag ser ingen annan (enkel) lösning än att skicka runt en ISP-programmerare med instruktioner om hur flashningen skall gå till.

Man kunde kanske modda en existerande ISP-applikation för att programmera just rätt bootloader automatiskt för att göra proceduren något enklare för kunden. Men det känns lite overkill, såvida man inte råkar hitta en färdig sådan lösning.
Användarvisningsbild
AndLi
Inlägg: 18288
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av AndLi »

"Alla" atmels programmerare går utmärkt att styra via ett command line tool. Bara att göra göra ett batscript som fixar inställningarna...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av jesse »

Hejsan allihopa. Har inte haft tid att vara inne här på ett tag...

Det är precis så som ni redan konstaterat, att om man ska kunna skriva alls i flashminnet måste vissa lockbits vara 'rätt'. Oprogrammerade lockbits ger de största möjligheterna till ändring.
m644_fuses.png
m644_lockbits.png
Databladet, atmega644P, sidan 10:
Program Flash memory space is divided in two sections, the Boot Program section and the
Application Program section. Both sections have dedicated Lock bits for write and read/write
protection. The SPM instruction that writes into the Application Flash memory section must
reside in the Boot Program section
.
Enheterna bör inte ha några lock-bits satta. Jag har lämnat dessa orörda, eftersom jag inte var 100% säker på hur de påverkade. Egentligen borde jag ha skyddat boot-sektorn, men det kanske var bra att jag inte gjorde det.

En tolkningsfråga: Om nu SPM-instruktionen som skriver i applikations-ytan måste ligga i bootsektorn, finns det då inga begränsningar var SPM-instruktionen ska ligga om den ska skriva i boot-sektorn? Det står det ju ingenting om. Annars kan man ju låta en applikation skriva i Bootsektorn och på så vis rätta till felet. Det kan ju vara lite vanskligt att göra på distans - minsta fel och bootloadern är körd och inget kommer att fungera förrän man skaffat en programmerare. Annars kan man ju tänka sig att:

Kunden får en "fix" i form av applikation som laddas ner av bootloadern. Fixen rättar till felet i bootloadern. Sedan uppgraderar kunden med senaste versionen av applikationen med hjälp av den reparerade bootloadern. Detta går givetvis att testa. Jag får experimentera lite.

Jag kan inte se att det skulle vara omöjligt att skriva i boot-sektorn från applikationen, förutsatt att lockbitsen är oprogrammerade:
m644-spm.png
Det handlar om ett fåtal kretskort, kanske 10 st, som vart och ett kan vara speciellt anpassat, så de är inte rakt av utbytbara. Kunderna vill nog inte vara utan dem mer än några timmar, misstänker jag. (Absolut inte flera dagar). Flera av dem har nog så pass bra erfarenhet att de skulle kunna lägga in en ny bootloader själva om de bara får låna en programmerare och får instruktioner, men kanske inte alla.

Ett problem kan vara att det kan vara trångt att få dit programmeringskontakten. Men sådant går ju att lösa.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av jesse »

Nästa steg blir att:

1) skriva en applikation som läser av bootsektorn och kollar att det är rätt version av bootloader.
2) ersätta 0x7c00 med 0xf800 på rätt ställe med hjälp av SPM i applikationen.
3) testa om den 'nya' bootloadern fungerar / göra en hexdump på flashminnet för att verifiera ändringen.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av snigelen »

26.3.1 i doc8272.pdf:
The Application section is the section of the Flash that is used for storing the application code.
The protection level for the Application section can be selected by the application Boot Lock bits
(Boot Lock bits 0), see Table 26-2 on page 283. The Application section can never store any
Boot Loader code since the SPM instruction is disabled when executed from the Application
section.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av sodjan »

Allt talar för att du *inte* kan "modda" bootloadern från applikationskod.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av jesse »

skit också :oops:

tack för hjälpen.
får tänka vidare.

Bootloadern skulle alltså kunna skriva över sig själv, men det kan den inte eftersom den har ett mjukvaruskydd mot det... moment 22.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av sodjan »

Ja, den kan det om man inte har satt skrivskydd på boot-sektorn och om
koden som skriver körs i boot-sektor.

Och, alltså, detta hindrar ju även att applikationen (helt oberoende av bootloaders)
har egen data och tabeller i flash som man kanske skulle vilja uppdatera ibland.
Användarvisningsbild
AndLi
Inlägg: 18288
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tokig bugg i bootloader!!! (ATMega644)

Inlägg av AndLi »

sodjan: vi har förstått att du tycker det är ett problem nu, ska vi gissa att PIC inte har denna begränsning?? :D

Vill man nu ha en tabell som går att ändra i flash (som bara är garanterat för 10 000 uppdateringar) så får man väll helt enkelt ha en funktion i bootloader sektionen som kan uppdatera tabellen åt en. Anropa den med en pekare till ramminnet man vill stoppa in i flashet, done.
Skriv svar