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

juergs

Zitat von: Ralf9 am 19 April 2020, 09:14:24
Ohne die Hilfe von Telekatz wäre ich da aber wahrscheinlich nicht weitergekommen.

Anscheinend hält sich der Maple Mini nicht ganz an die USB Spec

Mir ist noch nicht klar was ich an der 
https://github.com/stm32duino/Arduino_Core_STM32/blob/16f3644e7b9f8225dcb01f48bd857bdc3a978580/cores/arduino/stm32/usb/usbd_if.c#L19
ändern muss

Gruß Ralf

Ich glaube, den DISC_PIN mit etwas Delay togglen:

   pinMode(USB_DISC_PIN, OUTPUT);
   digitalWrite(USB_DISC_PIN,High);   //1
   delay(100);
   digitalWrite(USB_DISC_PIN, Low);  //0


Statts:
  pinMode(USB_DISC_PIN, OUTPUT);
  digitalWrite(USB_DISC_PIN, LOW);

Telekatz

Richtig, der USB_DISC_PIN muss einmal auf High und dann wieder auf Low gesetzt werden. Denn auf Low ist er ja schon nach dem verlassen des Bootloaders.

Füge die angehängte Datei mal in dein Sketch Verzeichnis hinzu. Die sollte das korrigieren.

Ralf9

Am saubersten wäre es wahrscheinlich, wenn wir es ohne einen Patch im core 1.8.0 hinbekommen können.
Im core 1.9.0 ist der Bug anscheinend behoben.

evtl so?

#ifdef core gleich 1.8.0    // ist dies möglich den core abzufragen?
#define USBD_REENUM_DISABLED  // kann ich damit das USBD_REENUM disablen?
#endif

void setup() {
#ifdef core gleich 1.8.0    // ist dies möglich den core abzufragen?
   hier dann die neue  USBD_REENUM

  pinMode(USB_DISC_PIN, OUTPUT);
  digitalWrite(USB_DISC_PIN, HIGH);
  delay(10);
  digitalWrite(USB_DISC_PIN, LOW);

  pin_function(pinDP, STM_PIN_DATA(STM_MODE_OUTPUT_PP, GPIO_NOPULL, 0));
  digitalWriteFast(pinDP, LOW);
  delay(USBD_ENUM_DELAY);
  pin_function(pinDP, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0));
#endif



Nachtrag:
Heißt das, wenn ich die USBD_reenumerate.c in das sketch Verzeichniss lege, dann wird diese anstatt der im core verwendet?
Dies wäre auch eine Möglichkeit.
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

Zitat von: Telekatz am 19 April 2020, 11:28:58
Füge die angehängte Datei mal in dein Sketch Verzeichnis hinzu. Die sollte das korrigieren.

Ja, damit funktionierts.

Bedeuted dies kleiner core 1.9.0?
#if ARDUINO < 10900

Nachtrag:
Ja ist anscheinend so.
Mit #if ARDUINO < 10800 funktioniert es nicht mehr
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

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,

im ihrem Forum-Wiki ist das PDF kaputt...
Aber hier ist es noch vorhanden: https://github.com/leaflabs/maplemini/blob/master/maplemini.pdf
Links unten mit PB9 als "DISC" schaltet USB.

Ralf9

Verstehe ich das richtig, daß wenn DISC high ist, dann liegt der Pullup R10 nicht mehr an VCC, und das 23_USBDP kann nicht mehr high werden
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

Zitatthe pull-up actually perform two tasks, connection and speed sensing.

Detecting a pull-up lets the host controller know a device is connected. USB is a master/slave protocol with most of heavy lifting being performed by the host controller.

Low speed devices use unshielded cable and cannot operate at higher speed so it is important signalling occur at low speed.

Zitatwenn DISC high ist, dann liegt der Pullup R10 nicht mehr an VCC, und das 23_USBDP kann nicht mehr high werden

Ja, der 2 Transistor leitet dann nicht mehr , weil seine Basis auf Low gezogen wird und < 0.7V sperrt dieser.

Siehe auch hier: https://www.dslreports.com/forum/r27625645-why-a-pullup-on-USB-D

Ralf9

