ในระดับที่ง่ายที่สุดคุณสามารถพูดได้ว่าโปรโตคอลการสื่อสารอย่างง่ายมีสามชั้น: ทางกายภาพการขนส่งและการใช้งาน (มีหลายรุ่นเช่นOSI ที่มี 7 หรือTCP / IP ที่มี 4 จำนวนเลเยอร์ไม่สำคัญอย่างยิ่งในบริบทของคำถามนี้)
เลเยอร์แอปพลิเคชันคือเลเยอร์ที่คุณจัดการโดยตรงในรหัสของคุณและจุดเน้นของคำถาม เท่าที่เลเยอร์การขนส่งเกี่ยวข้องไบต์ที่คุณส่งไปใน send_data เป็นเพียงรูปแบบไบนารี แต่คุณอาจตีความมันในรหัสแอปพลิเคชันของคุณเป็นตัวอักษร 'A' การคำนวณ CRC หรือการตรวจสอบจะเหมือนกันโดยไม่คำนึงว่าคุณพิจารณาว่าไบต์เป็น 'A,' 0x41 หรือ 0b01000001
เลเยอร์การขนส่งเป็นระดับแพ็กเก็ตที่คุณมีส่วนหัวของข้อความและการตรวจสอบข้อผิดพลาดไม่ว่าจะเป็น CRC หรือการตรวจสอบขั้นพื้นฐาน ในบริบทของเฟิร์มแวร์คุณอาจมีฟังก์ชั่นเช่น send_data ซึ่งคุณจะส่งเป็นไบต์เพื่อส่ง ภายในฟังก์ชั่นนั้นมันใส่เข้าไปในแพ็คเก็ตที่บอกว่า "เฮ้นี่เป็นข้อความปกติต้องมีการตอบรับและการตรวจสอบคือ 0x47 เวลาปัจจุบันคือ X" แพ็คเก็ตนี้จะถูกส่งออกไปบนชั้นกายภาพเพื่อโหนดรับ
เลเยอร์ทางกายภาพเป็นที่กำหนดอิเล็กทรอนิกส์และอินเตอร์เฟส: ตัวเชื่อมต่อระดับแรงดันไฟฟ้าเวลา ฯลฯ เลเยอร์นี้อาจมีตั้งแต่สองร่องรอยที่ใช้สัญญาณ TTL สำหรับ UART พื้นฐานบน PCB เป็นคู่ที่แยกได้อย่างเต็มที่ในบางครั้งสามารถใช้งานได้
ที่โหนดการรับแพ็คเก็ตจะมาในเลเยอร์ทางกายภาพจะถูกคลายแพ็กเกจที่เลเยอร์การขนส่งและจากนั้นรูปแบบไบนารีของคุณจะพร้อมใช้งานกับชั้นแอปพลิเคชัน มันขึ้นอยู่กับเลเยอร์ของแอปพลิเคชั่นโหนดที่รับรู้ว่ารูปแบบนั้นควรตีความว่า 'A,' 0x41 หรือ 0b01000001 และจะทำอย่างไรกับมัน
โดยสรุปแล้วมันค่อนข้างยอมรับได้เสมอในการส่งอักขระ ASCII ถ้านั่นคือสิ่งที่แอปพลิเคชันต้องการ สิ่งสำคัญคือการเข้าใจรูปแบบการสื่อสารของคุณและรวมถึงกลไกการตรวจสอบข้อผิดพลาด