
1. Định nghĩa về bộ truyền/ bộ nhận (Transmitter/ Receiver)
Không giống như các giao thức bus truyền nối khác (như I2C, SPI). Trong một bus CAN không có khái niệm master/slave mà các nút trong mạng, về nguyên tắc, đều có vai trò như nhau. Nghĩa là bất cứ khi nào thấy bus rảnh (IDLE) thì các nút đều có thể truyền thông điệp của mình trên bus. Vì vậy, trong mạng CAN chỉ có khái niệm nút truyền/nút nhận.
Bộ truyền (Transmitter): Một đơn vị là nơi khởi nguồn của thông điệp thì được gọi là bộ truyền của thông điệp đó. Một đơn vị được giữ là bộ truyền cho đến khi bus rảnh hay đơn vị đó bị thua trong quá trình phân xử ( quá trình phân xử là quá trình xảy ra khi có nhiều đơn vị cùng truyền thông điệp trong cùng một thời gian).
Bộ nhận (Receiver): Một đơn vị được gọi là bộ nhận của thông điệp nếu nó không là bộ truyền của thông điệp khác và bus không rảnh.
Như vậy, nút truyền là nút chiếm được bus trước các nút khác hoặc thắng trong sự phân xử khi có nhiều nút truyền thông điệp cùng lúc. Ngược lại nút nhận là nút "chậm" hơn các nút khác, không kịp chiếm bus khi bus rảnh hoặc thu trong sự phân xử.
Một nút được gọi là "nút nhận" không có nghĩa là nó phải lấy dữ liệu của khung thông điệp đang truyền trên bus mà nó chỉ giám sát thông điệp đang được nút khác truyền trên bus và kiểm tra xem đó có phải là thông điệp của mình không. Nếu đúng, nút nhận sẽ lưu lại thông điệp này, nếu không đúng, nút nhận sẽ loại bỏ thông điệp này.
Các bạn có thể tham khảo tài liệu của Microchip:
https://www.microchip.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en558265.pdf
2. Mã hóa bit được sử dụng trong giao thức CAN
Mã hóa loại Non-Return-to-Zero (NRZ)
Phương pháp mã hóa được sử dụng trong giao thức CAN là phương pháp NRZ mà cụ thể hơn là NRZ-L (Non-Return-to-Zero Level). Đây là dạng mã hóa theo mức, tức là mỗi trạng thái dominant và recesive sẽ được quy định mang một mức áp khác nhau. Cụ thể, dominant là mức thấp tương ứng với logic 0, recessive là mức cao tương ứng với logic 1
Mã hóa Non-Return-to-Zero
Đây là loại mã hóa đơn giản, thông dụng nhưng lại khó khăn cho vấn đề đồng bộ khi có nhiều bít 0 hay bit 1 xuất hiện liên tiếp. Để có được sự đồng bộ cao hơn người ta còn có thể sử dụng mã hóa Manchester.
Mã hóa Manchester
Mã hóa Manchester là loại mã hóa có sự chuyển mức tại điểm giữa mỗi bit. Cụ thể, bit 1 là sự biến đổi trạng thái từ mức cao xuống mức thấp, bit 0 là sự biến đổi trạng thái từ mức thấp lên mức cao.
Mã hóa Manchester
Loại mã hóa này đạt được sự đồng bộ tốt hơn NRZ chính là nhờ sự đảo mức tại điểm giữa mỗi bit.
3. Quy luật chèn bit (Bit Stuffing)
Loại mã hóa được dùng chính thức trong giao thức CAN là NRZ. Chính vì sử dụng loại mã hóa này nên để đảm bảo tốt vấn đề đồng bộ khi xuất hiện quá nhiều bit 0 hay bit 1 liên tiếp ta phải tuân thủ theo luật chèn bit như sau: Bất cứ khi nào một bộ truyền phát hiện có 5 bit liên tiếp có giá trị giống nhau trong chuỗi bit được truyền thì nó sẽ tự động thêm một bit (gọi là bit chèn hay bit chỉnh) vào ngay sau 5 bit kia và bit chèn này đảo mức so với 5 bit trước đó.
Tại bộ nhận, bit chèn sẽ được loại bỏ để lấy thông tin chính xác được truyền.
Sau đây là một ví dụ về luật chèn bit
Luật chèn bit (a) Chuỗi bit cần truyền (b) Chuỗi bit được truyền với S là vị trí bit chèn
Quy luật chèn bit chỉ sử dụng cho các vùng: SOF, vùng phân xử (Arbitration Field), vùng điều khiển (Control Field), vùng dữ liệu (Data Field và CRC Sequence (15 bit đầu tiên của vùng kiểm tra CRC).
Các vùng còn lại của khung dữ liệu hay khung điều khiển (như CRC delimiter, vùng ACK, EOF) được giữ cố định và không áp dụng luật chèn bit. Tương tự như vậy. khung lỗi và khung quá tải là hai loại khung có định dạng cố định và không áp dụng luật chèn bit.
4. Tỉ số bit sử dụng trên bit chèn (User-bit/ Stuff-bit)
Đầu tiên khi xem luật chèn bit, ta nghĩ rằng tỉ số “bit sử dụng / bit chèn” được ước lượng là 5:1. Nhưng thực tế trong trường hợp xấu nhất, số bit được chèn tối đa được tính toán như sau:
s_max = (n – 1) : 4 với n là số bit trong vùng được phép chèn
Ví dụ, ta tính toán trong trường hợp xấu nhất cho khung dữ liệu định dạng chuẩn:
Sau khi tính toán ta có bảng giá trị cụ thể sau (sau khi tính chỉ lấy phần nguyên):
Bảng tính số bit chèn tối đa cho khung dữ liệu định dạng chuẩn
Nguồn: icdesignvn
Bạn Có Đam Mê Với Vi Mạch hay Nhúng - Bạn Muốn Trau Dồi Thêm Kĩ Năng
Mong Muốn Có Thêm Cơ Hội Trong Công Việc
Và Trở Thành Một Người Có Giá Trị Hơn