CQ出版発行の組み込みエンジニアのための Embedded Unix の記事関連のダウンロード・コーナです。 |
第1回目は最も身近で、古くて皆さんにもなじみのある、EIA-232-E方式の非同期通信を中心に、シリアルポートのドライバをテーマにして、Linuxでの実例を紹介しながら、解説しています。
本誌ではシリアルポートの一般的な知識、ハードウェアとソフトウェアの一般的な解説のほか、シリアルポートのデバイスドライバ開発に必要な技術情報、Linuxのデバイスドライバの解説、開発方法(または改造方法)と、簡単なテスト用プログラムを掲載して解説しています。
記事中で紹介しましたように、高速モード・シリアルポート対応ドライバ(SHSMOD)のLinux用を今回開発し直して、ソースコードを含めて以下に公開しました。しかしLinux用SHSMODの最新版はV1.93になりましたので、最新版はSHSMODのページからダウンロードして入手して下さい。
高速モード・シリアルポート対応ドライバ(SHSMOD)は、一般的なPCアーキテクチャのマシンに使用されている、SMC、NS、Winbond、ALI等のSuperIO / SouthBridgeの機能拡張モードを使って、115,200bpsを超えるシリアル通信を実現させるソフトウェアです。元々は筆者の知り合いのGigo氏が開発した、DOSの小さな別の名前のプログラムだったのですが、WindowsNT用やWindows95用がやがて作られ、さらには他の協力者の手によって、FreeBSD用やLinux用も作られまています。今回はWindows用SHSMODシリーズの最後の版に手に入れて、アプリケーション・モードでのデバイス制御を行う版と、Linuxの標準シリアルポート・ドライバである、serial.cの改造パッチとして動作させます。
ファイル | 説明 |
---|---|
serial.c デバッグ表示用パッチ serial.patch |
カーネル2.4.18のserial.c にprintk()によるデバッグ分を追加し、デバイスドライバの動作を確認する |
テスト用プログラム onebypne.c |
ループバック*1を使って1バイト分の文字データを出力と入力を繰り返す |
テスト用プログラム block.c |
ループバック*1を使ってまとめて出力したデータをまとめて入力する |
テスト用プログラム thread-io.c |
Threadを使ってまとめて入出力を行い、RTS/CTSのフロー制御を行う(ループバック使用*1) |
性能評価用用プログラム perform.c |
ループバック*1を使った実効転送速度の性能評価プログラム (記事中には掲載していません) |
高速モード・シリアルポート対応プログラム shsmod.c shstable.c shschip.c shstable.h |
アプリケーション・モードでのデバイス制御を行うSHSMOD V1.91相当のツール *2VIA VT82C686A|Bでの使用には注意が必要 |
シリアルポート・ドライバの 高速モード・シリアルポート化Patch serial-shsmod-v1.91.patch.gz |
Linuxの標準シリアルポート・ドライバであるserial.cの高速モード・シリアルポート化改造パッチ (kernel 2.4.18以降用) コンパイルにはこのパッチのほかにshstable.c shatable.h shschip.cが必要*3 *4 |
e-unix-vol2-serial.tar.gz | 上記すべてとMakefile等をまとめたパッケージ |
★ご注意-1:
各テスト用プログラムと性能評価用プログラムの実行には、記事中で紹介しているような「ループバック・コネクタ」を接続するか、または対向接続しているマシン上で「ループバック・プログラム」を動作させておく必要があります。
★ご注意-2:
このプログラムでは、ユーザモード・アプリケーションでPCIコンフィグレーションを制御しているため、VIA VT82C686Aまたは686Bを使用しているマシンのX-window環境で使用した場合には、画面のチラツキやウィンドウ、キーボードの操作に不具合が発生する場合があります。あくまでもプログラミングのための参考として使用して下さい。
★ご注意-3:
パッチは、Linux kernel-2.4.18, 2.4.19, Red Hat Linux 8.0で使用されている2.4.18-14 で確認しています。パッチを当てた後コンパイルするためには、同じディレクトリ上に、インクルードして使用するshstable.c shatable.h shschip.c が必要になります。
★ご注意-4:
ドライバがインストールされた時から高速通信モードに設定されますが、実際に高速通信を行うためには、以下のような手順で、ポートの通信速度を設定させる必要があります。
WinbondとNS環境でのシェルからの設定例
# stty -F /dev/ttyS0 speed 230400
または
# stty -F /dev/ttyS1 speed 460800
SMSC, ALi, VIA環境でのシェルからの設定例
# setserial /dev/ttyS0 divisor 0x8002 spd_cust
# stty -F /dev/ttyS0 speed 38400
または
# setserial /dev/ttyS1 divisor 0x8001 spd_cust
# stty -F /dev/ttyS1 speed 38400
setserialでの設定値: 0x8002 ==> 230400bps, 0x8001 ==> 460800 bps
サイト | 説明 |
---|---|
Linux JF Project http://www.linux.or.jp/JF/ (日本語) |
Linux Serial HOWTO (2000/05/11) ハードウェアの構成・接続から、モデムやカードの使い方、設定方法やアプリケーションまでシリアルポート関連の全般にわたって解説しています。 The Linux Serial Programming HOWTO (1998/02/26) シリアルポートを使った通信プログラムのプログラミングに関する解説です。 Modem-HOWTO (2000/02/04) モデムだけでなく、シリアルポートの設定方法やアプリケーションについてまで解説し、トラブルシューティングもあります。 |
The Linux Document Project http://tldp.org/ (英語) |
Linux Serial HOWTO (Mar. 2002) The Linux Serial Programming HOWTO (Aug. 2001) Modem-HOWTO (Sep. 2002) |
サイト | 製品種類 | 製品例 |
---|---|---|
National Semiconductor http://www.national.com/ |
6550系 | PC16550D |
Super IO | PC87338ほか | |
EXAR http://www.exar.com/ |
16450系 | ST16C450ほか |
16550系 | ST16C550ほか | |
16650系 | ST16C650Aほか | |
16850系 | XR16C850ほか | |
Texas Instruments http://www.ti.com/ |
16450系 | TL16C450ほか |
16550系 | TL16C550Cほか | |
16750系 | TL16C750ほか | |
Oxford Semiconductor http://www.oxsemi.com/ |
16950系 | OX16C950Bほか |
SMSC http://www.smsc.com/ |
Super IO | FDC37C669ほか |
Winbond http://www.winbond.com/ |
Super IO | W83627HFほか |
ITE http://www.ite.com.tw/ |
Super IO | IT8172ほか |
更新日:3月14日