Danke, damit ist es für den Bootloader2.0 klar,
mir ist aber nicht klar, warum das USBD_reenumeratees beim Orginalbootloader funktioniert, obwohl im core das USB_DISC_PIN nicht kurz auf high wechselt.
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

Vielleicht liegt es nur am Delay, also wie lange der Pulldown anliegt ?

Telekatz

Der Originalbootloader ruft beim Verlassen des Bootloaders in jumpToUser die Funktion usbDsbBus auf, die den USB_DISC Pin wieder auf High setzt und damit die USB Verbindung trennt. Der 1.8 Arduino Core setzt dann nach dem Start in USBD_reenumerate den USB_DISC Pin wieder auf low, wodurch der USB Host erneut eine Enumeration macht.

Der Bootloader2.0 setzt den Pin beim verlassen nicht wieder auf High und die USB Verbindung bleibt als DFU Gerät bestehen. Das setzen des Pins auf Low hat dann im 1.8 Arduino Core keine Auswirkungen mehr, da der Pin ja schon auf Low ist.

Ralf9

ZitatDer Originalbootloader ruft beim Verlassen des Bootloaders in jumpToUser die Funktion usbDsbBus auf, die den USB_DISC Pin wieder auf High
Danke, damit ist mir einiges klarer geworden.

Und hier bin ich damit einen großen Schritt weitergekommen,
https://www.stm32duino.com/viewtopic.php?p=2200#p2200

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

ZitatNun wird als Beispiel das Modul A der EEPROM Speicherbank 1 zugeordnet.
bA1
Error! Bank 1 is not initialized

Ich möchte die Fehlermeldung die kommt, wenn versucht wird ein cc1101 Modul einer nicht initialisierten EEPROM Speicherbank zuzuordnen, erweitern.
Error! Bank 1 is not initialized, you can with the command e the bank initialize with the sduino defaults
Dies gefällt mir so noch nicht so richtig, Verbesserungsvorschläge sind willkommen

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

RaspiLED

Hi, wenn klar ist, dass man eh raw e machen muss, warum dann als Fehler ausgeben?

Wie wäre es statt dessen einen Werksreset zu machen und als Fehlercode vorher ein:

The bank was not complete initialized, therefore the modul was reseted (raw e). Please update your settings accordingly.


Gruß Arnd


Signalduino (Nano, ESP, ...), CUL (Busware, Nano, Maple, ...), Homematic (HM-MOD-UART-RPI, ESP, Maple, ...), LaCrosseGateway (LGW, ESP, ...), 1-wire, ESPEasy, Bravia, Yamaha, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Ralf9

Ich verwende diese Meldung um zu testen ob eine Bank noch frei (nicht initialisiert) ist.

Ich könnte diesen automatischen Werksreset e machen, dann bräuchte ich einen neuen Befehl mit dem eine Übersicht über die Bankbelegung ausgegeben wird.

Ich weiss noch nicht wie ich den Befehl benennen soll
bi
bs - Bank summary
bo - Bank overview
oder?

Die Ausgabe könnte dann z.B. so aussehen (N = - bedeuted Bank nicht initialisiert):
Bank(Radio N/ccmode): 0(B 0/0) 1(A 0/3) 2(2/3) 3(C 3/3) 4(4/2) 5(0/0) 6(-) 7(-) 8(-) 9(-)
oder
Bank(N/ccmode Radio): 0(0/0 B) 1(0/3 A) 2(2/3) 3(3/3 C) 4(4/2) 5(0/0) 6(-) 7(-) 8(-) 9(-)
oder

Bank__ 0 1 2 3 4 5 6 7 8 9  Radio_ B A - C - - - - - -  N_____ 0 0 2 3 4 - - - - -  ccmode 0 3 3 3 2 - - - - -

wenn im signalduino fhem Modul dann alle doppelten Leerzeichen durch einen Zeilenumbruch ersetzt werden, sieht es im Ausgabefenster so aus:
Bank__ 0 1 2 3 4 5 6 7 8 9
Radio_ B A - C - - - - - -
N_____ 0 0 2 3 4 - - - - -
ccmode 0 3 3 3 2 - - - - -

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