Ich habe schon in einem anderen Thema zur Takterzeugung Fragen gehabt, die haben sich erledigt. Nun habe ich aber ein Problem mit der Kommunikation Arduino <-> PC per USB-COM-Port. Eines vorweg, ich programmiere nicht mit der Arduino IDE, sondern mit Atmel Studio 7 und ASF. Da sich Arduino Zero Pro und Atmel Explained D21 sehr ähneln, habe ich mit den ASF-Beispielen versucht Daten per USART an das Programming Port auszugeben. Das funktioniert aber nur bis zum TX-Ausgang des D21, wo ich per Oszi die Datenimpulse sehen kann, welche zum EDBG-Chip gehen. Dieser leitet sie aber leider nicht weiter, woran liegt das?
Dann werde ich mal meine config und die Initialisierung posten, vielleicht ist ja dort ein Fehler: Eintrag in user_board.h:
1 | #define EDBG_CDC_MODULE SERCOM5
|
2 | #define EDBG_CDC_SERCOM_MUX_SETTING USART_RX_2_TX_2_XCK_3
|
3 | #define EDBG_CDC_SERCOM_PINMUX_PAD0 PINMUX_UNUSED
|
4 | #define EDBG_CDC_SERCOM_PINMUX_PAD1 PINMUX_UNUSED
|
5 | #define EDBG_CDC_SERCOM_PINMUX_PAD2 PINMUX_PB22D_SERCOM5_PAD2
|
6 | #define EDBG_CDC_SERCOM_PINMUX_PAD3 PINMUX_PB23D_SERCOM5_PAD3
|
7 | #define EDBG_CDC_SERCOM_DMAC_ID_TX SERCOM5_DMAC_ID_TX
|
8 | #define EDBG_CDC_SERCOM_DMAC_ID_RX SERCOM5_DMAC_ID_RX
|
Die Initialisierungsfunktion:
1 | static void configure_usart(void) |
2 | {
|
3 | struct usart_config config_usart; |
4 | usart_get_config_defaults(&config_usart); |
5 | config_usart.baudrate = 115200; |
6 | config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING; |
7 | config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0; |
8 | config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1; |
9 | config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2; |
10 | config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3; |
11 | stdio_serial_init(&usart_instance, EDBG_CDC_MODULE, &config_usart); |
12 | |
13 | usart_enable(&usart_instance); |
14 | }
|
Wie gesagt, mit diesen Zeilen sehe ich am TX-Pin die Zeichen, welche zum EDBG-Chip gehen, an dessen USB-Ausgang kommt aber Nichts raus.
>Da sich Arduino Zero Pro und Atmel Explained D21 sehr ähneln, habe ich >mit den ASF-Beispielen versucht Daten per USART an das Programming Port >auszugeben. Diese Idee ist mir auch schon gekommen. Wenn ich es im Schaltplan des XPlained richtig sehe, ist der EDBG-Chip ein programmierter AT32UC3A4256J-C1UR. Im Schaltplan des Arduino Zero steht leider nur EDBG, aber ich vermute mal, dass sie den gleichen Controller genommen haben. Es könnte sein, dass sie beim XPlained eine andere Software als auf dem Arduino-Zero EDBG haben.
Hier stehts im EDBG Userguide: "The Atmel EDBG is embedded on all Xplained Pro evaluation kits. All functionality of the Atmel EDBG is not necessarily available on all kits - the EDBG is factory configured depending on the specific kit capabilities" Seite 3: http://www.atmel.com/Images/Atmel-42096-Microcontrollers-Embedded-Debugger_User-Guide.pdf
Auf Seite 5 steht auch im Bezug auf ein virtuelles COM-Port:
1 | Note that the UART pins of the EDBG are tri-stated when no terminal program is connected to the Virtual COM |
2 | Port on the computer. This mechanism relies on the terminal program sending a DTR signal. |
3 | The Virtual COM Port is supported by the terminal extension in Atmel Studio. Most other terminal applications |
4 | will work as well. |
Wie erzeuge ich ein DTR-Signal von PC-Seite aus? Die Terminal-Extension von AvR-Studio, werde ich mal probieren.
Durch den EDBG UserGuide bin ich auch auf den Begriff der "AtmelStudio Extensions" gestoßen. Ich möchte mich aber nicht schon wieder irgendwo anmelden umd das herunter zu laden. Als erstes habe ich gerade mal die Arduino-IDE als Terminal verwendet und das USART-QuickStart Example ausprobiert.
>Als erstes habe ich gerade mal die Arduino-IDE als Terminal verwendet >und das USART-QuickStart Example ausprobiert. Es läuft auf einem SAMD20 XPLained. Einen Arduino Zero habe ich leider nocht nicht, aber hoffentlich demnächst.
Hallo Jürgen, mittlerweile habe ich einen Arduino Zero. Leider funktioniert das Ganze noch nicht so wie erwartet. Zuerst wollte ich das Blink-Example auf den Zero herunterladen. Das ging erst einmal nicht, weil der Programming-Port nicht ansprechbar war. Nach einiger Internetrecherche kam dabei folgende Lösung heraus. Mein Arduino-Zero hat graue Steckleisten. Das bedeutet er ist nicht von Arduino.cc sondern von Arduino.org Da die beiden Firmen einen Rechtsstreit um den Namen Arduino ausfechten, blockieren sie sich gegenseitig ihre Boards. Für den Arduino Zero mit den grauen Buchsen muss man also die IDE von Arduino.org installieren, dann lässt sich das Blink-Programm downloaden. Als nächstes wollte ich natürlich den EDBG-Debugger in Atmel-Studio probieren. Hier gibt es ein Youtube Video https://www.youtube.com/watch?v=Bjr6BBHXuDw Zum Zeitpunkt 7:18 taucht das Atmel-Studio Menue für die Boardauswahl auf. Scheinbar ist das Video aber für AtemlStudio 6.2. Ich finde leider nirgends die Auswahl für den Arduino-Zero.
Also versuche ich, statt ein Projekt für einen Arduino-Zero ein ASF-Projekt mit einem ATSAMD21G18 anzulegen. Das Projekt kompiliert, aber wenn es an das Debuggen geht, will AtmelStudio den EDBG-Debugger auf dem Arduino-Zero von 1.1f auf 2.10 updaten. Das ging nach einigen versuchen nicht, bis ich einfach mal kurz vor dem Update-Start den Reset Knopf auf dem Arduino Zero gedrückt habe. Jetzt ist die neue Version auf dem EDBG des Arduino. Allerdings klappt das Debuggen des Arduino immer noch nicht. Jetzt kommt folgender Fehler: Unexpected Chip Idendifier 0x10010205 ( expected 0x1001000a ) Ich vermute, dass das der Identifier der MCU sein soll.
Ich musste bei den Fuses im Programmdialog NVMCTRL_BOOTPROT auf 0x07 stellen, um programmieren zu können. Danach kann man aber nicht mehr über die Arduino-IDE flashen, wobei ich von Arduino-Code eh nichts halte.
>Unexpected Chip Idendifier 0x10010205 ( expected 0x1001000a ) Dieser Fehler hat sich erledigt, weil ich aus versehen den SAMD21E18 statt SAMD21G18 wie er im Arduino Zero verbaut ist, eingestellt hatte. >Ich musste bei den Fuses im Programmdialog NVMCTRL_BOOTPROT auf 0x07 >stellen, um programmieren zu können. Bei mir funktioniert es leider immer noch nicht. Wenn ich den Debugger starte, sind alle Speicherzellen auf 0xff. Es hat eine Weile gedauert bis ich den Programmierdialog gefunden hatte: Tools==>DeviceProgramming ==> apply Dort ist bei mir NVMCTRL_BOOTPROT auf 0x00 Der Wert lässt sich aber nur lesen und ich kann ihn nicht verändern.
Hallo Jürgen, hast Du die Konfiguration auch mit AtmelSTART gemacht: Beitrag "Arduino Zero mit ArduinoStart Konfigurieren" Vielleicht kannst Du mir noch sagen, wie Du es geschafft hast, die Fuses zu verändern.
>Vielleicht kannst Du mir noch sagen, wie Du es geschafft hast, die Fuses >zu verändern. Hat sich schon erledigt. Es gibt Fuses, die nur lesbar sind und andere die auch zu beschreiben sind. NVMCTRL_BOOTPROT steht ziemlich weit unten bei den beschreibbaren Fuses.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.