Forum: Mikrocontroller und Digitale Elektronik Arduino Zero Pro - Kommunikation über EDBG-Chip


von Jürgen M. (mheimer)


Lesenswert?

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?

von Jürgen M. (mheimer)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

>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.

von chris_ (Gast)


Lesenswert?

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

von Jürgen M. (mheimer)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

>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.

von chris_ (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

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.

von Jürgen M. (mheimer)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

>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.

von chris_ (Gast)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.