Al livello più semplice, si potrebbe dire che un semplice protocollo di comunicazione ha tre livelli: fisico, trasporto e applicazione. (Esistono modelli con più come OSI con 7 o TCP / IP con 4. Il numero di livelli non è tremendamente importante nel contesto di questa domanda.)
Il livello dell'applicazione è il livello che gestisci direttamente nel tuo codice e il fulcro della domanda. Per quanto riguarda il livello di trasporto, il byte che gli è stato passato in send_data è solo un modello binario, ma è possibile interpretarlo nel codice dell'applicazione come la lettera 'A'. Il calcolo CRC o checksum sarà lo stesso indipendentemente dal fatto che si consideri il byte come 'A,' 0x41 o 0b01000001.
Il livello di trasporto è il livello del pacchetto, in cui sono presenti le intestazioni dei messaggi e il controllo degli errori, sia esso CRC o un checksum di base. Nel contesto del firmware, potresti avere una funzione come send_data, dove gli passi un byte da inviare. All'interno di quella funzione viene inserito in un pacchetto che dice "Hey, questo è un messaggio normale, richiede un riconoscimento e il checksum è 0x47, l'ora corrente è X." Questo pacchetto viene inviato attraverso il livello fisico al nodo ricevente.
Lo strato fisico è il punto in cui sono definiti l'elettronica e l'interfaccia: connettori, livelli di tensione, temporizzazione, ecc. Questo strato può variare da un paio di tracce che eseguono segnali TTL per un UART di base su un PCB, a una coppia differenziale completamente isolata come in alcuni Implementazioni CAN .
Nel nodo ricevente, il pacchetto entra nel livello fisico, viene decompresso nel livello di trasporto e quindi il modello binario è disponibile per il livello applicazione. Spetta al livello dell'applicazione del nodo ricevente sapere se quel modello deve essere interpretato come 'A,' 0x41 o 0b01000001 e cosa fare con esso.
In conclusione, è quasi sempre accettabile inviare caratteri ASCII se questo è ciò che richiede l'applicazione. L'importante è comprendere il tuo schema di comunicazione e includere un meccanismo di controllo degli errori.