Ankündigung

Einklappen
Keine Ankündigung bisher.

Arduino Zero bootloader Crystalless

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Arduino Zero bootloader Crystalless

    Hallo Zusammen,

    ich mache gerade schon etwas länger rum wie man sich einen Arduino Zero Bootloader bauen kann, der keinen externen 32kHz Quarz mehr benötigt.

    im Ordner:
    C:\Users\mat\AppData\Local\Arduino15\packages\ardu ino\hardware\samd\1.8.3\bootloaders\zero

    gibt es die Datei Board_init.c und hier ist dafür schon ein:
    Code:
    #if defined(CRYSTALLESS)
    extra dafür vorgesehen.

    Jetzt zu meinen Fragen:

    a) wo muss ich dieses #define CRYSTALLESS hinzufügen?

    b) wie baue ich mir den neuen bootloader mit diesem define?

    Über Antworten würde ich mich freuen :-)

    PS: hier war ich schon:
    https://github.com/arduino/ArduinoCo...zero/README.md
    Zuletzt geändert von Masifi; 07.11.2019, 17:05.

    #2
    Ich würde behaupten, dass du das in einer eigenen board_definitions_foobar.h hinzufügen musst. Die kannst du dann in board_definitions.h hinzufügen.
    Mit "
    BOARD_ID=foobar make sollte sich das ganze dann bauen lassen. Oder du fügst einfach -DCRYSTALLESS zu den CFLAGS in https://github.com/arduino/ArduinoCo...o/Makefile#L66 hinzu.

    Kommentar


      #3
      Zitat von thesing Beitrag anzeigen
      Ich würde behaupten, dass du das in einer eigenen board_definitions_foobar.h hinzufügen musst. Die kannst du dann in board_definitions.h hinzufügen.
      Mit BOARD_ID=foobar make sollte sich das ganze dann bauen lassen.
      Danke für deine Antwort. Ich habe ein neues Board angelegt in board_definitions_xxx.h und auch in board_definitions.h

      ich bin leider HWler :-) und mit "make" kann ich noch nichts anfangen :-(

      a) kennt jemand eine gute Beschreibung / Anleitung dafür?
      b) was meinst du mit:
      Zitat von thesing Beitrag anzeigen
      Oder du fügst einfach -DCRYSTALLESS zu den CFLAGS in https://github.com/arduino/ArduinoCo...o/Makefile#L66 hinzu.
      Was heißt hier "einfach" ? :-)

      Kommentar


        #4
        Zitat von Masifi Beitrag anzeigen
        b) was meinst du mit:

        Was heißt hier "einfach" ? :-)
        Code:
        CFLAGS_EXTRA=-D__SAMD21G18A__ -DBOARD_ID_$(BOARD_ID) -D$(SAM_BA_INTERFACES) -DCRYSTALLESS
        make ist ein Programm unter Linux. Bootloader kannst nur unter Linux kompilieren (unter Windows könnte man auch, aber Aufwand ist so groß, dass man gleich eine Linux Maschine installieren kann)

        Kommentar


          #5
          Hat zufällig jemand so ein Linux am Laufen und kann mir diesen Bootloader bauen !?

          Kommentar


            #6
            Warum willst du ein Board ohne Kristall machen?

            Bootloader ist nur halbe Wahrheit. Man muss noch Arduino-Core auf "CRYSTALLESS"... Sonst hast du zwar dein Bootloader zum laufen bekommen, aber nicht den Sketch... und diese Änderung wird bei jedem Core-Update überschrieben...
            https://github.com/arduino/ArduinoCo.../startup.c#L47
            Zuletzt geändert von Eugenius; 08.11.2019, 14:12.

            Kommentar


              #7
              Zitat von Eugenius Beitrag anzeigen
              Warum willst du ein Board ohne Kristall machen?
              Ich bastel an einem kleinen Bewegungsmelder der in eine 35mm UP Dose passen soll. Das klappt schon, nur es fehlt noch etwas an Platz für die Kabel.
              Außerdem warum soll ich den Bestücken, wenn man ihn doch gar nicht braucht. Ohne Crystal kann man SAMD etwas einfacher platzieren und routen.

              Zitat von Eugenius Beitrag anzeigen
              Bootloader ist nur halbe Wahrheit. Man muss noch Arduino-Core auf "CRYSTALLESS"... Sonst hast du zwar dein Bootloader zum laufen bekommen, aber nicht den Sketch... und diese Änderung wird bei jedem Core-Update überschrieben...
              Alles mit seiner Zeit, auch dafür wird es eine Lösung geben. Möchte ein komplett neues eigenes Board anlegen. Soweit bin ich noch nicht, falls jemand sowas schon gemacht hat und ein paar Infos dazu hat, der darf sich gerne melden.

              Kommentar


                #8
                Zitat von Masifi Beitrag anzeigen
                Hat zufällig jemand so ein Linux am Laufen und kann mir diesen Bootloader bauen !?
                Hi Mat,

                ich hab da so ein Linux am laufen , habe aber noch nie einen Bootloader gebaut. Ich versuch das mal am WE.

                Zitat von Masifi Beitrag anzeigen
                Möchte ein komplett neues eigenes Board anlegen.
                Warum das? So wie ich das verstehe, geht es nur um -DCRYSTALLESS, das kannst Du in die platformio.ini machen, beim bauen vom Sketch wird ja auch die Arduino-Plattform mit compiliert. Sollte kein Problem sein.

                Mal für einen Softwaremenschen, der aber an Hardware zumindest technisch interessiert ist: Warum baut man denn die SAMD-Boards mit einem externen Quarz, wenn der einen internen eingebaut hat? Der Grund kann ja nicht sein, dass die Arduino-IDE einen anderen Default eingebaut hat?

                Gruß, Waldemar

                Kommentar


                  #9
                  Zitat von mumpf Beitrag anzeigen
                  ich hab da so ein Linux am laufen , habe aber noch nie einen Bootloader gebaut. Ich versuch das mal am WE.
                  dafür wäre ich dir sehr dankbar !!!


                  Zitat von mumpf Beitrag anzeigen
                  Warum das? So wie ich das verstehe, geht es nur um -DCRYSTALLESS, das kannst Du in die platformio.ini machen, beim bauen vom Sketch wird ja auch die Arduino-Plattform mit compiliert. Sollte kein Problem sein.
                  Ich glaube wir müssen uns mal unterhalten

                  Zitat von mumpf Beitrag anzeigen
                  Mal für einen Softwaremenschen, der aber an Hardware zumindest technisch interessiert ist: Warum baut man denn die SAMD-Boards mit einem externen Quarz, wenn der einen internen eingebaut hat? Der Grund kann ja nicht sein, dass die Arduino-IDE einen anderen Default eingebaut hat?
                  Tja das musst du die Arduino Entwickler fragen. Aber ich glaube der Grund liegt darin, dass der externe Crystal im Batterie Betrieb besser ist, da die Ruhestromaufnahme damit geringer gehalten werden kann.

                  Kommentar


                    #10
                    Zitat von Masifi Beitrag anzeigen
                    Ich glaube wir müssen uns mal unterhalten
                    Gerne - aber bevor ich zu viel verspreche (ich hab ja nicht wirklich Ahnung von der Materie): Wenn ich einen Sketch mit -DCRYSTALLESS compiliere und der Bootloader noch der alte ist und das Board einen externen Quarz hat (sprich, ich nutze mein normales Board), läuft der Sketch dann nicht? So könnte man sehr schnell testen, ob die Compileroption wirklich zieht und ob der Arduino-core wirklich neu compiliert wird.

                    Gruß, Waldemar

                    Kommentar


                      #11
                      Zitat von mumpf Beitrag anzeigen
                      Gerne - aber bevor ich zu viel verspreche (ich hab ja nicht wirklich Ahnung von der Materie): Wenn ich einen Sketch mit -DCRYSTALLESS compiliere und der Bootloader noch der alte ist und das Board einen externen Quarz hat (sprich, ich nutze mein normales Board), läuft der Sketch dann nicht? So könnte man sehr schnell testen, ob die Compileroption wirklich zieht und ob der Arduino-core wirklich neu compiliert wird.
                      Das geht leider nicht, dann sollte der Code trotzdem laufen.

                      Wenn das mit dem Bootloader klappen würde (aber keinen Zeitstress, ich brauche das nicht gleich morgen) dann wäre das schon ein Anfang. Ich nutze seit geraumer Zeit auch PlatformIO und bin echt angetan davon. Wenn es wirklich nur ein setting in der platformio.ini ist, dann bekomme ich das auch sicher selber hin. Eine HW ohne Crystal ist zumindest dann nicht das Problem.

                      Kommentar


                        #12
                        Hi Mat,

                        nur um Missverständnisse zu vermeiden: Das mit platformio.ini wäre für Sketches, nicht für den Bootloader - der ist make-basiert, das ist eine andere Geschichte. Schreibe ich gerne hier rein, sobald ich es ausprobiert habe.

                        Für einen Sketch müsstest Du in der platformio.ini
                        Code:
                        build_flags = 
                          -Wno-unknown-pragmas 
                          -Wno-switch
                          -DCRYSTALLESS
                        machen (die ersten beiden unterdrücken Warnings, hab ich immer drin, sind nicht nötig, soll nur demonstrieren, wie man mehrere Compileroptionen rein macht).
                        Diese "build_flags" werden dann an jeden einzelnen compile-Befehl, den platfomio erzeugt, drangehängt. Und die -Dxxx erzeugen für das zu compilierende File implizit ein   #define xxx .

                        Sollte also arduino-core nicht jedesmal mitcompiliert werden (das hab ich noch nicht überprüfen können), dann hab ich hier was falsches behauptet...

                        Gruß, Waldemar

                        Kommentar


                          #13
                          Ok falls du den Bootloader bauen kannst, kann ich dann testen, ob der arduino-core jedesmal mitcompiliert wird.

                          Kommentar


                            #14
                            Zitat von Masifi Beitrag anzeigen
                            ob der arduino-core jedesmal mitcompiliert wird
                            Hab schon geschaut... wird er nicht. Hab somit Unsinn erzählt. Ich forsche aber mal, ist spannend. Wird aber erst morgen was, heute ich Familienabend.

                            Gruß Waldemar

                            Kommentar


                              #15
                              Hi Mat,

                              ich hab jetzt mal ein clean vor dem build gemacht und dann mit -DCRYSTALLESS gebaut, im Debugger hat er dann an der richtigen Stelle gehalten (also bei startup.c in CRYSTALLESS-Teil), wenn ich den Gegenbeweis mache und ohne compiliere, dann hält er da nicht an. Scheint also doch so einfach zu sein, wie ich sagte, ich weiß nicht, warum es beim ersten mal nicht geklappt hat.

                              Edit: Ich habe es gefunden - bei einem clean build vom Sketch wird auch das Framework gebaut:
                              Code:
                              arm-none-eabi-gcc -o .pio\build\zeroUSB\FrameworkArduino\startup.c.o -c -std=gnu11 -Wno-unknown-pragmas -Wno-switch -Og -g3 -ggdb3 -ffunction-sections -fdata-sections -Wall -mthumb -nostdlib --param max-inline-insns-single=500 -mcpu=cortex-m0plus -DPLATFORMIO=40003 -DARDUINO_SAMD_ZERO -DARDUINO_ARCH_SAMD -D__SAMD21G18A__ -DCRYSTALLESS -D__PLATFORMIO_BUILD_DEBUG__ -DF_CPU=48000000L -DUSBCON -DARDUINO=10805    <... viele Includes augelassen ...>   .platformio\packages\framework-arduinosam\cores\samd\startup.c
                              Klappt also. Jetzt nur noch der Bootloader... aber der kommt wirklich morgen.

                              Gruß, Waldemar

                              Kommentar

                              Lädt...
                              X