ich möchte auf meinem AVR eine Webseite erstellen auf der man eine Hex Datei einfügt bzw. hochlädt die dann auf auf den AVR geschrieben wird.
Mein Problem ist das der ROM größer als RAM ist und ich die geladene Datei nicht zwischenspeichern kann sondern direkt in den Flash laden muss.
Meine Frage ist nun ob es eine Möglichkeit gibt über HTML oder JS z.B. das nach jeder Zeile oder Zeichenanzahl ein delay eingefügt werden kann.
Ohne eine Verzögerung kommt der AVR mit dem Flashen nicht hinterher.
Vielleicht gibt es auch andere Lösungen an die ich nicht denke..
Ich arbeite mit dem AVR128DA auf C und dem ESP8266 als Netzwerkverbindung (HTTP Server der über dem AVR die Seiten bekommt).
Die Übertragung zwischen Web Browser und Server (deinem AVR+ESP8266) basiert vermutlich auf einem TCP Socket. Dieses Protokoll stellt automatisch sicher, dass Daten nicht schneller übertragen werden, als es der Empfänger zulässt.
Vermutlich besteht dein Problem darin, dass zwischen der AT Firmware des ESP8266 und dem AVR kein Handshake stattfindet. Dieses Problem kannst du mit einer eigenen Firmware auf dem ESP8266 lösen.
Eventuell reicht dir auch Quick&Dirty, die serielle Baudrate niedriger zu konfigurieren. Schau dir dazu mal die Doku vom AT+UART Befehl an.
Falls ich mit meinen Annahmen falsch liege, reiche bitte alle nötigen Infos nach.
Vermutlich besteht dein Problem darin, dass zwischen der AT Firmware des
ESP8266 und dem AVR kein Handshake stattfindet. Dieses Problem kannst du
mit einer eigenen Firmware auf dem ESP8266 lösen.
Das würde ich eigentlich gerne vermeiden, den esp auch noch anzupassen, sofern das mein Modell überhaupt zulässt, ich hab eine china version mit +,-,en,rst,txd,rxd die Programmierpins sind nicht herausgeführt.
Eventuell reicht dir auch Quick&Dirty, die serielle Baudrate niedriger
zu konfigurieren. Schau dir dazu mal die Doku vom AT+UART Befehl an.
Das hört sich gut an, bin aber schlecht im rechen. Mein Controller brauch für ein Wort 70us zum schreiben. Funktioniert das dann mit 9600Baud z.B.? Ohne den zugehörigen Auswertekram mal zu betrachten..
Controller Frequenz könnte ich 24Mhz nutzen.
Gibts da alternativen? Mir ist nur bekannt das http/https über
tcp läuft.
Meines Wissens nach nicht. Ich würde sehr gerne aus einem Javascript heraus Messwerte und Fernbedienungs-Kommandos per UDP übertragen, aber habe dazu keine Lösung gefunden.
http://ww1.microchip.com/downloads/en/DeviceDoc/40002183A.pdf
Seite 566.
Steht so zumindest da drin außer ich interpretiere es falsch. Problematisch könnte der Pageerase mit 10ms sein. Die Pages löschen könnte man aber auch davor mit Sicherheit löschen.
Meines Wissens nach nicht. Ich würde sehr gerne aus einem Javascript
heraus Messwerte und Fernbedienungs-Kommandos per UDP übertragen, aber
habe dazu keine Lösung gefunden.
Da kann ich dir leider nicht helfen da mich UDP nie Interessiert hat..
Danke, pauschal würde ich sagen das es funktionieren könnte wenn ich die Werte so ansehe. Ich mach mich mal einfach ran. Dann werde ich es schon sehen. Danke auf jeden fall.
daran einen "change"-Eventlistener, FileReader Objekt erstellen, Hex einlesen und parsen.
(FileReader ist praktisch in jedem Browser verfügbar: https://caniuse.com/filereader)
Danach kann das JS browserseitig über das Hex laufen, passende Blöcke bilden, und in mundgerechten Häppchen an deine ESP-AVR-Kombo senden.
-1200 ist die Wartezeit zwischen den Blöcken.
-4 ist die Zeilenanzahl die ein block beträgt.
-FXZ! und ? sind die Charakter zum finden des Blocks im AVR.
-Ich musste den code leider etwas verkürzen um die 2048 Sendezeichen des -ESPs nicht zu überschreiten..
Eine frage hätte ich dann noch, wie kann ich ausrechnen was meine höchste Baudrate bei 24Mhz ist mit einer 0,2% error?
Wäre es nicht sinnvoll, die Webseite auf dem ESP zu haben, der dann nach Upload der .hex (die problemlos in seinen Flash passen sollte) an den AVR-Bootloader per I2C/SPI/UART gibt, um ihn zu flashen?
Ich weiß nicht, irgendwie fühlt es sich komisch an, die ganze Arbeit auf einem 8bit-Controller mit begrenztem Flash und RAM zu machen, während sich nebendran ein 32bit-Controller mit ordentlich Flash langweilt.
Man könnte den AVR dann als IO-Expander nehmen, wenn man besondere Hardware-Funktionen braucht. Alles andere, inkl. Webseite und FW-Update dann aufm ESP, oder?
Wäre es nicht sinnvoll, die Webseite auf dem ESP zu haben, der dann nach
Upload der .hex (die problemlos in seinen Flash passen sollte) an den
AVR-Bootloader per I2C/SPI/UART gibt, um ihn zu flashen?
Dem stimme ich ganz zu. Mein ursprünglicher Gedanke wäre auch fast so gewesen. Allerdings hätte ich dann über die Webseite den ESP geflasht und auf den AVR verzichtet, außer bei zusätzlichen Pin bedarf.
Der Grundgedanke dahinter ist, dass ich alles über WIFI flashen möchte. Im jetzigen Fall, dient der ESP einfach als auswechselbares Element, welches Datenkommunikation ermöglicht.
Das Problem ist das ich keinen Plan habe wie man einen ESP OTA flasht. Im Internet findet man zwar Anleitungen mit einem Arduino aber auf ein externes Bauteil möchte ich dann verzichten. Zumindest habe ich beim ESP-WROOM32 gesucht, ob es im jetzigen Fall mit einem ESP-M3 anders ist weiß ich nicht. Danach habe ich dann nicht mehr gesucht, da es aufwendiger schien, als meine jetzige Lösung.
Das Problem ist das ich keinen Plan habe wie man einen ESP OTA flasht.
Im Internet findet man zwar Anleitungen mit einem Arduino aber auf ein
externes Bauteil möchte ich dann verzichten. Zumindest habe ich beim
ESP-WROOM32 gesucht, ob es im jetzigen Fall mit einem ESP-M3 anders ist
weiß ich nicht. Danach habe ich dann nicht mehr gesucht, da es
aufwendiger schien, als meine jetzige Lösung.
FOTA braucht keinen Arduino als Hardware. Nur viele programmieren den ESP in der Arduino Umgebung.