Entwicklung SIGNALDuino Empfänger Firm- und Hardware V4 für Maple Mini und ESP32

Begonnen von Ralf9, 13 Dezember 2019, 12:48:26

Vorheriges Thema - Nächstes Thema

Ranseyer

Zitat von: juergs am 10 April 2020, 21:19:44
Anbei die STLs zum Selber-3D-Drucken.


Danke, Testdruck ist durch. Sieht recht ordentlich aus und ist präzise.
Wenn es zum verschrauben und ohne LAN wäre, das wäre perfekt...  8)
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

juergs

ZitatWenn es zum verschrauben und ohne LAN wäre, das wäre perfekt...

.. I know  ;D

Ja, das LAN-Modul trägt etwas auf, ohne LAN wäre das Ganze etwas schlanker.
Allerdings die Idee mit Schienen  habe ich ad acta gelegt: die CC1101 sind zu nah am Rand ...  ;)

Die SnapIns passen nicht 100%ig und brauchen etwas Nachbearbeitung (bei meinem ANET A8), habe sie etwas zu weit unten platziert ...
D.h. noch eine weitere Runde  ...

Grüße,
Jürgen

PS: Zum Air602: Oh, wie ich AT-Befehle mag   ::)

Aber:
https://yoursunny.com/t/2018/Air602-blink/ mit GCC  :)
https://w600.chip.haus/
https://docs.wemos.cc/en/latest/tutorials/w600/get_started_with_micropython_w600.html
http://www.winnermicro.com/en/upload/1/editor/1568715663185.pdf
https://docs.wemos.cc/en/latest/tutorials/w600/get_started_with_micropython_w600.html
http://www.winnermicro.com/en/html/1/156/158/536.html

AT+
AT+WPRT=0
AT+SSID=<Eigene_WLAN_SSID>
AT+KEY=1,0,<WLAN_PWD>
AT+WJOIN
AT+NIP=!0
AT+LKSTT
>> +OK=1,"192.168.178.114","255.255.255.0","192.168.178.1","192.168.178.1","0.0.0.0"


Mit Accesspoint verbunden
ZitatC:\Users\js>ping 192.168.178.114

Ping wird ausgeführt für 192.168.178.114 mit 32 Bytes Daten:
Antwort von 192.168.178.114: Bytes=32 Zeit=14ms TTL=255
Antwort von 192.168.178.114: Bytes=32 Zeit=6ms TTL=255
Antwort von 192.168.178.114: Bytes=32 Zeit=14ms TTL=255
Antwort von 192.168.178.114: Bytes=32 Zeit=4ms TTL=255

Ping-Statistik für 192.168.178.114:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 4ms, Maximum = 14ms, Mittelwert = 9ms
und fertig zur Socket-Übertragung .... oder zum Durchschleusen eines Seriellen Ports.   :)

Statt mit AT-Befehlen geht es auch mit Micro Python für W600:

