
* Question
What are the verifications of serial communication data?
* Answer
Verifying serial communication data is critical to ensure data integrity, reliability, and synchronization between devices—especially in embedded systems, industrial control, and communication protocols. Below are the main methods used to verify and validate serial data transmissions.
Table of Contents
Toggle1. Start and Stop Bits (Framing Verification)
Purpose:
To detect the beginning and end of each byte during asynchronous communication.
How it works:
Start bit (0): Signals the beginning of a data frame.
Stop bit (1): Marks the end.
If these bits are missing, corrupted, or misaligned, framing errors occur.
Verification:
UART receivers automatically check for correct framing.
Framing errors raise an internal flag or interrupt.
2. Parity Bit (Error Detection)
Purpose:
Adds a simple form of error detection per byte.
Types:
Even parity: Total number of 1s (including parity bit) is even.
Odd parity: Total number of 1s is odd.
Verification:
Receiver recalculates parity and compares it to the received bit.
If mismatched → parity error.
Parity can detect single-bit errors only, not correct them or detect multi-bit errors.
3. Checksum
Purpose:
Verifies blocks of data, not just individual bytes.
How it works:
Transmitter calculates the sum of all bytes (modulo 256 or 16-bit sum).
Appends the result at the end of the data.
Receiver performs the same sum and compares.
Use Case:
Simple but effective for detecting accidental bit flips.
Common in custom serial protocols or legacy systems.
4. Cyclic Redundancy Check (CRC)
Purpose:
Provides robust multi-bit error detection across large messages.
How it works:
Sender calculates a CRC code using polynomial division.
Appends CRC code to the end of the message.
Receiver performs the same calculation to verify.
Use Case:
Industrial protocols (e.g., Modbus RTU, CAN).
Higher reliability than checksum/parity.
5. ACK/NACK (Acknowledge / Not Acknowledge)
Purpose:
Confirms if the receiver correctly received the data.
How it works:
After data receipt, receiver sends:
ACK: All good.
NACK: Error detected, request retransmission.
Use Case:
I²C, XMODEM, and many custom protocols use this scheme.
6. Timeout and Sequence Number Validation
Purpose:
Ensures that messages are not lost or reordered.
Techniques:
Timeouts: If response is not received within a fixed time → assume failure.
Sequence numbers: Detect missing or out-of-order packets.
Use Case:
Advanced protocols like HDLC, TCP-like implementations on serial.
7. Echo Verification
Purpose:
Confirms correct transmission in full-duplex systems.
How it works:
Receiver sends back received data.
Transmitter verifies echo matches original.
Use Case:
Debugging or low-level testing of UART or RS-232 links.
Summary Table
Method | Detects Errors? | Scope | Correction |
Start/Stop Bits | Framing errors | Per byte | No |
Parity Bit | 1-bit errors | Per byte | No |
Checksum | Basic integrity | Message level | No |
CRC | Robust detection | Message/frame | No |
ACK/NACK | Transmission | Full message | By retry |
Timeout/Sequence | Drop/order issues | Session/stream | By retry |
Echo | Transmission | Byte or string | Manual |
Application Example: UART with CRC
// Send
uint8_t data[] = {0x12, 0x34, 0x56};
uint16_t crc = calc_crc(data, 3);
send_uart(data, 3);
send_uart((uint8_t*)&crc, 2);
// Receive & verify
if (verify_crc(received_data, length)) {
send_ack();
} else {
send_nack();
}
COMMENTS