2

USB から 25 ピンのパラレル ポート ケーブルを持っています。ラップトップに接続し、/dev/usb/lp0 にポートを取得します。パラレル ポートのピン 1/ピン 25 を +/- LED に接続すると、点灯します。

ここで、LED の + ピンをパラレル ポートのピン 2 に移動し、バイトをポートに送信しようとすると、点灯するはずですが点灯しません。

コマンドoutb(0xff,port)where port isを使用します0x378。ここで何が欠けていますか?

これは私の完全なプログラムです:

#include<stdlib.h>
#include<stdio.h>
#include<sys/io.h>
void main(void){
    int port=0x378;
    outb(0xff,port);
    outb(0x01,port+2);
    sleep(1);
    outb(0x00,port+2);
    printf("‌​End");
}

私もそれをチェックしましport=0x3bcたが、動作しませんでした。LEDの+を接続してストロボ1番ピンを確認したところ、常時点灯しているのにローにはなりません。ポートアドレスに問題はありませんか?

4

1 に答える 1

2

Port0x378は、古い ISA パラレル ポートが存在する I/O ロケーションです。USB 接続のパラレル ポートはそこに表示されません。できませんでした。OHCI/UHCI/EHCI/xHCI とのやり取りがどのように機能するかについての低レベルの詳細についてはあまり知りませんが、すべての操作が USB ホスト コントローラーを経由する必要があることは知っています。したがって、最下位レベルでは、USB バスにクエリを実行し、デバイスの VID を見つけ、それと何らかの通信を開き、通信モードを設定してから、バイトを一度に 1 つずつ送受信する必要があります。

データを直接書き込んでみて、/dev/usb/lp0何が起こるか見てみましょう。最初に ECP モードを変更するために何かをする必要があるかもしれませんioctl。実際に何をすべきかを知るには、このドライバーのソース コードを掘り下げる必要があるかもしれません。

それができない場合は、ラップトップ用のドックを入手できるかどうかを確認してください。あなたのラップトップがたまたまビジネスクラスのラップトップである場合、利用可能なドックには通常レガシーポートがあり、ここで使用しようとしているように機能することに気付きました.

于 2013-01-07T12:48:49.827 に答える