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

Ralf9

Ich habe die Unterstützung vom core 2.0 und dem LAN vom MapleCul (MapleCUN) ins github commited
https://github.com/Ralf9/SIGNALDuino/commit/4048ba2970f8dba5fda0fae741ea916cd76bd303
https://github.com/Ralf9/SIGNALDuino/tree/dev-r412_cc1101

für MapleCul LAN ist in der "compile_config.h" die folgende config notwendig:
//#define MAPLE_SDUINO 1
#define MAPLE_CUL 1
//#define BLACK_BOARD 1  // 1 - USB, 2 - serial USART2 fuer ESP
#define LAN_WIZ 1        // nur fuer USR-ES1 W5500


Ich kann es selber nicht testen da ich kein MapleCUN habe
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

Ralf9

Liest hier jemand mit der einen MapleCUN hat und das LAN testen kann?
Benötigt Ihr noch ein bin-File?
Sonst muss ich mir selber zum Testen was mit Dupont Kabeln zusammenstecken.

Daß es so mit dem LAN funktionieren könnte, habe ich zufällig in einem Beispiel zur Ethernet Lib gesehen.
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

FunkOdyssey

Ich habe deine Änderungen gestern getestet und konnte meinen MapleCUN über die Arduino IDE flashen. Aber mehr ist auch nicht passiert. Ich finde Wiznet nicht im LAN. Weder per DHCP noch wenn ich im Sketch die IP statisch vergebe.

Flash-Log:

maple_loader v0.1
Resetting to bootloader via DTR pulse
Reset via USB Serial Failed! Did you select the right serial port?
Searching for DFU device [1EAF:0003]...
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...

Found it!

Opening USB Device 0x1eaf:0x0003...
Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=2, name="STM32duino bootloader v1.0  Upload to Flash 0x8002000"
Setting Configuration 1...
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Transfer Size = 0x0400
bytes_per_hash=1451
Starting download: [##################################################] finished!
state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present
error resetting after download: usb_reset: could not reset device, win error: Ein nicht vorhandenes Ger�t wurde angegeben.
Done!

Resetting USB to switch back to runtime mode

timeout waiting for COM13 serial


Es macht aber sicher Sinn, wenn noch ein weitere Vertreter das testet. Da ich ja auch Probleme mit der MapleCUL-FW hatte, schließe ich allgemeine Probleme bei mir nicht aus.

juergs

Hallo Ralf,
habs gerade gesehen.

ZitatLiest hier jemand mit der einen MapleCUN hat und das LAN testen kann?

Würde mal versuchen Testen ..

Musste leider feststellen: Habe nur Ranseyers Signaduino-Mini-Variante mit Netzwerk, nicht die CUN-Variante.

FunkOdyssey

Zitat von: FunkOdyssey am 20 Mai 2021, 22:11:51

Watchdog enabled
Reading values from eeprom
CCInit
detect B: Partn=0 Ver=0x18
Starting timerjob
rxB=1



Kann man an dieser Ausgabe erkennen, ob der Sketch funktioniert?

Ich habe eigentlich vier CC1101-Stamps auf dem Maple. Müsste er diese nicht anzeigen?
Oder erscheinen die erst, wenn man die Radios aktiviert wie von Jürgen vorgeschlagen?


Alles im Wiki gefunden.




Ich lese gerade hier: https://forum.fhem.de/index.php/topic,106278.msg1034620.html#msg1034620
Darum werde ich später einen anderen Bootloader ausprobieren. Ich nutze den BL aus dem Thread von locutus.
Ich denke zwar, dass der BL problemlos funktioniert. Trotzdem ich versuche es.

juergs

@Ralf:
git clone -b dev-r412_cc1101 --recurse-submodules -c core.symlinks=true https://github.com/Ralf9/SIGNALDuino.git
Download funktioniert komplett mit der Micro-Api!  :)

@FunkOdyssey:
Warum nimmst Du nicht einfacherhalber diesen Bootloader:
https://github.com/Telekatz/MSC-stm32f103-bootloader/releases/download/V1.1/MSCboot_maplemini.bin

Der ist am Einfachsten: 2mal in einer Sekunde den Reset Button drücken. USB Laufwerk öffnet sich. Bin-Datei reinlegen und gut ist ...  ;)

