ザイリンクス FPGA 用の非同期通信コントローラーを作成していますが、x86 プロセッサがデータを送信する順序を理解する手間を省きたいと考えています。
ホスト側では、次のチュートリアルを使用する C プログラムを使用しています: http://slackware.osuosl.org/slackware-3.3/docs/mini/Serial-Port-Programming
また、データ送信時にビッグエンディアンとリトルエンディアンを切り替えて送信することはできますか?
ザイリンクス FPGA 用の非同期通信コントローラーを作成していますが、x86 プロセッサがデータを送信する順序を理解する手間を省きたいと考えています。
ホスト側では、次のチュートリアルを使用する C プログラムを使用しています: http://slackware.osuosl.org/slackware-3.3/docs/mini/Serial-Port-Programming
また、データ送信時にビッグエンディアンとリトルエンディアンを切り替えて送信することはできますか?
非同期通信(シリアルポート)について話している場合、バイトの順序は、そのシリアルポートで実行しているプロトコルによって異なります。x86はリトルエンディアンであるため、整数のバイトを送信するプログラムは最初にLSBを送信します。
通常、データの送信にはある種のプロトコルを使用するため、そのプロトコルのバイトオーダーを使用することをお勧めします。
したがって、あなたの答えは、データを送信するx86プログラムが実際に何を使用するかによって異なります。
USB はリトルエンディアンです。
しかし、USB シリアル ポート経由でバイトを送信する場合は、プログラムが送信する順序に完全に依存します。
Intel システムでは、もともとビッグエンディアン システムと通信することを意図していた場合を除き、最下位バイトが最初に送信されることを期待します (ただし、確認したい)。
シリアル通信プロトコルの場合、エンディアンはプロセッサではなくプロトコルによって定義されます。USB はリトルエンディアンです。こちらの USB 3.0 仕様のセクション 7.1 を参照してください。
x86 を持っているという事実は関係ありません。x86 で動作するシリアル通信ドライバーは、リトル エンディアン プロトコルまたはビッグ エンディアン プロトコルのいずれかに準拠するように記述できます。