www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HOWTO: DX-ISP Programmieradapter unter Linux


Autor: Tobias W. (hacker-tobi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

nachdem ich selbst nichts im Netz dazu gefunden habe, veröffentliche ich 
mal ein kleines howto, wie man den beliebten DX-ISP Programmieradapter 
(USB) unter Linux ans Laufen bringt.

Was man benötigt:

-Den DX-ISP - Adapter selbst:

http://www.wiesolator.de/index.php?area=AVR&topic=...

-Linux Kernel ab 2.6.24, abzufragen mit uname -a

Linux Arbeitsrechner 2.6.34.7-0.3-desktop #7 SMP PREEMPT Sat Oct 23 
00:23:14 CEST 2010 x86_64 x86_64 x86_64 GNU/Linux

2.6.24 deswegen, weil ab  diesem imHo der ttyACM-Treiber enthalten ist.

-Den ttyACM-Treiber

Dieser ist bei Distributionskerneln in der Regel schon enthalten.
Bei selbstkompilierten Kernel muss man ihn ggf. hinzufügen.

Ob der ttyACM-Treiber installiert ist, sagt einem ein

tail -f /var/log/messages

wenn man den Adapter ansteckt:

Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.803403] usb 7-1: new full 
speed USB device using uhci_hcd and address 3
Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.981131] usb 7-1: New USB 
device found, idVendor=16c0, idProduct=2a9b
Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.981134] usb 7-1: New USB 
device strings: Mfr=1, Product=2, SerialNumber=0
Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.981137] usb 7-1: Product: 
DX-ISP
Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.981138] usb 7-1: 
Manufacturer: Stange Distribution
Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.984174] cdc_acm 7-1:1.0: 
ttyACM0: USB ACM device

Wichtig ist die letzte Zeile; erscheint sie, kann man den folgenden 
Abschnitt überspringen:

-Installation des ttyACM - Treibers-

tobias@Arbeitsrechner: su
tobias@Arbeitsrechner:~> cd /usr/src/linux
tobias@Arbeitsrechner:/usr/src/linux> make menuconfig

In dem Menu navigiert man zu /drivers/usb/ und wählt dann "usb modem 
(cdc acm) support aus, und zwar als Modul ("M").

dann die module mit

make modules
make modules_install

übersetzen und installieren.

Nun sollte sich der ttyACM-Treiber melden, sobald der Adapter erneut 
angesteckt wird:

Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.984174] cdc_acm 7-1:1.0: 
ttyACM0: USB ACM device

-Nutzung des Adapters-

Betrachten wir noch einmal die Zeile

Feb 26 12:44:50 Arbeitsrechner kernel: [ 1501.984174] cdc_acm 7-1:1.0: 
ttyACM0: USB ACM device

aus /var/log/messages.

Netterweise teilt einem der Treiber gleich mit, welchem virtuellen 
Com-Port er nutzt (hier ttyACM0). Über diesen Com-Port lässt sich der 
Adapter jetzt als Stk500v2 ansprechen.
Dazu muss avrdude so konfiguriert werden, dass es als seriellen Port den 
virtuellen com-Port /dev/ttyACMx nutzt.
Die Parameter hierfür sind:

-P <com-Port> also z.B. -P /dev/ttyACM0
-c <Programmer> also -c stk500v2

avrdude -p atmega168 -P /dev/ttyACM0 -c stk500v2 -B 1 -U 
flash:w:nano_os.hex

Damit ist der Adapter unter Linux einsatzbereit!

gruß

tobi

Autor: Tom L. (tlin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin mir nicht sicher, wohin damit. Daher hänge ich das mal hier 
dran. Vielleicht hilft das ja mal jemandem.

Ich verwende den gleichen Programmer unter FreeBSD, dort ist das alles 
allerdings ein bischen anders. Irgendwelche Kernelmodule muss man unter 
FreeBSD nicht installieren, das geht alles out-of-the-box. Ich hab mir 
dieses kleine Script erstellt, das mir via sysctl den entsprechenden 
Port raussucht:
#!/bin/sh

modem=`sysctl -a | grep umodem | grep DX-ISP | sed 's/.%desc.*//'`

if test -n "$modem"; then
    U=`sysctl -a | grep $modem | grep pnpinfo | awk '{print $12}' | awk -F= '{print $2}'`
    if test -n "$U"; then
  echo "/dev/cua$U"
    else
  echo "MODEM-$modem-HAS-NO-CUA"
    fi
else
    echo "NO-MODEM-FOUND"
fi

Der Vollständigkeit halber, so sieht die Ausgabe des Kernels aus, wenn 
man das Teil anschliesst:
ugen4.3: <Stange Distribution> at usbus4
umodem2: <Stange Distribution DX-ISP, class 2/0, rev 2.00/1.01, addr 3> on usbus4
umodem2: data interface 1, has CM over data, has break

Mit sysctl kann man sich dann raussuchen, welcher Port der virtuelle 
Serial ist:
$ sysctl dev.umodem.2
dev.umodem.2.%desc: Stange Distribution DX-ISP, class 2/0, rev 2.00/1.01, addr 3
dev.umodem.2.%driver: umodem
dev.umodem.2.%location: bus=1 hubaddr=1 port=4 devaddr=3 interface=0
dev.umodem.2.%pnpinfo: vendor=0x16c0 product=0x2a9b devclass=0x02 devsubclass=0x00 sernum="" release=0x0101 mode=host intclass=0x02 intsubclass=0x02 intprotocol=0x01  ttyname=U2 ttyports=1
dev.umodem.2.%parent: uhub4

Interessant ist hier die vorletzte Zeile, der Port ist:

ttyname=U2

Das Device ist also:

/dev/cuaU2

Und das ist dann die Ausgabe des obigen Scriptes.

@Mods: falls das doch nicht richtig hier ist, bitte wenn möglich 
verschieben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.