AskSin++ Library

Begonnen von papa, 08 September 2016, 11:11:25

Vorheriges Thema - Nächstes Thema

Xent

Der Bootloader schreibt ja nur die Pages die per OTA übertragen werden.
Nur beim Selbstupdate ist es anders, da dort die Routine sehr klein sein muss.

Wenn man per OTA den Bootloader aktuallisiern will, muss ja folgendes passieren:

1. neuen Bootloader per OTA flashen an die Adresse 0x0000 (wie eine normale Firmware)
2. an Adresse 0x6FFC muss ein Magciword geschrieben werden
3. bei Booten prüft der Bootloader, ob das Magicword an Adresse 0x6FFC steht.
4. wenn Magicword gefunden wurde, liest der Bootloader ab Adresse 0x0000 und schreibt 30 Pages ab Adresse 0x7000. Dadurch aktualisiert sich der Bootloader selbst

Bei 30 Pages wird aber auch die Page 0x7F00 überschrieben oder hab ich mich da verrechnet?

Zitat/**
* The updateBootloaderFromRWW function is placed in the topmost page and cannot be changed via OTA Update
* This must not be touched for OTA update otherwise you may brick the bootloader and need and ISP update
*/

Xent

Hmm ich bekomme es irgendwie nicht so recht hin eine Firmware zu bauen, die man per OTA flashen könnte.
Entweder passt beim Konvertieren ins eq3 Format was nicht oder aber das flash-ota meckert rum.

papa

Was machst Du denn genau ? Meine Glaskugel ist gerade kaputt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

#1383
Sorry, war gestern etwas kurz angebunden ...

Habe mich am Makefile versucht um damit eine Firmware für das OTA Update des Bootloaders zu bauen.
Soweit wird auch alles gebaut und das Magicword landet auch an der richtigen Stelle im Flash.

Hier mal die letzten Zeilen der Firmware.
Wie man sieht kommt das Magicword an die Adresse 6FFC.
Was mich aber vewundert ist, die Zeile davor.
Da wird ja nur von 30 bis 34 hochgezählt ...
:100E90008CEB91E00E94EA0681E00E94EE050E9440
:100EA000CC030E94F203FB01DC0102C005900D920D
:100EB00041505040D8F70895FB01DC0102C0019079
:0E0EC0000D9241505040D8F70895F894FFCF9E
:100ECE003031323334353637383941424344454672
:026FFC0011473B
:00000001FF


Wenn ich die angehängte Hex-Datei umwandel und dann mit flash-ota versuche zu übertragen, bekomme ich folgenden Fehler:
HomeMatic OTA flasher version 0.103-git

Reading firmware from Bootloader-AskSin-OTA-Atmega328p_OTA_201911090831.eq3...
can't get length information!


Ich hab irgendwie die Vermutung, das es daran liegt, dass der Flash nicht zusammenhängend ist.
Also, dass erst vorne alles hingeschrieben wird und dann noch was am Ende.

Xent

Jetzt hab ich mal die erste Page mit dem Magicword gefüllt und den Bootloader ab 0x1000 anfangen lassen und schon akzeptiert auch das flash-ota die Datei ...

Xent

Hab's jetzt hinbekommen, dass man den Bootloader OTA aktualisieren kann.
Mehr schreib ich morgen dazu.

Aktuell hab ich noch das Problem mit der Makefile, dass dort die eine Zeile des Flashs die Adresse 0x0ECE hat. 
Irgendwie passt das nicht da in der Zeile ja schon was ab 0x0EC0 geschrieben wurde.
Musste jetzt diese Zeile raus editieren.

jp112sdl

Hattest du es mal mit der https://github.com/jabdoa2/Asksin_OTA_Bootloader/blob/master/Contrib/hex2eq3.php versucht?
Da kannst du beim Konvertieren des HEX-Files als Parameter direkt markAsBootloaderUpdate mitgeben.

Xent

Oh ne, dass hab ich noch garnicht gesehen.
Werd ich mir mal anschauen.

PeMue

Hallo zusammen,

wäre das Thema Bootloader per OTA flashen nicht etwas für den Fensterkontakt? Wenn die Spannungsgrenzen nicht richtig eingestellt sind, dann könnte man ohne große Probleme nachflashen und die Sache wäre gut. Leider weiß ich nicht, was man da tun muss ...

Danke für einen Hinweis.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Xent

Den Bootloader per OTA Flashen ist nochmal ein anderes Thema.

Ich hab versucht den Bootloader zu optimieren, da sich bei mir scheinbar immer wieder der CC1101 verabschieded und nichts mehr empfängt.
Nach ner Neuinitialisierung empfängt er dann wieder was.
Auch habe ich das flash-ota angepasst, so dass man einstellen kann, das mehr als 5 Versuche gemacht werden.

mdk2412

Zitat von: papa am 16 Mai 2017, 21:42:18
Das kann auch einfach im Code geändert werden. Einfach den zweiten Templateparameter in der Typedefinition vom Radio in 3 ändern.


typedef Radio<SPIType,2> RadioType;



Ich versuche gerade, aus Layout-Gründen den Pin 2 GDO0 umzulegen (da außer dem Taster-Pin ja nur der Pin 2 auf der Seite ist, wollte ich alles auf die andere Seite vom Arduino bringen). Von 2 auf 3 geht, auf 9 geht schon nicht, und die bevorzugte Variante auf einen der analogen Pins A0-A3 geht gar nicht.

Was müsste man also noch alles umstellen, um den Pin 2 nach 9 oder A0-3 zu legen?

jp112sdl

Pin 2 und 3 sind die einzigen beiden Hardware-Interrupts beim 328P.

mdk2412

Zitat von: jp112sdl am 24 November 2019, 12:30:22
Pin 2 und 3 sind die einzigen beiden Hardware-Interrupts beim 328P.

Ich hatte sowas befürchtet... Danke für die Info, dann brauche ich ja nicht weiter zu suchen.

papa

Das Radio (Zeile 751) benutzt die Standard-Arduino-Funktionen attachInterrupt/detachInterrupt. Damit gehen nur die Hardware-Interrupts. Man könnte mal versuchen, das so umzubauen. Dann sollte jeder andere Pin auch gehen.
void enable () {
  if( digitalPinToInterrupt(GDO0) == NOT_AN_INTERRUPT )
    enableInterrupt(GDO0,isr,FALLING);
  else
    attachInterrupt(digitalPinToInterrupt(GDO0),isr,FALLING);
}
void disable () {
  if( digitalPinToInterrupt(GDO0) == NOT_AN_INTERRUPT )
    disableInterrupt(GDO0);
  else
    detachInterrupt(digitalPinToInterrupt(GDO0));
}
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

mdk2412

Zitat von: papa am 24 November 2019, 16:09:30
Das Radio (Zeile 751) benutzt die Standard-Arduino-Funktionen attachInterrupt/detachInterrupt. Damit gehen nur die Hardware-Interrupts. Man könnte mal versuchen, das so umzubauen. Dann sollte jeder andere Pin auch gehen.

Vielen Dank für die Lösung (s.o). Das funktioniert so. Sind irgendwelche Nebenwirkungen davon zu erwarten, dass jetzt kein Hardware-Interrupt-Pin benutzt wird?