Truyền dữ liệu qua CAN(Controller Area Network)

Một phần của tài liệu Lập trình ARM của Ngô Vinh (Trang 85 - 92)

Trang 86

- Các biến thể của LPC có thể có 4 bộ điều khiển can độc lập trên board.

Giao thức CAN (Controller Area Network) đƣợc phát triển bởi Robert Bosch cho mạng tự động (Automotive Networking) vào năm 1982. Trải qua 22 năm sau, CAN trở thành một chuẩn cho mạng tự động và trở lên hấp dẫn đối với các hệ thống không tự động mà muốn yêu cầu một số nút đƣợc nhúng vào. CAN có những đặc tính hấp dẫn đối với những ngƣời phát triển hệ nhúng. Nó có chi phí thấp, dễ hiện thực hóa, các mạng ngang hàng với đặc tính kiểm tra lỗi mạnh và tốc độ truyền cao, hàng Mbit/s. Mỗi gói CAN khá nhỏ và có thể giữ một khối lƣợng cực đại là 8 byte dữ liệu. Do đó, CAN rất phù hợp với các mạng nhúng nhỏ để truyền một lƣợng dữ liệu nhỏ giữa các nút một cách tin cậy.

Thiết kế node CAN:

Một nút CAN điển hình đƣợc thiết kế nhƣ sau:

Hình 3.33. Cấu trúc CAN

- Một đặc tính quan trọng khi thiết kế CAN là bộ điều kiển CAN có đƣờng truyền và nhận dữ liệu riêng biệt và từ thiết bị vật lý. Bởi vậy một nút đang ghi dữ liệu lên bus, đồng thời cũng lắng nghe phản hồi trên bus. Do vậy cần có cơ chế phân xử và phát hiện lỗi trên bus.

Hai mức logic đƣợc ghi lên 2 cặp cáp nhƣ hình dƣới, hai mức logic 0 thể hiện trạng thái rỗi của bus.

Trang 87 Hình 3.34.

Cấu trúc một thông điệp CAN:

Hình 3.35. Cấu trúc thông điệp CAN

Các bít định danh dùng để dịnh danh gói tin: theo chuẩn 20A có 11 bít định danh, 20B thụ động thì có bít định danh và 20B chủ động có 29 bít định danh.

RTR luôn bằng 0.

Bít DLC chứa độ dài dữ liệu Bít CRC chứa mã lỗi khi truyền Bít ACK: cho phép chấp nhận gói tin

Để truyền một thông điệp CAN, Bộ điều khiển CAN có một tập các thanh ghi điều khiển và thanh ghi trạng thái nhƣ sau:

Trang 88

Hình 3.36 Các thanh ghi bộ điều khiển CAN

Tốc độ truyền tính theo công thức: Tốc độ baund=PCLK/(RBRx(1+Tseg1+Tseg2)) Với RBR là tốc đô prescaler.

Trang 89

Đoạn chƣơng trình sau mô tả khởi tạo CAN và truyền thông điệp: C2MOD = 0x00000001; //Khoi dong bo dieu khien CAN C2BTR = 0x001C001D; //thiet lap bi Timing la 125k C2MOD = 0x00000000; //dung bo dieu khie CAN if(C2SR & 0x00000004) //neu bo dem Tx Buffer 1 rong {

C2TFI1 = 0x00040000; //thiet lap DLC la 4 byte

C2TID1 = 0x00000022; //dia chi Standard Frame la 0x22 C2TDA1 = NetworkData; //copy du lieu vao 4 byte dau tien C2CMR = 0x00000001; //truyen thong diep

}

Trang 90

Cấu trúc vùng đệm nhận dữ liệu

Hình 3.37. Các thanh ghi dùng khi nhận dữ liệu từ CAN

int main(void) {

VPBDIV = 0x00000001; //thiet lap PClk la 60MHz IODIR1 = 0x00FF0000; // thiet lap cac chan ra

PINSEL1|= 0x00040000; //cho phep chan 0.25 la CAN1 RX C1MOD = 0x00000001; //reset CAN

C1BTR = 0x001C001D; //thiet lap bit Timing la 125k C1IER =0x00000001; //cho phep nhan ngat

Trang 91 (adsbygoogle = window.adsbygoogle || []).push({});

VICVectCntl0 = 0x0000003A; //chon thu tu uu tien ngat VICVectAddr0 = (unsigned)CAN1IRQ; //lay dia chi ngat IRQ //into the VIC slot

VICIntEnable = 0x04000000; //cho phep ngat AFMR = 0x00000001; //Cam bo loc

C1MOD = 0x00000000; //ket thuc CAM while(1){;}

Trang 92

TÀI LIỆU THAM KHẢO

[1]. Philips (2005), The insider‟s guide to the Philips ARM7 based microcontroller. [2]. Jean J. Labrosse (2000), Embbeded System Building Block Second Edition:

Commplete and ready to use in module C, R&D Books

Một phần của tài liệu Lập trình ARM của Ngô Vinh (Trang 85 - 92)