Professional Documents
Culture Documents
(STM32 Nâng cao) Buổi 7 Plus Thuật toán kiểm tra lỗi CRC
(STM32 Nâng cao) Buổi 7 Plus Thuật toán kiểm tra lỗi CRC
CRC là 1 thuật toán để kiểm tra lỗi dữ liệu trên đường truyền.
Ta thấy trường hợp đường truyền bị nhiễu sẽ đẫn đến bên nhận nhận không đúng dữ
liệu từ bên phát. Như vậy nếu ta lấy kết quả này đem đi xử lí thì sẽ rất nguy hiểm.
Như vậy ta cần phải có cơ chế kiểm tra dữ liệu trên đường truyền để có thể đưa ra
phương án như là yêu cẩu gửi lại hoặc bỏ qua dữ liệu nhận được.
Câu hỏi: Các bạn hãy liệt kê các phương pháp check dữ liệu mà các bạn biết?
Khoá học lập trình STM32 nâng cao Ngọc Tuấn
Phương pháp chung để kiểm tra lỗi
Giả sử ta cần gửi 1 mảng có dữ liệu như sau:
0x01 0x44 0x40 0x67 0x78 0x01 0x44 0x45 0x67 0x78
Câu hỏi: Liệu bên nhận có biết mình nhận sai dữ liệu?
Khoá học lập trình STM32 nâng cao Ngọc Tuấn
Phương pháp chung để kiểm tra lỗi
• Như vậy để biết được dữ liệu có đúng hay không người ta sẽ gửi kèm n byte check
(thông thường từ 1 → 4 byte) kèm với data. Vậy byte check này có giá trị bao nhiêu?
Tuỳ thuộc vào thuật toán check lỗi sẽ ra giá trị và độ dài số byte check khác.
0x01 0x44 0x40 0x67 0x78 0x56 0x67 0x01 0x44 0x40 0x67 0x78 0x56 0x67
0x01 0x44 0x40 0x67 0x78 0x56 0x67 0x01 0x44 0x40 0x67 0x78 0x56 0x67
Truyền data + n
byte check lỗi So sánh n byte
check với n
byte cuối ở dữ
liệu nhận đươc
Khoá học lập trình STM32 nâng cao Ngọc Tuấn
Sơ đồ khối kiểm tra lỗi Byte lỗi
Dữ liệu cần Ví dụ truyền 3 byte : Nhận được dữ Giả sử bên nhận sẽ nhận được
truyền A = { 0x01, 0x44, 0x40}; liệu A= { 0x01, 0x35, 0x40, 0x78};
Trong đó:
❖ 𝑎𝑛 là 1 hoặc 0.
❖ Chuỗi bit của đa thức sinh có các cách biểu diễn sau:
• Cách biểu diễn thông thường (Trong 1 đa thức sinh 𝑎𝑛 luôn bằng 1, bit cao nhất sẽ bị loại bỏ
các giá trị sắp xếp bình thường 𝑎𝑛−1 . . 𝑎0 )
• Cách biểu diễn đảo ngược (Trong 1 đa thức sinh 𝑎𝑛 luôn bằng 1, bit cao nhất sẽ bị loại bỏ
các giá trị sắp xếp theo chiều người lại tử 𝑎0 . . 𝑎𝑛−1 )
Đa thức sinh
Dữ liệu cần truyền