https://github.com/vshymanskyy/w600tool
ZitatC:\Users\js>python3 "D:\Work_STM32\_Hardware\Air602\_software\w600tool-0.1\w600tool.py" -p COM15 --upload  D:\Work_STM32\_Hardware\Air602\_firmware\W600_Micropython_Firmware\W60X_MicroPython_1.10_B1.3_IMG\wm_w600_gz.img --upload-baud 115200
Opening device: COM15
Push reset button to enter bootloader...
Uploading D:\Work_STM32\_Hardware\Air602\_firmware\W600_Micropython_Firmware\W60X_MicroPython_1.10_B1.3_IMG\wm_w600_gz.img
0% [##############################] 100% | ETA: 00:00:00
Total time elapsed: 00:00:32
Reset board to run user code...

https://www.wemos.cc/en/latest/tutorials/w600/get_started_with_micropython_w600.html
Zitat>>> import network
>>>
>>> sta_if = network.WLAN(network.STA_IF)
>>> sta_if.active(True)
True
>>> sta_if.scan()
[(b'mywlan', b'|\xffM_\xab7', 1, -36, 32, False), (b'Sydney', b'l\x19\x8f\x07\x9dt', 1, -79, 60, False), (b'UPC1807062', b"\xc4'\x95w5\xa0", 1, -97, 60, False), (b'UPCE86A363', b'8C}\x10\x02#', 1, -91, 60, False), (b'FRITZ!Box 6490 Cable', b'\x98\x9b\xcbd\xf6X', 1, -89, 32, False), (b'adm', b'\x80*\xa8q\xce\xd0', 6, -63, 32, False), (b'DIRECT-25-HP OfficeJet Pro 8710', b'\x80\xceb\xf6g)', 6, -79, 32, False), (b'FRITZ!Box 7490', b'41\xc4\xf2\x03\x9a', 6, -81, 32, False), (b'onkel hubert', b'$e\x11?\xa0"', 8, -91, 32, False), (b'FRITZ!Box Gastzugang', b'.:\xfd\xfeZf', 10, -93, 32, False), (b'FRITZ!Box 6591 Cable IB', b',:\xfd\xfeZf', 10, -91, 32, False), (b'HZN245502401', b'\x1c:\xdet\x1f&', 13, -79, 60, False)]
>>> sta_if.connect("mywlan","mywlan_pwd")
>>>
>>> sta_if.isconnected()
True
>>>
>>>

Ein Schritt weiter: http://www.ultratechie.com/projects/w600-micropython/

Ralf9

Ich habe rausgefunden daß die Anbindung über das LAN Modul stabil funktioniert, wenn ich die SerialUSB deaktiviere.
Ohne USB sollte es dann auch mit dem Bootloader2.0 funktionieren.

Ich habe vor die Befehle vom MapleCun zu übernehmen:

Wim - MAC Address
Wia - IPV4 Address
Wig - IPV4 gateway
Win - IPV4 network mask

Da "R" beim Signalduino schon für freeram verwendet ist, werde ich zum auslesen "ri" verwenden.

Ich habe bei der Ethernetlib noch keine Möglichkeit gefunden wie ich die MAC Adresse des W5500 auslesen kann
https://www.arduino.cc/en/Reference/Ethernet

Kann mit der culw die "build in" MAC Adresse des W5500 ausgelesen werden, dann könnte ich diese ausgelesene MAC mit "Wim" für den Signalduino verwenden.

Gruß Ralf


FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Telekatz

Der W5500 hat keine individuelle MAC Adresse. Die muss man dem selber geben. Für die a-culfw verwende ich den Adressbereich des VEB Kombinat Robotron und erzeuge mit der Seriennummer des STM32 eine zufällige MAC Adresse. Bei der Verwendung in einem lokalen Netzwerk sollte das keinen Adressenkonflikt verursachen.

Zitat von: Ralf9 am 15 April 2020, 23:30:19
Ich habe rausgefunden daß die Anbindung über das LAN Modul stabil funktioniert, wenn ich die SerialUSB deaktiviere.
Ohne USB sollte es dann auch mit dem Bootloader2.0 funktionieren.
Warum funktioniert es mit USB nicht mit dem Bootloader 2.0?

Ralf9

ZitatFür die a-culfw verwende ich den Adressbereich des VEB Kombinat Robotron und erzeuge mit der Seriennummer des STM32 eine zufällige MAC Adresse.
Mir ist noch nicht klar wie ich an die Seriennummer des STM32 rankomme
https://github.com/heliflieger/a-culfw/blob/master/culfw/clib/ethernet.c
#define bsbg boot_signature_byte_get

ZitatWarum funktioniert es mit USB nicht mit dem Bootloader 2.0?
Ich weiß auch nicht warum, mit "dmesg -w -e" lässt sich erkennen, daß mit dem Bootloader2.0 nach einem reset das USB nicht richtig initialisiert wird:

Ich verwende in der Arduino IDE den core 1.8.0
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

Ich nehme zum Testen den folgenden Sketch
int8_t led = 0;
//#define USBD_ENUM_DELAY 500

void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  led = ~ led & 1;
  digitalWrite(LED_BUILTIN, led);
  delay(200);
}


