Archiv

Archiv für den Monat Februar 2012

A little over a year ago, serious problems were reported when using Arduino Uno and other Arduino boards for serial communication on Linux systems, most reports regarding various Ubuntu variants from versions 9.10 through 10.10, including 64bit versions. Since this problem has not popped up much recently, I suspect that newer boards don’t have this problem anymore. However, I recently had to deal with Arduino Uno boards bought circa in mid-2010, so I ran straight into these troubles. Read below for a detailed description of the symptoms.

A few weeks after the problem was reported, a firmware upgrade with a fix was published. An article was posted on arduino.cc describing the problem and how to fix it. In order to understand what the problem is and how it is fixed in principle, you should first read this article at arduino.cc describing the problem and their proposed fix.

The instructions posted on arduino.cc require you to solder a resistor to the back of your Arduino in order to flash the DFU bootloader. However, there is another way, as outlined in this forum thread at arduino.cc, describing how fix the problem without having to solder on their board. I cannot say whether this way is safer or not, so (as always) read everything carefully and proceed at your own risk!

On a calming note, the author of the Uno’s USB stack says in a forum post:

“it is impossible to break your board permanently if upgrading through the DFU bootloader”

On a frightening note, the wire-touching procedure described below is commented thusly:

“Be careful with the second wire as the capacitor is quite near a 5v track. You can try using a low-value resistor instead of a wire if you are worried about blowing up your board.”

Have you made up your mind about trying this? Okay, then let’s go:

Error messages and symptoms When plugging in the Arduino, it registers normally, as reported by dmesg:

[...] cdc_acm 3-1:1.0: ttyACM0: USB ACM device

However, when the Arduino is running a skech that uses even trivial serial communication, the TX LED hangs, and the Arduino IDE reacts very slowly to menu clicks (especially when trying to open the Tools menu). When trying to start the Serial Monitor, the IDE will hang for a moment and finally report errors like this:

processing.app.SerialNotFoundException:
Serial port '/dev/ttyACM0' not found. Did you select the right one
from the Tools > Serial Port menu?

I’m not 100% sure, but I think I also saw the following error message in this context:

avrdude: stk500_recv(): programmer is not responding

When the serial interface dies, dmesg will report this:

[...] tty_port_close_start: tty->count = 1 port count = 0.

If you want to upload a ‘safe’ sketch (i.e. one without serial communication), so as to make the board temporarily usable again, you have a few chances:

  1. Use a Windows machine to upload a new sketch.
  2. Reload the cdc_acm kernel module that creates the ttyACM* device nodes (or just reboot your machine) and reconnect, then use some timing and feeling to upload the sketch with the IDE shortly after the Arduino boots.
  3. Play around with the Reset button on the Arduino board and use some timing and feeling to upload a new sketch.

Of course, that’s no real solution. So let’s get to fixing the board.

Downloading the firmware and preparing to flash You will need a tool called dfu-programmer. This is available fromthe Ubuntu repositories, but reports say you should have at least version 0.5.1. If can only get an older version from a repository, you should at least be able to compile 0.5.1 if you have the lubusb-dev package.

Get the right firmware code for your board from this page by selecting the correct board version (‘Arduino-usbserial-uno.hex’ or ‘Arduino-usbserial-mega.hex’), then save the file linked from the “Raw” button at the top right of the code display.

Putting the Arduino board in DFU mode and flashing This requires two short (about 5 centimeters or 2 inches) pieces of wire and two steady hands. First, put both wires into the GND sockets as shown in the picture. Then connect the board with a USB cable, then first hold the upper wire to the contact as shown, while touching and releasing the lower wire the the left side of the indicated capacitor:
Update: Contrary to what is pictured here, it seems that at least for some Arduino Mega 2560, the second wire is not required. Try just connecting the first wire as shown, and if the Arduino enters dfu mode immediately (see below for how to tell), you’re good without needing to connect the second wire.

The LED labelled “L” may give two short blinks, unless the board is running a sketch that uses the “L” LED. Even though it may seem like the Arduino is just normally running its sketch, if you have executed the procedure correctly, the Arduino is now in DFU mode. You can verify this by examining the output of lsusb. Instead of reporting with ID 2341:0001 as usual, the Arduino will report with ID 03eb:2ff7 Atmel Corp. if it is in DFU mode. When you have made sure the board is in DFU mode, run:

  1. sudo dfu-programmer at90usb82 erase
    1. the RX LED will come on and stay on
  2. sudo dfu-programmer at90usb82 flash –debug 1 Arduino-usbserial-uno.hex
    1. use the correct filename that corresponds to your board’s firmware!
    2. dfu-programmer should output something like:
      Validating...
      4058 bytes used (49.54%)
    3. the TX LED will come on and stay on, so now RX and TX will be glowing
  3. sudo dfu-programmer at90usb82 reset
    1. All LEDs are now off.