Diese Ausgabe erzeugt schon Dein Maple via serieller Ausgabe und ist die Standard-Ausgabe des Signalduinos beim Einschalten:
ZitatWatchdog enabled
Reading values from eeprom
CCInit
detect B: Partn=0 Ver=0x18
Starting timerjob
rxB=1

In FHEM oder je nach Gusto: Terminalprogramm Cutecom unter Linux z.B. oder Miniterm auf der Konsole funktioniert.
Egal mit welcher Bitrate, der Maple mit Signalduino-FW passt sich automatisch an.
Ich benutze "meines" mit ein paar nützlichen Features: SerialTerminal für Windows.

Dort kannst Du Kommandos eingeben:

Mit V (get Version) bekommt man eine Übersicht über die Module z.B. (R: A1 B0*).
Mit * wird das selektierte cc1101 Modul markiert
Ein "-" hinter dem Modul (A-D) , bedeuted, daß dieses Modul nicht richtig erkannt oder angelegt wurde,
  ein "i" bedeuted, daß das Modul zwar korrekt erkannt wurde, aber noch keiner Bank zugeordent wurde.
                                                                                                                 
Wenn ein Modul nicht aufgeführt ist, dann ist es noch deaktiviert.   
        (Anmerkung: ist bei 4er Versionen der Standard-Fall: Es wird nur A+B angezeigt. mit e EEPROM initialisieren, dann mit CREC + CRED erzeugen bzw. mit CRECW, CRECDW festschreiben.)


Add zum Bild: Die freien Register können z.B. für OOK/FSK  mit versch. Bitraten genutzt werden und beliebig umgeschalten  bzw. gesetzt werden!
Hier geht's zu FSK: https://forum.fhem.de/index.php/topic,111653.15.html

Befehlslisten: https://forum.fhem.de/index.php/topic,106278.msg1141506.html#msg1141506
                    https://forum.fhem.de/index.php/topic,58396.msg497921.html#msg497921
Linkliste Signaduino: https://forum.fhem.de/index.php/topic,111653.msg1058901.html#msg1058901

Beispiel-Konfiguration (mit nicht erreichbarem B-Modul)
ZitatSENT: e
ccFactoryReset done
r=B b=0 rx=0 ccmode=0 sync=D391 ccconf=10B07157C43023B900070018146C070090 boffs=0000
SENT: CREBW
detect B: timeout, no cc1101
SENT: bs
Bank__ 0 1 2 3 4 5 6 7 8 9  Radio_ - - - - - - - - - -  N_____ 0 0 - - - - - - - -  ccmode 0 3 - - - - - - - -    0 - SlowRF
SENT: V
V 4.1.2-dev210205 SIGNALduinoAdv cc1101 (R: B-*) - compiled at Feb  5 2021 23:12:37
SENT: ?
? Use one of ?S ? b CE CD CG CR CS CW C eC e P r R S t T V W x XE XQ
SENT: CREA
detect A: Partn=0 Ver=0x14
SENT: CREAW
detect A: Partn=0 Ver=0x14
SENT: bA0CREAW
Bank 0 is already used by radio B
SENT: bA1
set r=A b=1 ccmode=3 sync=2DD4 ccconf=21656A895C0622F856070018166C436891 boffs=0100
SENT: e
ccFactoryReset done
r=B b=0 rx=0 ccmode=0 sync=D391 ccconf=10B07157C43023B900070018146C070090 boffs=0000
SENT: CREBW
detect B: timeout, no cc1101
SENT: bs
Bank__ 0 1 2 3 4 5 6 7 8 9  Radio_ - - - - - - - - - -  N_____ 0 0 - - - - - - - -  ccmode 0 3 - - - - - - - -    0 - SlowRF
SENT: V
V 4.1.2-dev210205 SIGNALduinoAdv cc1101 (R: B-*) - compiled at Feb  5 2021 23:12:37
SENT: CREA
detect A: Partn=0 Ver=0x14
SENT: CREAW
detect A: Partn=0 Ver=0x14
SENT: bA0CREAW
Bank 0 is already used by radio B
SENT: bA1
set r=A b=1 ccmode=3 sync=2DD4 ccconf=21656A895C0622F856070018166C436891 boffs=0100
SENT: V
V 4.1.2-dev210205 SIGNALduinoAdv cc1101 (R: A1* B-) - compiled at Feb  5 2021 23:12:37
MN;D=CC060D060337099601410000;R=43;
MN;D=9946042F32AAAA00006D0CD3;R=254;
MN;D=9946032F9CAAAA000014F717;R=252;
MN;D=CD0C051C1CFFFFFFFFFFFFFF;R=40;

