最も単純なレベルでは、単純な通信プロトコルには、物理、トランスポート、およびアプリケーションの3つの層があります。(7のOSIや4のTCP / IPなど、より多くのモデルがあります。この質問のコンテキストでは、レイヤーの数はそれほど重要ではありません。)
アプリケーション層は、コードで直接扱う層であり、質問の焦点です。トランスポートレイヤーに関する限り、send_dataで渡したバイトは単なるバイナリパターンですが、アプリケーションコードでは文字「A」として解釈できます。CRCまたはチェックサムの計算は、バイトを「A」、0x41、または0b01000001のいずれであるとみなしても同じです。
トランスポート層はパケットレベルであり、メッセージヘッダーがあり、CRCでも基本チェックサムでもエラーチェックを行います。ファームウェアのコンテキストでは、送信するバイトを渡すsend_dataなどの関数を使用できます。その関数内で、「これは通常のメッセージです。確認応答が必要で、チェックサムは0x47、現在の時間はXです」というパケットに入れられます。このパケットは、物理層を介して受信ノードに送信されます。
物理層は、コネクタと電圧レベル、タイミングなど、電子機器とインターフェースが定義される場所です。この層は、PCB上の基本的なUARTのTTL信号を実行するいくつかのトレースから、一部のCAN実装。
受信ノードでは、パケットは物理層に到着し、トランスポート層で展開され、アプリケーション層でバイナリパターンが利用可能になります。そのパターンを「A」、0x41、または0b01000001として解釈する必要があるかどうか、およびそれをどう処理するかを知るのは、受信ノードのアプリケーションレイヤー次第です。
結論として、もしそれがアプリケーションが要求するものであれば、ASCII文字を送信することはほとんど常に受け入れられます。重要なことは、通信スキームを理解し、エラーチェックメカニズムを含めることです。