Ich flashe damit:
./dfu-util -d 1eaf:0003 -a 1 -D /tmp/arduino_build_70869/MapleminiTestusb.ino.bin -R

Um zu sehen ob das USB richtig initialisiert wird, öffne ich eine Konsole mit "dmesg -w -e"

Fall 1, Orginalbootloader:
USB funktioniert auch nach power on oder reset
[  +7,407971] usb 3-9: new full-speed USB device number 11 using xhci_hcd
[Apr13 00:37] usb 3-9: New USB device found, idVendor=1eaf, idProduct=0003
[  +0,000001] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0,000001] usb 3-9: Product: Maple 003
[  +0,000001] usb 3-9: Manufacturer: LeafLabs
[  +0,000001] usb 3-9: SerialNumber: LLM 003
[  +2,451835] usb 3-9: USB disconnect, device number 11
[  +0,306822] usb 3-9: new full-speed USB device number 12 using xhci_hcd
[  +0,149432] usb 3-9: New USB device found, idVendor=0483, idProduct=5740
[  +0,000002] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0,000000] usb 3-9: Product: MAPLEMINI_F103CB CDC in FS Mode
[  +0,000001] usb 3-9: Manufacturer: STMicroelectronics
[  +0,000001] usb 3-9: SerialNumber: 6D8824785548
[  +0,000460] cdc_acm 3-9:1.0: ttyACM0: USB ACM device


Fall 2, Bootloader2.0:

## reset Taste
[ +20,228840] usb 1-9: USB disconnect, device number 60
[  +0,470319] usb 1-9: new full-speed USB device number 61 using xhci_hcd
[  +0,149091] usb 1-9: New USB device found, idVendor=1eaf, idProduct=0003
[  +0,000001] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0,000001] usb 1-9: Product: Maple 003
[  +0,000001] usb 1-9: Manufacturer: LeafLabs
[  +0,000005] usb 1-9: SerialNumber: LLM 003
## flash
[  +1,507190] usb 1-9: reset full-speed USB device number 61 using xhci_hcd
[  +0,147934] usb 1-9: device firmware changed
[  +0,000081] usb 1-9: USB disconnect, device number 61
[  +0,127730] usb 1-9: new full-speed USB device number 62 using xhci_hcd
[  +0,149344] usb 1-9: New USB device found, idVendor=0483, idProduct=5740
[  +0,000002] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0,000001] usb 1-9: Product: MAPLEMINI_F103CB CDC in FS Mode
[  +0,000000] usb 1-9: Manufacturer: STMicroelectronics
[  +0,000001] usb 1-9: SerialNumber: 8D7452895051
[  +0,000449] cdc_acm 1-9:1.0: ttyACM0: USB ACM device
## reset Taste
[  +6,039450] usb 1-9: USB disconnect, device number 62
[  +0,000065] cdc_acm 1-9:1.0: failed to set dtr/rts
[  +0,414680] usb 1-9: new full-speed USB device number 63 using xhci_hcd
[  +0,149008] usb 1-9: New USB device found, idVendor=1eaf, idProduct=0003
[  +0,000002] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0,000001] usb 1-9: Product: Maple 003
[  +0,000000] usb 1-9: Manufacturer: LeafLabs
[  +0,000001] usb 1-9: SerialNumber: LLM 003


Hier fehlt nach einem reset dieser Teil:
[  +2,451835] usb 3-9: USB disconnect, device number 62
[  +0,306822] usb 3-9: new full-speed USB device number 63 using xhci_hcd
[  +0,149432] usb 3-9: New USB device found, idVendor=0483, idProduct=5740
[  +0,000002] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0,000000] usb 3-9: Product: MAPLEMINI_F103CB CDC in FS Mode
[  +0,000001] usb 3-9: Manufacturer: STMicroelectronics
[  +0,000001] usb 3-9: SerialNumber: 6D8824785548
[  +0,000460] cdc_acm 3-9:1.0: ttyACM0: USB ACM device



Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Telekatz