MN;D=CC060D060337099601410000;R=43;
MN;D=9946042F32AAAA00006D0CD3;R=254;
MN;D=9946032F9CAAAA000014F717;R=252;
MN;D=CD0C051C1CFFFFFFFFFFFFFF;R=40;

Ralf9

Zitat von: Ralf9 am 16 Mai 2021, 00:40:09
Evtl funktioniert es auch ohne diese Anpassungen, wenn in der SIGNALDuino.ino dies
#ifdef MAPLE_CUL
SPIClass SPI_1(28, 29, 30);
Ethernet.init((31);
#endif

vor dieser Zeile eingefügt wird
if (ip[3] != 0) {
https://github.com/Ralf9/SIGNALDuino/blob/5b00e34846327c665186a2393f18b085ef126f62/SIGNALDuino.ino#L344

Hab mal ein LAN Modul auf die SPI-2 verkabelt und getestet, es funktioniert so nicht.
Werde mal ein Testprogramm schreiben.
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

Ralf9

Inzwischen funktioniert auch beim MapleCUL das LAN (MapleCUN). Hab mir ein MapleCUN zusammengesteckt (siehe Anlage).
In der Anlage sind zwei Bin Files
Maple_cul_LAN_Os_412dev210522
Maple_cul_LAN_O1_412dev210522

Falls das omtimize Fast -O1 nicht stabil funktioniert, kann auch das Os versucht werden.
omtimize Fast -O1     75048 Bytes (57%)
omtimize Smallest -Os 65808 Bytes (50%)

Wer es selber kompilieren will, der benötigt dazu eine gepatchte Ethernetlib
https://github.com/arduino-libraries/Ethernet/pull/134
an dem patch lässt sich auch erkennen, warum ich mich an das LAN für den MapleCUL seither nicht so richtig rangetraut habe:
https://github.com/arduino-libraries/Ethernet/pull/134/commits/37927e7c4efd01d04ca32893329e3f3fa77a9b12


Wenn dies soweit funktioniert, mache ich im github einen neuen branch  dev-r420_cc1101
V 4.2.0-dev210514 SIGNALduinoAdv ESP32 (R: B0*)

Mit einem RXB6 Empfänger habs ich schon getested

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

FunkOdyssey

Ich habe gestern einige Stunden mit dem Maple zugebracht. Alles versucht und den MapleCUL mit der Signalduino-Firmware nicht in Betrieb nehmen können.
Danach habe ich viele nervöse Stunden damit verbracht, den MapleCUL mit a-culfw wieder in den Ursprungszustand zu versetzen.
Ich dachte schon, dass ich nur noch Müll auf dem Tisch liegen habe. Doch per LAN lief a-culfw einwandfrei.
Egal wie und wo ich flashe, ich habe ein Problem mit dem seriellen Monitorzugriff auf den Maple.
Selbst die Anleitung von locutus, in der man mit screen die Baudrate der UARTs anpassen kann, klappt bei mir nicht. Auf pb0@115200 kam keine Reaktion.
Also habe ich sogar mit a-culfw Probleme. Die vier CC1101 konnte ich aber als CUL und CUN in FHEM (wieder) einbinden.

Auch der MSC-Bootloader hat bei mir Probleme. Das USB-Laufwerk wurde nach 2xReset zwar angezeigt, aber Windows und Linux konnten nicht darauf zugreifen. Der Windows-Explorer ist beim Zugriff eingefroren.

Heute ist ein neuer Tag und ich habe direkt deine Binaries ausprobiert. Ich bin mit Maple_cul_LAN_O1_412dev210522.bin angefangen.
Einfach mit dfu-util drübergeflasht und in FHEM eingebunden. Und es läuft. Und eigentlich wollte ich auch immer ein MapleCUN mit SignalDuino-Firmware haben. Also hast du es besser gemacht, als ich vor Tagen noch gehofft hatte.

Jetzt muss ich mich mit der Konfiguration beschäftigen und Erfahrungen mit der Stabilität sammeln. Aktuell bin ich erst einmal froh über ein opened anstatt eines disconnected.

Vielen Dank, Ralf. Und auch Danke an Jürgen.





Nachtrag: Du musst in deinem Module das hardware-Attribut dann noch erweitern auf Maple_cul_LAN.  :D

Ralf9

so wie's aussieht ist im core 2.0.0  noch ein Bug.
Aufgefallen ist es mir als ich diesen raw Befehl senden wollte:
CW0001,012E,0246,0306,042D,05D4,06FF,07C0,0802,0D21,0E65,0FE8,1088,114C,1202,1322,14F8,1551,1700,1818,1916,1B43,1C68,1D91,2211,23E9,242A,2500,2611,3D07,3E04,4042,4172,4265,4373,4473,4535,4631,4700
da gabs dann immer ein reset vom maple.
Wenn ich am Ende die letzten 5 Zeichen ",4700" entferne, dann ist es ok.

Habe mir einen Testsketch geschrieben

String cmdstring = "";
bool command_available=false;

void setup() {
  cmdstring.reserve(600);
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }
}

void loop() {
   if (command_available == true) {
      command_available=false;
      Serial.println(cmdstring.length());
      Serial.println(cmdstring);
      if (!command_available) {cmdstring = "";}
   }
}

void serialEvent()
{
   while (Serial.available())
   {
      char inChar = (char)Serial.read();
      switch(inChar)
      {
      case '\n':
      case '\r':
      case '\0':
         command_available=true;
         break;
      default:
         cmdstring += inChar;
      }
   }
}


Mit 191 Zeichen funktioniert es noch:
191
123456789z123456789z223456789z323456789z423456789z523456789z623456789z723456789z823456789z923456789z023456789z123456789z223456789z323456789z423456789z523456789z623456789z723456789z823456789z9

Mit 192 Zeichen macht der Maple einen reset
123456789z123456789z223456789z323456789z423456789z523456789z623456789z723456789z823456789z923456789z023456789z123456789z223456789z323456789z423456789z523456789z623456789z723456789z823456789z92


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

FunkOdyssey

Zwischenstand von mir:
Stabile Uptime von 6 Tagen.

Keine Abbrüche beim MapleCUN mit Signalduino.

juergs

Hallo Ralf,

in meinem STM32-Core
Zitat%LOCALAPPDATA%\Arduino15\packages\STM32\hardware\stm32\1.9.0\cores\arduino\HardwareSerial.h
ist in HardwareSerial.h folgendes definiert:


#ifndef HardwareSerial_h
#define HardwareSerial_h

#include <inttypes.h>

#include "Stream.h"
#include "uart.h"

// Define constants and variables for buffering incoming serial data.  We're
// using a ring buffer (I think), in which head is the index of the location
// to which to write the next incoming character and tail is the index of the
// location from which to read.
// NOTE: a "power of 2" buffer size is reccomended to dramatically
//       optimize all the modulo operations for ring buffers.
// WARNING: When buffer sizes are increased to > 256, the buffer index
// variables are automatically increased in size, but the extra
// atomicity guards needed for that are not implemented. This will
// often work, but occasionally a race condition can occur that makes
// Serial behave erratically. See https://github.com/arduino/Arduino/issues/2405
#if !defined(SERIAL_TX_BUFFER_SIZE)
  #define SERIAL_TX_BUFFER_SIZE 64
#endif
#if !defined(SERIAL_RX_BUFFER_SIZE)
  #define SERIAL_RX_BUFFER_SIZE 64
#endif
#if (SERIAL_TX_BUFFER_SIZE>256)
  typedef uint16_t tx_buffer_index_t;
#else
  typedef uint8_t tx_buffer_index_t;
#endif
#if  (SERIAL_RX_BUFFER_SIZE>256)
  typedef uint16_t rx_buffer_index_t;
#else
  typedef uint8_t rx_buffer_index_t;
#endif


Hier ist der Puffer noch kleiner... und die Bitrate von 115200 "überrennt" möglicherweise den Puffer. (= race condition).
https://github.com/arduino/ArduinoCore-avr/issues/177

Dann müsste man SERIAL_RX_BUFFER_SIZE + SERIAL_TX_BUFFER_SIZE (im eigenen Code) größer definieren.

Ralf9

dies ist erst seit dem core 2.0.0, im core 1.9.0 oder mit dem Arduino nano kann ich problemlos deutlich mehr als 200 Zeichen senden
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

Evtl. eine Issue  dafür aufmachen?

Ralf9

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