Au niveau le plus simple, on pourrait dire qu'un protocole de communication simple comporte trois couches: physique, transport et application. (Il existe des modèles avec plus comme OSI avec 7 ou TCP / IP avec 4. Le nombre de couches n'est pas très important dans le contexte de cette question.)
La couche application est la couche avec laquelle vous traitez directement dans votre code et le centre de la question. En ce qui concerne la couche transport, l'octet que vous lui avez transmis dans send_data n'est qu'un modèle binaire, mais vous pouvez l'interpréter dans votre code d'application comme la lettre «A». Le CRC ou le calcul de la somme de contrôle sera le même, que vous considériez l'octet comme «A», 0x41 ou 0b01000001.
La couche de transport est le niveau du paquet, où vous avez vos en-têtes de message et la vérification des erreurs, que ce soit CRC ou une somme de contrôle de base. Dans le contexte du firmware, vous pouvez avoir une fonction telle que send_data, où vous lui passez un octet à envoyer. A l'intérieur de cette fonction, il a mis dans un paquet qui dit: "Hé, c'est un message normal, nécessite un accusé de réception, et la somme de contrôle est 0x47, l'heure actuelle est X." Ce paquet est envoyé sur la couche physique au nœud récepteur.
La couche physique est l'endroit où l'électronique et l'interface sont définies: connecteurs, niveaux de tension, synchronisation, etc. Cette couche peut aller de quelques traces exécutant des signaux TTL pour un UART de base sur un PCB à une paire différentielle entièrement isolée comme dans certains POUVEZ .
Au niveau du nœud de réception, le paquet arrive sur la couche physique, est décompressé au niveau de la couche de transport, puis votre modèle binaire est disponible pour la couche d'application. Il appartient à la couche d'application du nœud récepteur de savoir si ce modèle doit être interprété comme «A», 0x41 ou 0b01000001, et quoi en faire.
En conclusion, il est à peu près toujours acceptable d'envoyer des caractères ASCII si c'est ce que demande l'application. L'important est de comprendre votre schéma de communication et d'inclure un mécanisme de vérification des erreurs.