Zitat von: Ralf9 am 16 April 2020, 19:41:00
Mir ist noch nicht klar wie ich an die Seriennummer des STM32 rankomme
https://github.com/heliflieger/a-culfw/blob/master/culfw/clib/ethernet.c
#define bsbg boot_signature_byte_get
Der Teil gehört auch zu AVR. Der ARM Code ist darüber:
#ifdef ARM
  uint32_t fserial = flash_serial();

  buf[2] = 'm'; strcpy_P(buf+3, PSTR("008041"));

  tohex((uint8_t)(fserial>>16 & 0xff), (uint8_t*)buf+9);
  tohex((uint8_t)(fserial>>8 & 0xff), (uint8_t*)buf+11);
  tohex((uint8_t)(fserial & 0xff), (uint8_t*)buf+13);

  write_eeprom(buf);//MAC

Da der Cube zuerst da war und da die Serialnummer vom Dataflash Baustein verwendet wird, steht der entsprechende Code in eeprom.c

Zitat von: Ralf9 am 16 April 2020, 19:41:00
Ich flashe damit:
./dfu-util -d 1eaf:0003 -a 1 -D /tmp/arduino_build_70869/MapleminiTestusb.ino.bin -R
Ist der Sketch für den Originalbootloader oder den Bootloader2.0 gelinkt worden? Der Parameter "-a 1" bedeutet Startadresse ist 0x8005000. Ein für den Bootloader2.0 gelinkter Sketch muss mit "-a 2" geladen werden.

Found DFU: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=0, name=""
Found DFU: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=1, name="STM32duino bootloader v1.0  Upload to Flash 0x8005000"
Found DFU: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=2, name="STM32duino bootloader v1.0  Upload to Flash 0x8002000"
   

Ralf9

ZitatDa der Cube zuerst da war und da die Serialnummer vom Dataflash Baustein verwendet wird, steht der entsprechende Code in eeprom.c
Ich habe testweise die UID mal ausgelesen:
66bff57 50518349 87085332

Wenn ich das richtig verstehe, dann wird in der a-culfw von den Byte 0 - 8 (57 50518349 87085332) eine 32 Bit crc Prüfsumme gebildet.
Von dieser 32 Bit crc Prüfsumme werden das Byte 0 - 2 für die MAC Adresse verwendet. Dies sieht recht aufwendig aus.

Ist es nicht auch ausreichend, daß direkt die Bytes 0 - 2 für die MAC Adresse verwendet werden, mit der o.g. UID wäre die MAC dann: 00 80 41 08 53 32


ZitatIst der Sketch für den Originalbootloader oder den Bootloader2.0 gelinkt worden? Der Parameter "-a 1" bedeutet Startadresse ist 0x8005000. Ein für den Bootloader2.0 gelinkter Sketch muss mit "-a 2" geladen werden.

Es macht keinen Unterschied ob das bin-file für den Originalbootloader oder den Bootloader2.0 gelinkt worden ist ( Parameter "-a 1" oder "-a 2")

Gibt es eine Möglichkeit dies zu debuggen?
Bei der IDE gibt es bei optimize die Option debug (-g)
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

juergs

Hallo Ralf9,

und wenn man wirklich mal den anderen Typ von (MSC)-Bootloader von telekatz ausprobiert?

=> Reset nach Einschalten 2 mal hintereinander drücken, dann öffnet sich ein USB-Laufwerk, idas man die Binary einfach reinlegen muss. Programmiert sich quasi selbst  :) :D
Würde ich auch mal ausprobieren, vielleicht verträgt sich der BL mit dem SD-Binary und serieller Schnittstelle(n)...

Das wäre eine wirklich eine komfortable Art, die SignalDuino-Binary zu Flashen (auf Grund der Infos von Telekatz  mit  den -a1 und -a2 Parametern kein Aufwand mehr) ...

Debugmöglichkeiten wären mit VSCode (habe das hier noch gefunden https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) und ggf. von meiner Seite mit VisualStudio und https://visualgdb.com/tutorials/arm/stm32/.
Aber, Grundvorraussetzung wäre wirklich das "Aufräumen" des Codes um  "einfacher" (!), also ohne große C/C++ Klimmzüge und "Tricks" kompilieren zu können.
Das Debuggen mit STLINK (SW-DEBUG) oder Black Magic Probe funktioniert bei mir.

