連載
» 2008年08月22日 00時00分 公開

−ザ・組み込み−ソフトウェアのハードウェア化(2):えっ、シリアルポートがない!! ターゲットボードとの接続 (2/3)

[鳥海佳孝 設計アナリスト,@IT MONOist]

シリアルポートがないホストPCと組み込み開発ボードの接続

 さて、いよいよAKI−H8/3069Fにサンプルプログラムの書き込みを行うわけですが、ここにも問題(ワナ)があります。

 通常、この部分の(書き込みに関する)多くの解説ではCOMポートについて触れています。これはつまり、ホストPCのシリアルポートにシリアルケーブルが接続されていることを前提にしているということです。


 大抵の解説本では、

h8write -3069 -f20 led_test.mot /dev/ttyS0 ←COM1ポートに接続している場合 

とコマンドを実行するように! と書かれていることがほとんどです。

 ところが、今回(ホストPC:KOHJINSHA SA5SX12A)はシリアルポートがありません。では一体どのポートにアクセスすればよいのでしょうか?

 こうしたワナ(大げさにいうと)が非常に細かい点とはいえ、初めて組み込み開発ボードを手にして「さぁ、これからやってみよう!」と思う方にとっての障害となるのです。このあたりでうまくいかなくて、あきらめてしまった方も多くいるのではないでしょうか(いまさらシリアルポートの付いたノートPCを探すわけにもいかないですし……)?

 さて、話を元に戻して、先ほど用意したUSB−シリアル変換ケーブルを使用したときに、どのポートにアクセスすればよいのかを探ってみましょう(もし、この時点でUSB−シリアル変換ケーブルがホストPC側に接続されていたら、いったんケーブルを抜いてください)。

 それでは、調査開始です。これまで使用していたシェルとは別に、もう1つシェルを新たに開き、以下のコマンドを実行してログファイルを監視します。

# tail -f /var/log/messages 

 また、以下のコマンドを実行して、現在Linuxシステム(ホストPC)にロードされているドライバを確認しておきます。

# lsmod 

 この状態にしておいて、以下のコマンドを実行してください。

# ls -l /dev/ttyUSB0 

 ホストPCのUSBポートに通信関連のデバイスなどがつながっていなければ、以下のようにコマンド結果が出力されるはずです(コラム1)。

/bin/ls: /dev/ttyUSB0: そのようなファイルやディレクトリはありません 

 ここでUSB−シリアル変換ケーブルをホストPCに接続します。例えば、前述した秋月電子通商のケーブルであれば、「tail」コマンドで開いた/var/log/messagesのファイル内容が、リスト1のように出力されます。

Aug 11 13:24:16 localhost kernel: usb 1-1: USB disconnect, address 2
Aug 11 13:24:26 localhost kernel: ohci_hcd 0000:00:0f.4: wakeup
Aug 11 13:24:27 localhost kernel: usb 1-1: new full speed USB device
 using ohci_hcd and address 3
Aug 11 13:24:27 localhost kernel: usb 1-1: configuration #1 chosen from 1
 choiceAug 11 13:24:27 localhost kernel: usbcore: registered new driver usbserial
Aug 11 13:24:27 localhost kernel: drivers/usb/serial/usb-serial.c:
 USB Serial support registered for generic
Aug 11 13:24:27 localhost kernel: usbcore: registered new driver usbserial_generic
Aug 11 13:24:27 localhost kernel: drivers/usb/serial/usb-serial.c:
 USB Serial Driver core
Aug 11 13:24:27 localhost kernel: drivers/usb/serial/usb-serial.c:
 USB Serial support registered for pl2303
Aug 11 13:24:27 localhost kernel: pl2303 1-1:1.0: pl2303 converter detected
Aug 11 13:24:27 localhost kernel: usb 1-1: pl2303 converter now attached to ttyUSB0
Aug 11 13:24:27 localhost kernel: usbcore: registered new driver pl2303
Aug 11 13:24:27 localhost kernel: drivers/usb/serial/pl2303.c:
 Prolific PL2303 USB to serial adaptor driver 
リスト1 /var/log/messagesのファイル内容

 リスト1には、貴重な情報がいろいろと書かれています。一番の注目は「pl2303 converter detected」という部分です。「pl2303を検出した」という意味です。

 さらに、「lsmod」コマンドで新たにロードされたモジュールを調べてみると、「lsmod」コマンドを実行した結果の頭の方に「pl2303」というモジュールがロードされているのを確認できます(リスト2)。

