COM ポートのピンから値を読み取る可能性はありますか? Linux での C での解決策は大歓迎です!
3 に答える
この質問に対する正確な答えは、問題の正確なハードウェアによって異なります。ビットレートの表示として文字「a」を受け取ることに基づいて、私が作業したコードの一部を知っています。RXピンをポーリングして、0と1の間の遷移を検出し、ビットの「幅」を検出します。次に、シリアル ポートの正しいクロック レートを計算し、シリアル ポートを相手側のビットレートと一致するように構成します。
「PC」タイプのハードウェア ソリューションでは、RX/TX ピンを読み取ることができません。他のハードウェアでは、それが可能な場合があります。多くの組み込みシステムでは、さまざまなピンを入力、出力、または「機能を持つ」(この場合は RX、TX、CTS、RTS など) として構成できます。たとえば、RX ピンを入力として構成できます。したがって、その状態を読み取ります。もちろん、通常のシリアルポートドライバーはおそらくこれらのピンを「機能する」ように設定します[または、カーネルが開始される前に実行されるブートコードがこのように構成されていることを期待します]。したがって、ほとんどの場合、独自のカーネル コードでピンを再構成する必要があります。これにより、実際のシリアル ポートのドライバに予期しない副作用が発生する可能性があることに注意してください。シリアル ポートに対して何かを行おうとすると、ドライバが「混乱」する可能性があり、"
IOCTL 呼び出しを介して、CTS、RTS などの制御ピンの状態をほぼ確実に読み取る (および/または書き込む) ことができます。
確かに、UARTのピンを読み書きすることはできません。ハードウェア レベルでも、バイト全体を読み書きする必要があります。ビット アクセスや読み書きピン アクセスはありません。Byte は、受信/送信 UART バッファで読み書きされます。
どちらの方法でも、バッファに直接アクセスすることはできません。あなたに代わって Linux ドライバがその仕事をします。UART を操作するには、アプリケーションでドライバーを使用する必要があります。UART 用の Linux ドライバーは、UART を操作するための open()、read()、write()、ioctl() などの標準 API を提供します。デバイス。
ドライバーと仕事をしたいが、この分野に慣れていない場合は、 この本から始めるのが最適です。