Pada tingkat paling sederhana, Anda bisa mengatakan protokol komunikasi sederhana memiliki tiga lapisan: fisik, transportasi, dan aplikasi. (Ada model dengan lebih banyak seperti OSI dengan 7 atau TCP / IP dengan 4. Jumlah lapisan tidak terlalu penting dalam konteks pertanyaan ini.)
Lapisan aplikasi adalah lapisan yang Anda tangani langsung dalam kode Anda, dan fokus pertanyaan. Sejauh menyangkut lapisan transport, byte yang Anda lewati di send_data hanyalah pola biner, tetapi Anda dapat menafsirkannya dalam kode aplikasi Anda sebagai huruf 'A'. Perhitungan CRC atau checksum akan sama terlepas dari apakah Anda menganggap byte sebagai 'A,' 0x41, atau 0b01000001.
Lapisan transport adalah level paket, di mana Anda memiliki header pesan Anda, dan pengecekan kesalahan, apakah itu CRC atau checksum dasar. Dalam konteks firmware, Anda mungkin memiliki fungsi seperti send_data, tempat Anda mengirimkan byte untuk dikirimkan. Di dalam fungsi itu dimasukkan ke dalam paket yang mengatakan, "Hei ini adalah pesan normal, memerlukan pengakuan, dan checksumnya adalah 0x47, waktu saat ini adalah X." Paket ini dikirim melalui lapisan fisik ke node penerima.
Lapisan fisik adalah tempat elektronik dan antarmuka didefinisikan: konektor, level tegangan, timing, dll. Lapisan ini dapat berkisar dari beberapa jejak yang menjalankan sinyal TTL untuk UART dasar pada PCB, hingga pasangan diferensial sepenuhnya terisolasi seperti pada beberapa Implementasi BISA .
Pada node penerima, paket masuk pada lapisan fisik, dibongkar pada lapisan transport, dan kemudian pola biner Anda tersedia untuk lapisan aplikasi. Terserah lapisan aplikasi simpul penerima untuk mengetahui apakah pola itu harus ditafsirkan sebagai 'A,' 0x41, atau 0b01000001, dan apa yang harus dilakukan dengannya.
Kesimpulannya, mengirimkan karakter ASCII cukup banyak dapat diterima jika itu yang diperlukan oleh aplikasi. Yang penting adalah memahami skema komunikasi Anda, dan memasukkan mekanisme pengecekan kesalahan.