# lsmod
Module                  Size  Used by
pl2303                 17668  0
usbserial              29032  1 pl2303 
リスト2 「pl2303」というモジュールがロードされている

 つまり、これが今回使用するUSB−シリアル変換ケーブルに使用されたデバイスドライバで、カーネルはUSB−シリアル変換ケーブルがUSBポートに接続されたことを受けて、必要なドライバを呼び出したのです。今回使用した秋月電子通商のUSB−シリアル変換ケーブルにはLinux用のドライバは付属していません(Windows用のドライバは付属しています)。しかし、あらかじめVine Linux 4.2のディストリビューションには、該当するドライバが用意されていますので、新たにドライバを追加する必要はありません。もし、これ以外のUSB−シリアル変換ケーブルを使用する場合には、Linux側でドライバの対応が取られているかどうか、ケーブルを購入する前に調べておくとよいでしょう。

 それではもう一度、以下のコマンドを実行してください。

# ls -l /dev/ttyUSB0 

 すると、以下のように出力されて、「/dev/ttyUSB0」というファイルが生成されていることが確認できると思います。

crw-rw---- 1 root uucp 188, 0  8月11日 13:33 /dev/ttyUSB0  

 そうです、何を隠そう今回「h8write」コマンドでアクセスしなければならないデバイスファイルは、「/dev/ttyUSB0」だったのです。ちなみに、一般ユーザーでもアクセス可能にしたい場合は、以下のコマンドで読み書き権限を与えておくとよいでしょう。

# chmod 666 /dev/ttyUSB0
# ls -l /dev/ttyUSB0
crw-rw-rw- 1 root uucp 188, 0  8月11日 13:33 /dev/ttyUSB0 
※コラム:Linuxでも使えるEMOBILE(D01HW)
筆者は今回準備した環境を持ち歩いているため、外出先からネットワークに接続する機会が多くあります。ここではLinux環境でEMOBILEのデータ通信カード「D01HW」を使用する方法を掲載しているサイトを紹介するとともに、「USBのHUB」を使用する方法を説明します。
D01HWをLinux環境で使用する際に、筆者が参考にしたのは以下のサイトです。

これらを参考にすれば比較的簡単に設定できると思います(本題からずれるので詳細については割愛させてください)。
しかし、こうした通信関連デバイス(D01HW)と、本文で紹介しているUSB−シリアル変換ケーブルを一緒に使おうとするとUSBポート不足の壁にぶち当たります。そこで、登場するのがUSBのHUBです。これを使ってやりくりするわけですが、USB−シリアル変換ケーブルをつなぐ順番によっては、本文にある「/dev/ttyUSB0」と同じ結果にならない場合があります。以下にその例を紹介します。
まず、USBのHUBをホストPCのUSBポートに接続します。
次に、USBのHUBの空きポートにD01HWを接続して、以下のコマンドを実行します。

# ls -l /dev/ttyUSB*


すると、以下のように表示されます。

crw-rw---- 1 root uucp 188, 0 8月11日 13:45 /dev/ttyUSB0

crw-rw---- 1 root uucp 188, 1 8月11日 13:45 /dev/ttyUSB1


続いて、USBのHUBの空きポートにUSB−シリアル変換ケーブルを接続して、以下のコマンドを実行します。

# ls -l /dev/ttyUSB*


すると、以下のように表示されます。

crw-rw---- 1 root uucp 188, 0 8月11日 13:45 /dev/ttyUSB0

crw-rw---- 1 root uucp 188, 1 8月11日 13:45 /dev/ttyUSB1

crw-rw---- 1 root uucp 188, 2 8月11日 13:45 /dev/ttyUSB2 ← これがUSB-シリアル変換ケーブルのデバイスファイル


この場合、H8マイコンの書き込みを行うためのUSB−シリアル変換ケーブのデバイスファイルは、本文にあるような「/dev/ttyUSB0」ではなく、上記結果の3行目の「/dev/ttyUSB2」になります。試しにこの状態で(/dev/ttyUSB2を指定して)以下のコマンドを実行してみると、きちんとH8マイコンに書き込むことができます。この例のとおり、作業する際はアクセスするデバイスファイルをきちんと意識することが大切です。

# h8write -f20 -3069 lcd_test.mot /dev/ttyUSB2

H8/3069F is ready! 2002/5/20 Yukio Mituiwa.

writing

WARNING:This Line dosen't start with"S".

Address Size seems wrong

WARNING:This Line dosen't start with"S".

Address Size seems wrong

..........

EEPROM Writing is successed.




Copyright © ITmedia, Inc. All Rights Reserved.