Now, unplug the Arduino and wait a second. After this, everything should work smoothly, even serial-heavy sketches!

Good luck, have fun and don’t hesitate to post a comment if you have new/more precise information!

Gerade läuft die Abstimmung über Thema #1263 im Bundes-Liquid. Es geht um eine Positionierung der Piratenpartei in der Außenpolitik, insbesondere im Hinblick auf Militäreinsätze. Von neun Intiativen haben drei genügend Unterstützer für die Abstimmung erlangt. Dies sind „Verantwortung zum Schutz“, „Interventionskritische Außenpolitik“ und „Pazifismus (Beendigung der Beteiligung an militärischen Einsätzen)“.

Zunächst teile ich die Einschätzung von maha[1], dass „Verantwortung zum Schutz“ Neusprech ist, das ich so nicht in einem Piratenprogramm lesen möchte. Die Initiative „Interventionskritische Außenpolitik“ verzichtet zwar auf diesen Begriff, aber beiden ist eine Formulierung gemein, der ich unter keinen Umständen zustimmen kann:

Wir sind bereit militärisch einzugreifen, falls ein Bündnispartner durch reguläre Streitkräfte angegriffen wird.

Zunächst ist, wie in einer Anmerkung erwähnt[2], die „Wir“-Formulierung völlig unangemessen. Davon abgesehen ist aber die ganze Aussage in meinen Augen gefährlicher Unsinn.

Die Einschränkung „durch reguläre Streitkräfte“ ist wohl dazu gedacht, Ereignisse wie die Anschläge vom 11. September 2001 nicht als Anlass für ein eigenes militärisches Eingreifen gelten zu lassen, wie es mit dem heute heftig umstrittenen Afghanistan-Krieg seinerzeit geschah. Die Anschläge vom 11. September wurden zweifellos nicht von „regulären Streitkräften“ ausgeführt. Im Sinne der Initiative sollen deshalb nur Angriffe von „regulären“ Armeen gegen NATO-Staaten einen Militäreinsatz im Sinne des Bündnisfalls auslösen können. Nach diesen Regeln wäre die Bundeswehr also nicht nach Afghanistan geschickt worden. Ganz so einfach ist das aber nicht: Der NATO-Bündnisfall wurde nach dem 11. September 2001 nicht etwa vom US-Präsidenten erbeten oder vorgeschlagen, sondern – erstmalig – gemäß Artikel 5 des Atlantikpaktes vom NATO-Rat ausgerufen[3]. Zwar war den Mitgliedsstaaten die Art ihrer Unterstützung freigestellt[4] – aber von allen damals 19 Mitgliedsstaaten haben sich einzig Luxemburg und Island nicht an der Operation Enduring Freedom beteiligt[5][6], mit der in Afghanistan einmarschiert wurde. Zudem stellt es die Sinnhaftigkeit eines Verteidigungsbündnisses in Frage, wenn sich Mitgliedsstaaten ihre eigenen Definitionen des Bündnisfalls zusammenschustern.

[Versteht mich nicht falsch: Die Sinnhaftigkeit der NATO in Frage zu stellen ist in meinen Augen absolut richtig. Genauer gesagt würde ich die NATO lieber heute als morgen aufgelöst, oder wenigstens Deutschland austreten sehen. Aber sich als Mitgliedsstaat bloß die Regeln zurechtzubiegen, um möglichst wenig Unannehmlichkeiten zu haben, ist ein halbherziger und unaufrichtiger Weg.]

