Em có thể tổng kết lại 1 cách cơ bản mối liên hệ giữa identifier, mask, và filter nhé. Các bác xem có gì sai xót thì sửa cho em. Em tham khảo tài liệu của dsPIC33F
identifier: có 2 loại là standard và extend (ở trong message của CAN bus)
mask : có 3 thằng mask được cấu hình bởi C1RXMiSID với standard và C1RXMiEID với extend (i =0,1,2)
filter: Có 16 thằng filter .Mỗi thằng filter gồm 2 thanh ghi cho standard id và extend id
C1RXFiSID,C1RXFiSED với i từ 0 đến 15,
Ví dụ:
- Về cơ bản truyển nhận CAN:
Node truyền gửi bản tin với 11 bít standard id (29 với extend). Các node nhận bóc lấy 11 bít này, so sánh từng bít với filter...Tại vị trí bít đó mà mask bằng 1, nếu bít của filter bằng bít của gói tin đuợc gửi đến...accepts, còn ko thì reject. Nếu mask = 0, thì accept tất mà không phụ thuộc vào filter của node nhận hay id của message tới. Phần này em đọc ở chỗ Mask truth table
- Cấu hình thằng nhận:
+ b1: Chọn mask (3 thằng) nào cho thằng filter nào (15 thằng). Gồm 2 thanh C1FMSKSEL1,C1FMSKSEL2
Code:
C1FMSKSEL1bits.F0MSK=0x0; //mask 0 cho filter 0
// =0x1 thì là mask 1, 0x2 thì là mask2,0x3 là mask3
// FiMSK gồm 2 bít, F1MSK là cấu hình mask cho thằng filter1
+ b2: thiết lập giá trị cho mask
Code:
C1RXM0SIDbits.SID = 0x7FF;//cấu hình mask0 cho standard id
+ B3: thiết lập giá trị cho filter
Code:
C1RXF0SIDbits.SID = 0x01D0; //cấu hình filter0 cho standard id
Còn lại những thứ khác như: chỉ nhận standard id hay chỉ nhận extend id, nguồn dao động ở đâu Fcy hay Fosc, các mode hoạt động ...
Khi truyền ECAN: Làm thế nào để biết đường truyền rỗi?
Nếu em muốn test ECAN của dsPIC33, em nối như sau : dspic33 ->mcp2551, đấu đường CAN_L và CAN_H với nhau, rồi xét ở mode normal hoặc loopback, thì có được không?