Habe vor kurzem versucht Sideys Version zu kompilieren,aber es scheint eigentlich nur unter Linux kompilierbarzu sein (...) und er macht Klimmzüge, dass eine Kompilierbarkeit mit make-Umgebung + Arduino-IDE  gegeben ist.
Das führt zu quasi aus meiner Sicht zu unendlich viel Problemen beim Portieren auf WIN10. Was aber nicht heißen soll, dass es nicht geht: Stichwort WSL und Ubuntu. Inzwischen auch mit grafischer Oberfläche und XRDP:
(https://www.codeproject.com/Tips/5255423/Linux-on-Windows)

Gruß,
Jürgen

/edit, Geht sogar auf leeren Maple ohne CC1101-Module Nach dem Soft-Reset des STLINKs kamen nur 2 Schnittstellen,  nach Reset-Button und Abziehen USB dann 3, wie gewohnt.:
Zitat? (? is unknown) Use one of B b C F i A Z N E k G M K L U Y R T V W X e f l p t x z
V 1.24.02 a-culfw Build: 208 (2017-03-30_16-08-05) MapleCUNx4_00 (F-Band: 868MHz)

Check nach Reset:
Zitat? (? is unknown) Use one of B b C F i A Z N E k G M K L U Y R T V W X e f l p t x z

Geht auch prima.  :D

Telekatz

Poste hier mal die .bin und die .map Datei von deinem Testsketch.

Zitat von: Ralf9 am 17 April 2020, 00:09:03
Ich habe testweise die UID mal ausgelesen:
66bff57 50518349 87085332

Wenn ich das richtig verstehe, dann wird in der a-culfw von den Byte 0 - 8 (57 50518349 87085332) eine 32 Bit crc Prüfsumme gebildet.
Von dieser 32 Bit crc Prüfsumme werden das Byte 0 - 2 für die MAC Adresse verwendet. Dies sieht recht aufwendig aus.

Ist es nicht auch ausreichend, daß direkt die Bytes 0 - 2 für die MAC Adresse verwendet werden, mit der o.g. UID wäre die MAC dann: 00 80 41 08 53 32
Mir erschien es sicherer, eine CRC Prüfsumme über die UID zu verwenden. Für den Fall, dass während der Produktion nicht die ersten Bytes für die Seriennummer hochgezählt werden.

Ralf9

ZitatPoste hier mal die .bin und die .map Datei von deinem Testsketch.

uint8_t led = 0;
//#define USBD_ENUM_DELAY 20

void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  led = ~ led & 1;
  digitalWrite(LED_BUILTIN, led);
  delay(2000);
}


FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

juergs

Hallo Ralf,

erst mal Deine bin (MapleminiTestusb.ino.bin) geflasht.
Blinkt und Serielle COM30 ist angelegt.

Beim Einrichten nach dem Einlegen in das USB-LW  kam eine andere Melung Maple ... FSC. usw, war leider zu schnell um ein Screenshot zu machen.

Ralf9

Dann verhält es sich unter Windows anders als unter Linux, ich habe es bis jetzt nur unter Linux getestet
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

juergs

Welches Verhalten meinst Du?

Nach Reset Schnittstelle nicht mehr da, das hatte ich aber auch schon mit dem 2.0er Bootloader.

Ralf9

ZitatNach Reset Schnittstelle nicht mehr da, das hatte ich aber auch schon mit dem 2.0er Bootloader.

Ja, dieses verhalten mit dem 2.0er Bootloader und dem core 1.8.0 meine ich.

FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

juergs

Ist bei mir mit dem MSC-BL von Telekatz nicht der Fall.
Läuft.

Versuche  mal den MapleCUN Compile von trebron106 .  => geht aber nicht: da hängt der  BL mit drin !

@Ralf9: hast Du ein Binary der "dev-r334_cc1101" Maple-SDuino Version auf 0x8002000?