Dann ist da noch der Begriff der „Bündnispartner“. In der naheliegenden Auslegung sind wohl andere NATO-Staaten gemeint. Ein zentrales Problem ist aber: Deutschland hat nur begrenzten Einfluss darauf, wer seine „Bündnispartner“ sind, und selbst unter denen sind Konflikte mit regulären Armeen nicht so abwegig, wie man vielleicht meint! Die Aufnahme eines Staats in die NATO kann von einem anderen Mitgliedsstaat blockiert werden, wie im Fall Mazedoniens durch Griechenland[7]. Diese Ausnahme bestätigt aber die Regel, dass über die Neuaufnahme von NATO-Staaten nicht gestritten wird, und dabei hat sich die NATO seit Ende des Kalten Kriegs massiv vergrößert: Von 1999 bis 2009 wurden 12 Staaten in die NATO aufgenommen, davon 10 ehemalige Mitgliedsstaaten des Warschauer Pakts und 2 Staaten, die aus Jugoslawien hervorgegangen sind[6]. Seit 2005 bemüht sich auch Georgien um Aufnahme in die NATO. Deutschland und andere Länder hegen zwar Zweifel, tragen aber eine Annäherung Georgiens an die NATO mit – daran änderte auch die Tatsache nichts, dass 2008 völlig reguläre russische Truppen in Georgien einmarschierten[8]. Der schwammige Begriff der „Bündnispartner“ lässt aber auch unklar, welche Bündnisse gemeint sind. Zählen EU-Mitglieder dazu, die nicht Teil der NATO sind? Dann ist Zypern ein interessanter Fall, denn Zypern erfuhr 1974 eine Invasion durch reguläre Truppen der Türkei – noch heute besteht in etwa einem Drittel der Insel die „Türkische Republik Nordzypern“, die weltweit einzig von der Türkei anerkannt wird, als handfester Zankapfel zwischen der Republik Zypern, der Türkei und Griechenland (die Türkei und Griechenland rüsten auch seit Jahrzehnten um die Wette auf, besonders gern mit Waffen aus Deutschland[9][10]). Weiterhin kann man sich vor Augen zu führen, dass Großbritannien 1982 den Einmarsch regulärer argentinischer Truppen auf den Falkland-Inseln (ein „overseas territory“ des Vereinigten Königreichs) zum Anlass nahm, einen Krieg zu führen, der viele Hundert Todesopfer forderte, und dass gerade dieser Tage wieder Säbelrasseln um die Falkland-Inseln laut wird[11].

Natürlich waren diese Ereignisse keine Bündnisfälle im Sinne der NATO, aber mindestens der Falkland-Krieg genügt ohne viel Phantasie der Definition, dass „ein Bündnispartner durch reguläre Streitkräfte angegriffen wird“. Außerdem lässt die Initiative offen, wie neue Bündnisse zu bewerten wären, etwa im Falle einer Kooperation zwischen der NATO und Russland oder in dem Fall, dass die NATO in einem neuen, möglicherweise sogar neuartigen Bündnis aufgeht. Es ist nicht einmal besonders abwegig, dass in Zukunft Staaten in konfliktträchtigen Regionen, wie das Kosovo, Südkorea oder Taiwan, in westlich dominierte Bündnisstrukturen eingebunden werden.

Deshalb kann ich den beiden Initiativen nicht zustimmen.

Die dritte Initiative, „Pazifismus (Beendigung der Beteiligung an militärischen Einsätzen)“, finde ich zwar auch an manchen Stellen unglücklich formuliert, aber sie enthält keine so groben Schnitzer und positioniert sich, was genau in meinem Sinne ist, klar gegen die Teilnahme an bewaffneten Konflikten. Deswegen werde ich ihr zustimmen und die beiden Alternativen ablehnen.

Danke an @phil_grau, der mir in der Diskussion den entscheidenden Denkanstoß für diesen Artikel gegeben hat.

Nachtrag: Man kann mir den Vorwurf machen, dass ich rein destruktiv auf Initativen rumhacke, an denen ich nicht mitgearbeitet habe. Es stimmt, dass ich bisher wenig Gelegenheit hatte, an Piraten-Debatten zur Außenpolitik teilzunehmen, und ich war nicht bei der „Potsdamer Konferenz“, aus der die beiden Initiativen hervorgegangen sind. Ich halte aber die von mir kritisierten Punkte nicht bloß für Mißverständnisse oder redaktionelle Fehler, sondern für eine Position, die dringend diskutiert werden muss. Deshalb sehe ich diese Initiativen als Anlass für einen Debattenbeitrag, zu dem ich sonst vielleicht erst wer-weiß-wann gekommen wäre: Mit Begriffen wie „Bündnis“ und „Bündnispartner“ muss kritisch umgegangen werden – allein schon weil damit seit zehn Jahren ein sinnloser Kriegseinsatz und noch viel länger fette Waffengeschäfte[12] gerechtfertigt werden.

Quellen:

  1. Tweet von @martinhaase am 30. Januar 2012
  2. LQFB: Anregung: „Piraten ziehen in den Krieg!“
  3. nato.int: Statement by the North Atlantic Council on the occasion of the 10th anniversary of the invocation of article 5 on 12 September 2001
  4. nato.int: NATO and the Scourge of Terrorism: What is Article 5?
  5. Wikipedia: Participants in Operation Enduring Freedom
  6. Wikipedia: Members of NATO
  7. Wikipedia: Accession of Macedonia to NATO
  8. Wikipedia: Georgia-NATO relations
  9. The Local: German arms exports double in five years
  10. New York Times: Turkey Faults France and Germany on Arms Sales to Greece
  11. BBC News: Falkland tensions grow ahead of invasion anniversary
  12. Konrad-Adenauer-Stiftung: Panzergeschäft mit der Türkei