Forum: HF, Funk und Felder RFM12(B) - Funk-Bootloader - JeeBoot


von Daniel A. M. (amad) Benutzerseite


Lesenswert?

Servus!

Nachdem ich mich schon relativ viel mit den RFM12-Funkmodulen 
beschäftigt habe & auch schon selbst einen Versuch[1] gestartet habe, 
einen Funk-Bootloader, der es ermöglicht mit einem an den PC 
angeschlossenen Modul ein entferntes Modul komplett neu zu 
programmieren, habe ich ein Projekt gefunden, bei welchem dies bereits 
mit augenscheinlich viel dahinter realisiert wurde:
http://jeelabs.org/2012/10/31/meet-the-wireless-jeeboot/
http://jeelabs.net/projects/jeeboot/wiki/Design_Notes

Eigentlich bin ich ja nicht so der Fan von der Programmierung in C++ auf 
einem AVR, aber da ich nur an der genannten Funktionalität interessiert 
bin, habe ich mir gedacht, dass ich mir die 4KB Flash für den Bootloader 
schon gönnen kann.
Ich habe jetzt schon einige Stunden versucht es zum Laufen zu bringen, 
jedoch fehlt anscheinend eine Kleinigkeit, die ich nicht bedacht habe.

Die Hardware funktioniert, ich habe sie mit dem RF12demo, welches so wie 
bei "test1" im ersten Link beschrieben (unter File -> Sketchbook -> 
libraries -> JeeLib -> RF12 -> RF12demo) getestet.
http://jeelabs.org/2013/02/03/dijn-02-the-arduino-ide/
http://jeelabs.net/projects/cafe/wiki/First_steps

Meine Vorgehensweise war schlussendlich folgende:
Ich zweimal die Schaltung mit einem ATMega328P(16MHz Quarz), welcher 
nach der aktuellen v6er Version der Platine mit einem RFM12 verdrahtet 
ist aufgebaut.
http://jeelabs.net/projects/hardware/wiki/JeeNode

Fusebits: [2]
HIGH  LOW  EXT  SEC
Original Arduino Pro Mini 5V 16MHz, alter Bootloader mit 57600 Baud:
DA  FF  FD  CF
Server (Optiboot-Serieller Bootloader mit 115200 Baud -> RF12demo):
DE  FF  FD  FC
Client (JeeBoot ohne Bootloader):
D8  4E  FE  FF

Beim Server habe ich zuvor Optiboot
1
C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex
 draufgeflasht, um "bequem" direkt per Arduino IDE das RF12demo 
aufzuprogrammieren.
Geht z.B. auch per
1
avrdude -patmega328p -carduino -P\\.\COM4 -b115200 -Uflash:w:"RF12demo.hex":i
Beim Client habe ich die .hex-Datei von
https://github.com/jcw/jeeboot/tree/master/arduino/bootloader
sowie in einem weiteren Versuch die aktuellere, welche durch Ausführen 
von make für die Files in dem Ordner entsteht, direkt per ISP 
aufgeflasht.

Die alte .hex-Datei scheint so halbwegs mit der Gegenstelle 
https://github.com/jcw/jeeboot/tree/master/arduino/testServer2
zu funktionieren, jedoch bleibt das bei Übertragung von ein paar Bytes 
schon hängen.

Für den Server ist eine in Go-Programm am PC vonnöten, welches ich nur 
unter Ubuntu zum Laufen bekam mit folgenden Befehlszeilen:
1
sudo apt-get install go mercurial -y
2
GOPATH=$HOME/go go get github.com/jcw/jeeboot/server/
3
cd ~/go/src/github.com/jcw/jeeboot/server
4
sudo GOPATH=$HOME/go go run main.go

Achja & um vielleicht zu verhindern, dass jemand, so wie ich, in die 
Falle tippt, dass er durch Verwendung von RFM12er und eben nicht 
RFM12B-Modulen keine Kommunikation zusammenbringt, hier sind die 
Unterschiede aufgelistet:
http://jeelabs.org/2009/05/06/rfm12-vs-rfm12b-revisited/
Wobei die Zeile "RFM12 can only sync on the hex “2DD4″ 2-byte pattern" 
ganz wichtig ist - sie bedeutet, dass man die group id auf 212(=0xD4) 
lassen muss! Das gemeine an der Sache ist, dass dann zwar das Senden, 
aber nicht das Empfangen funktioniert.

So, jetzt ist aus dem Beitrag wohl auch ein kleines Nachschlagewerk zum 
Umgang mit dem Arduino-Bootloader geworden, aber dass kann 
wahrscheinlich sicher mal jemand brauchen oder zumindest ich, wenn ich 
mal die Fuses nachschlagen will. ;)

Hat sich schon jemand von Euch damit beschäftigt & sieht vielleicht 
meinen Fehler auf den ersten Blick? Falls ich was vergessen habe zu 
erwähnen bitte einfach nachfragen.

Schönen Gruß,
Daniel

PS.: Natürlich muss man erst die Arduino IDE installieren um die Files 
in den C:\... Pfaden auffinden zu können: 
http://arduino.cc/en/Main/Software
Die JeeLib Library ist natürlich auch vonnöten: 
https://github.com/jcw/jeelib/archive/master.zip

[1] Beitrag "Re: Funkmodul RFM12 in Assembler"
Wenn alle Stricke reissen, werde ich wohl meinen .asm-Code nun endlich 
nach Jahren fertigstellen... Passt dafür dann auch schon in einen 
Tiny13!
[2] Was mich schon lange irritiert ist, dass die EXT-Fuse bei vielen 
"Arduino-Projekten" ungültig ist, z.B. steht in
1
C:\Program Files (x86)\Arduino\hardware\arduino\boards.txt
der Wert 0x05, welche nach dem wieder auslesen natürlich auf FD steht 
beim Arduino Uno, welcher auch in der IDE einzustellen ist als 
verwendetes Board.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.