ngochoangimsat
Administrator
Các xe hiện đại đều được tích hợp một mạng nội bộ mà nó cho phép truy cập đến hầu như mọi thành phần chính và phụ của xe - tất cả mọi thứ từ việc truyền tải đến các hệ thống giải trí và điều khiển.
Tại sao hack nó? bởi vì bạn có thể! có thể bạn muốn cài đặt một máy tính trên xe theo cách của riêng mình mà nó sẽ thay thế cho các hệ thống điều khiển hệ thống radio và điều hòa không khí. Hoặc bạn muốn làm một hệt thống mở cửa từ xa hay khởi động xe từ xa, hay sử dụng điều khiển vô lăng để điều khiển điện thoại, điều khiển máy tính bảng, điều khiển rasp-berry pi…. Tôi chắc rằng bạn có thể nghĩ về một cái gì đó.
Sau một thời gian biên soan nay tài liệu đã hoàn thiện khoảng trên 90% cháu sẽ dần dần công bố lên đây để các cụ có kinh nghiệp vấn đề này cùng nghiên cứu cho ra đời nhiều ứng dụng hay để quan lý hệ thống trên xe. Như mục tiêu ban đầu của cháu để otofun.net ngày càng trở thành một diễn đàn kỹ thuật mang tầm vóc. Đây là link file pdf của toàn bộ bài này, việc đọc file pdf sẽ có lợi thế về việc hiển thị cấu trúc code (điều mà diễn đàn đã loại bỏ khỏi trình soạn thảo): http://tranhchuthap.vn/bai-viet/canbus/Hack-CAN-BUS-Dieu-khien-volang.pdf
MỤC LỤC
Mở đầu 4
1. Kết nối phần cứng [3] 9
1.1. Các kiến thức cơ bản 9
1.2. Từng bước tiến hành công tác kết nối 11
1.2.1. Bước 1: Xác định giao thức nào được xe sử dụng 11
1.2.2. Bước 2: Kết nối vật lý 12
1.2.3. Bước 3: Các kiểm tra cơ bản đầu tiên 15
1.2.4. Bước 4: Bắt đầu hack 18
2. Xác định mã lệnh các nút điều khiển của vô lăng trên Can-Bus [4] 18
2.1. Khái quát chung 18
2.2. Các nhiệm vụ cần thực hiện 19
2.2.1. Nhiệm vụ thứ 1: Thu thập số liệu cơ bản (baseline) 19
2.2.2. Nhiệm vụ thứ 2: Lưu dữ liệu từ sự kiện/tương tác 20
2.2.3. Nhiệm vụ thứ 3: Phân tích dữ liệu 20
2.2.4. Nhiệm vụ 4: Kiểm tra giả thuyết của bạn 24
3. Giao tiếp giữa ô tô và Máy Tính thông qua OBDII bằng Python [5] 28
3.1. Các thứ cần thiết: 28
3.2. Kết nối và tương tác 28
4. Kết nối OBD-II Bluetooh đến Raspbery Pi 29
5. Đọc dữ liệu từ cổng USB Bluetooth trên RPI 34
5.1. Cài đặt gói mô đun python-serials đọc dữ liệu cổng serial 34
5.2. Mã lệnh mẫu file serialtest.py để thực hiện các câu lệnh đọc và xử lý dữ liệu 35
5.3. Chạy file lập trình python serialtest.py bên trên 36
6. Điều khiển XBMC trên Raspbery Pi bằng JSON-RPC API sử dụng Python 36
6.1. Điều khiển XBMC qua ISON-RPC bằng Python để Pause/Play VIDEO [16] 36
6.2. Điều khiển XBMC qua ISON-RPC bằng Python để Pause VIDEO [17] 37
6.3. Điều khiển vô lăng cho XBMC 39
7. Hiển thị các thông số chuẩn đoán xe lên màn hình thông qua Raspberry Pi [6] 41
7.1. Phần cứng cần thiết 41
7.2. Cài đặt phần mềm 42
7.3. Cài đặt xe 42
7.4. Data Logging 43
8 Tài liệu tham khảo 44
MỞ ĐẦU
CAN là một giao thức truyền thông nối tiếp (serial) được phát triển lần đầu tiên bởi Công ty Robert Bosch vào năm 1983 và được công nhận chính thức vào năm 1986 bởi Hội các Kỹ sư Ô tô (SAE). Năm 1991, Bosch ban hành phiên bản CAN 2.0 và sau đó 2 năm trở thành chuẩn ISO 11898. Hiện nay, hầu như tất cả các xe ô tô đều sử dụng chuẩn CAN để truyền thông giữa các bộ điều khiển. Có thể tổng hợp một số ưu điểm khi một hệ thống sử dụng CAN như sau [1,2]:
Gọn nhẹ và kinh tế hơn so với các chuẩn thông dụng. CAN là chuẩn truyền 2 dây, không đòi hỏi phải có xung đồng bộ để truyền nhận thông tin.
Phù hợp với các ứng dụng yêu cầu thời gian thực. Mạng CAN có thệ thống phân xử dựa trên ID của bản tin giúp cho việc truyền nhận tức thời của các bản tin có mức ưu tiên cao.
Tăng mức độ an toàn của hệ thống. Việc một module trong mạng CAN bị lỗi không gây ra ảnh hưởng tới các module còn lại, trừ khi hai module có liên hệ trực tiếp đến nhau và không thể hoạt động nếu thiếu một module còn lại. Đồng thời, việc thêm/bớt module trong hệ thống có thể được thực hiện ngay khi hệ thống đang làm việc mà không gặp vấn đề gì cho hệ thống điện.
Đặc trưng của CAN là phương pháp định địa chỉ và giao tiếp hướng đối tượng, trong khi hầu hết các hệ thống truyền thông khác đều giao tiếp dựa vào địa chỉ các trạm. Mỗi thông tin trao đổi trong mạng được coi như một đối tượng và được gán một mã ID. Thông tin được gửi lên bus kiểu truyền thông báo với các độ dài khác nhau. Nội dung mỗi thông báo được các trạm phân biệt qua ID được cấp. Mã ID không nói lên địa chỉ đích của thông báo mà chỉ biểu diễn ý nghĩa của dữ liệu thông báo. Vì thế, mỗi trạm trên mạng có thể tự quyết định tiếp nhận và xử lý thông báo hay không tiếp nhận thông báo qua phương thức lọc thông báo, nhờ vậy nhiều trạm có thể nhận đồng thời nhiều thông báo và có các phản ứng khác nhau.
Phiên bản điện tử của ebook này có thể tải về tại đây:
http://tranhchuthap.vn/bai-viet/canbus/Hack-CAN-BUS-Dieu-khien-volang.pdf
Luồng thảo luận trên diễn đàn về chủ đề này xem tại đây:
http://www.otofun.net/threads/860691-huong-dan-hack-he-thong-can-bus-tren-xe-toan-tap
Hoặc tại đây:
https://www.otosaigon.com/threads/hack-he-thong-canbus-tren-o-to.8665190/
Hình 1 - Ghép nối trong một mạng CAN (mỗi một node là một bộ phận của xe như DVD, động cơ, cửa sổ trời, xi nhan .v.v..)
Hình 2 – Cấu trúc của một node (thành viên) trong mạng CAN
Hình 3 – Cấu trúc một bản tin CAN
Mạng CAN sử dụng 2 dây để truyền dữ liệu gồm CAN-H (hoặc CAN-HI) và CAN-L (hoặc CAN-LO). Ở đầu và cuối hệ thống mạng, các điện trở được nối để tránh hiện tượng phản xạ tín hiệu trên đường truyền. Trong xe ô tô, các ECU được nối chung vào hệ thống mạng CAN, mỗi một ECU phải bao gồm một bộ thu nhận tín hiệu và một bộ điều khiển CAN như trong Hình 2 thể hiện. Muốn trao đổi thành công dữ liệu trên mạng CAN, các phần tử kết nối với mạng cần phải được cài đặt tốc độ giống nhau. Tốc độ cao nhất mà mạng CAN đạt được là 1Mbit/s, tuy nhiên, để đảm bảo độ ổn định, trong xe ô tô nói chung thường sử dụng tốc độ 500kbit/s.
Bản tin CAN có thể có 2 dạng (còn gọi là 2 dạng khung bản tin) gồm: dạng khung chuẩn với 11 bit dành cho ID và dạng khung mở rộng với 29 bit ID (gồm 11 bit của khung chuẩn và thêm 18 bit mở rộng). Các thành phần còn lại của 2 dạng khung là giống nhau. Về cơ bản, cấu trúc của một bản tin CAN như thể hiện trong Hình 3 gồm các thành phần sau:
• Khởi đầu khung là một bit trội và đánh dấu khởi đầu của một bản tin. Tất cả các thành phần kết nối với mạng CAN sẽ phải đồng bộ hóa dựa vào bit khởi đầu này.
• Các bit ID của bản tin, còn được gọi là các bit phân xử. Các bit ID ngoài việc được sử dụng để xác định đối tượng của bản tin, nó còn được sử dụng để xác định mức ưu tiên, quyết định quyền truy nhập bus khi có nhiều thông tin được gửi đi đồng thờ1. Vùng bit phân xử có chiều dài 12 bit với dạng khung chuẩn và 32 bit với dạng khung mở rộng, trong đó mã ID dài 11 hoặc 29 bit. Bit cuối cùng của ô phân xử là bit RTR (Remote Transmission Request), dùng để phân biệt giữa khung dữ liệu (bit trội) và khung yêu cầu dữ liệu (bit lặn).
• Vùng điều khiển dài 6 bit, trong đó 4 bit cuối mã hóa chiều dài dữ liệu.
• Vùng dữ liệu có chiều dài từ 0 đến 8 byte, trong đó mỗi byte được truyền đi theo thứ tự từ bit có trọng số cao nhất (MSB) đến bit có trọng số thấp nhất (LSB).
• Vùng kiểm soát lỗi CRC bao gồm 15 bit được thực hiện theo phương pháp CRC và 1 bit lặn phân cách. Dãy bit đầu vào để tính bao gồm bit khởi đầu khung, các bit phân xử, vùng điều khiển và vùng dữ liệu.
• Vùng xác nhậc ACK (Acknowlegment) gồm 2 bit để các thành phần trên mạng CAN thực hiện kiểm tra mã CRC.
• Kết thúc khung được đánh dấu bằng 7 bit lặn.
Hình 5 - Vùng ID được sử dụng để xác định mức ưu tiên
Trong quá trình hoạt động, nếu 2 thành phần cùng gửi bản tin lên mạng CAN tại cùng một thời điểm, bản tin nào có ID thấp hơn, bản tin đó có mức ưu tiên cao hơn và được quyền sử dụng mạng để gửi đi yêu cầu hoặc dữ liệu. Ví dụ như trong H.5, có 2 thiết bị cùng sử dụng mạng CAN tại cùng một thời điểm. Tuy nhiên, chỉ có thiết bị 1 có ID thấp hơn được sử dụng mạng còn thiết bị 2 phải tạm dừng (tại thời điểm số 3). Đây chính là ưu điểm của giao thức CAN so với các chuẩn truyền thông khác.
Tại sao hack nó? bởi vì bạn có thể! có thể bạn muốn cài đặt một máy tính trên xe theo cách của riêng mình mà nó sẽ thay thế cho các hệ thống điều khiển hệ thống radio và điều hòa không khí. Hoặc bạn muốn làm một hệt thống mở cửa từ xa hay khởi động xe từ xa, hay sử dụng điều khiển vô lăng để điều khiển điện thoại, điều khiển máy tính bảng, điều khiển rasp-berry pi…. Tôi chắc rằng bạn có thể nghĩ về một cái gì đó.
Sau một thời gian biên soan nay tài liệu đã hoàn thiện khoảng trên 90% cháu sẽ dần dần công bố lên đây để các cụ có kinh nghiệp vấn đề này cùng nghiên cứu cho ra đời nhiều ứng dụng hay để quan lý hệ thống trên xe. Như mục tiêu ban đầu của cháu để otofun.net ngày càng trở thành một diễn đàn kỹ thuật mang tầm vóc. Đây là link file pdf của toàn bộ bài này, việc đọc file pdf sẽ có lợi thế về việc hiển thị cấu trúc code (điều mà diễn đàn đã loại bỏ khỏi trình soạn thảo): http://tranhchuthap.vn/bai-viet/canbus/Hack-CAN-BUS-Dieu-khien-volang.pdf
MỤC LỤC
Mở đầu 4
1. Kết nối phần cứng [3] 9
1.1. Các kiến thức cơ bản 9
1.2. Từng bước tiến hành công tác kết nối 11
1.2.1. Bước 1: Xác định giao thức nào được xe sử dụng 11
1.2.2. Bước 2: Kết nối vật lý 12
1.2.3. Bước 3: Các kiểm tra cơ bản đầu tiên 15
1.2.4. Bước 4: Bắt đầu hack 18
2. Xác định mã lệnh các nút điều khiển của vô lăng trên Can-Bus [4] 18
2.1. Khái quát chung 18
2.2. Các nhiệm vụ cần thực hiện 19
2.2.1. Nhiệm vụ thứ 1: Thu thập số liệu cơ bản (baseline) 19
2.2.2. Nhiệm vụ thứ 2: Lưu dữ liệu từ sự kiện/tương tác 20
2.2.3. Nhiệm vụ thứ 3: Phân tích dữ liệu 20
2.2.4. Nhiệm vụ 4: Kiểm tra giả thuyết của bạn 24
3. Giao tiếp giữa ô tô và Máy Tính thông qua OBDII bằng Python [5] 28
3.1. Các thứ cần thiết: 28
3.2. Kết nối và tương tác 28
4. Kết nối OBD-II Bluetooh đến Raspbery Pi 29
5. Đọc dữ liệu từ cổng USB Bluetooth trên RPI 34
5.1. Cài đặt gói mô đun python-serials đọc dữ liệu cổng serial 34
5.2. Mã lệnh mẫu file serialtest.py để thực hiện các câu lệnh đọc và xử lý dữ liệu 35
5.3. Chạy file lập trình python serialtest.py bên trên 36
6. Điều khiển XBMC trên Raspbery Pi bằng JSON-RPC API sử dụng Python 36
6.1. Điều khiển XBMC qua ISON-RPC bằng Python để Pause/Play VIDEO [16] 36
6.2. Điều khiển XBMC qua ISON-RPC bằng Python để Pause VIDEO [17] 37
6.3. Điều khiển vô lăng cho XBMC 39
7. Hiển thị các thông số chuẩn đoán xe lên màn hình thông qua Raspberry Pi [6] 41
7.1. Phần cứng cần thiết 41
7.2. Cài đặt phần mềm 42
7.3. Cài đặt xe 42
7.4. Data Logging 43
8 Tài liệu tham khảo 44
MỞ ĐẦU
CAN là một giao thức truyền thông nối tiếp (serial) được phát triển lần đầu tiên bởi Công ty Robert Bosch vào năm 1983 và được công nhận chính thức vào năm 1986 bởi Hội các Kỹ sư Ô tô (SAE). Năm 1991, Bosch ban hành phiên bản CAN 2.0 và sau đó 2 năm trở thành chuẩn ISO 11898. Hiện nay, hầu như tất cả các xe ô tô đều sử dụng chuẩn CAN để truyền thông giữa các bộ điều khiển. Có thể tổng hợp một số ưu điểm khi một hệ thống sử dụng CAN như sau [1,2]:
Gọn nhẹ và kinh tế hơn so với các chuẩn thông dụng. CAN là chuẩn truyền 2 dây, không đòi hỏi phải có xung đồng bộ để truyền nhận thông tin.
Phù hợp với các ứng dụng yêu cầu thời gian thực. Mạng CAN có thệ thống phân xử dựa trên ID của bản tin giúp cho việc truyền nhận tức thời của các bản tin có mức ưu tiên cao.
Tăng mức độ an toàn của hệ thống. Việc một module trong mạng CAN bị lỗi không gây ra ảnh hưởng tới các module còn lại, trừ khi hai module có liên hệ trực tiếp đến nhau và không thể hoạt động nếu thiếu một module còn lại. Đồng thời, việc thêm/bớt module trong hệ thống có thể được thực hiện ngay khi hệ thống đang làm việc mà không gặp vấn đề gì cho hệ thống điện.
Đặc trưng của CAN là phương pháp định địa chỉ và giao tiếp hướng đối tượng, trong khi hầu hết các hệ thống truyền thông khác đều giao tiếp dựa vào địa chỉ các trạm. Mỗi thông tin trao đổi trong mạng được coi như một đối tượng và được gán một mã ID. Thông tin được gửi lên bus kiểu truyền thông báo với các độ dài khác nhau. Nội dung mỗi thông báo được các trạm phân biệt qua ID được cấp. Mã ID không nói lên địa chỉ đích của thông báo mà chỉ biểu diễn ý nghĩa của dữ liệu thông báo. Vì thế, mỗi trạm trên mạng có thể tự quyết định tiếp nhận và xử lý thông báo hay không tiếp nhận thông báo qua phương thức lọc thông báo, nhờ vậy nhiều trạm có thể nhận đồng thời nhiều thông báo và có các phản ứng khác nhau.
Phiên bản điện tử của ebook này có thể tải về tại đây:
http://tranhchuthap.vn/bai-viet/canbus/Hack-CAN-BUS-Dieu-khien-volang.pdf
Luồng thảo luận trên diễn đàn về chủ đề này xem tại đây:
http://www.otofun.net/threads/860691-huong-dan-hack-he-thong-can-bus-tren-xe-toan-tap
Hoặc tại đây:
https://www.otosaigon.com/threads/hack-he-thong-canbus-tren-o-to.8665190/

Hình 1 - Ghép nối trong một mạng CAN (mỗi một node là một bộ phận của xe như DVD, động cơ, cửa sổ trời, xi nhan .v.v..)

Hình 2 – Cấu trúc của một node (thành viên) trong mạng CAN

Hình 3 – Cấu trúc một bản tin CAN
Mạng CAN sử dụng 2 dây để truyền dữ liệu gồm CAN-H (hoặc CAN-HI) và CAN-L (hoặc CAN-LO). Ở đầu và cuối hệ thống mạng, các điện trở được nối để tránh hiện tượng phản xạ tín hiệu trên đường truyền. Trong xe ô tô, các ECU được nối chung vào hệ thống mạng CAN, mỗi một ECU phải bao gồm một bộ thu nhận tín hiệu và một bộ điều khiển CAN như trong Hình 2 thể hiện. Muốn trao đổi thành công dữ liệu trên mạng CAN, các phần tử kết nối với mạng cần phải được cài đặt tốc độ giống nhau. Tốc độ cao nhất mà mạng CAN đạt được là 1Mbit/s, tuy nhiên, để đảm bảo độ ổn định, trong xe ô tô nói chung thường sử dụng tốc độ 500kbit/s.
Bản tin CAN có thể có 2 dạng (còn gọi là 2 dạng khung bản tin) gồm: dạng khung chuẩn với 11 bit dành cho ID và dạng khung mở rộng với 29 bit ID (gồm 11 bit của khung chuẩn và thêm 18 bit mở rộng). Các thành phần còn lại của 2 dạng khung là giống nhau. Về cơ bản, cấu trúc của một bản tin CAN như thể hiện trong Hình 3 gồm các thành phần sau:
• Khởi đầu khung là một bit trội và đánh dấu khởi đầu của một bản tin. Tất cả các thành phần kết nối với mạng CAN sẽ phải đồng bộ hóa dựa vào bit khởi đầu này.
• Các bit ID của bản tin, còn được gọi là các bit phân xử. Các bit ID ngoài việc được sử dụng để xác định đối tượng của bản tin, nó còn được sử dụng để xác định mức ưu tiên, quyết định quyền truy nhập bus khi có nhiều thông tin được gửi đi đồng thờ1. Vùng bit phân xử có chiều dài 12 bit với dạng khung chuẩn và 32 bit với dạng khung mở rộng, trong đó mã ID dài 11 hoặc 29 bit. Bit cuối cùng của ô phân xử là bit RTR (Remote Transmission Request), dùng để phân biệt giữa khung dữ liệu (bit trội) và khung yêu cầu dữ liệu (bit lặn).
• Vùng điều khiển dài 6 bit, trong đó 4 bit cuối mã hóa chiều dài dữ liệu.
• Vùng dữ liệu có chiều dài từ 0 đến 8 byte, trong đó mỗi byte được truyền đi theo thứ tự từ bit có trọng số cao nhất (MSB) đến bit có trọng số thấp nhất (LSB).
• Vùng kiểm soát lỗi CRC bao gồm 15 bit được thực hiện theo phương pháp CRC và 1 bit lặn phân cách. Dãy bit đầu vào để tính bao gồm bit khởi đầu khung, các bit phân xử, vùng điều khiển và vùng dữ liệu.
• Vùng xác nhậc ACK (Acknowlegment) gồm 2 bit để các thành phần trên mạng CAN thực hiện kiểm tra mã CRC.
• Kết thúc khung được đánh dấu bằng 7 bit lặn.

Hình 5 - Vùng ID được sử dụng để xác định mức ưu tiên
Trong quá trình hoạt động, nếu 2 thành phần cùng gửi bản tin lên mạng CAN tại cùng một thời điểm, bản tin nào có ID thấp hơn, bản tin đó có mức ưu tiên cao hơn và được quyền sử dụng mạng để gửi đi yêu cầu hoặc dữ liệu. Ví dụ như trong H.5, có 2 thiết bị cùng sử dụng mạng CAN tại cùng một thời điểm. Tuy nhiên, chỉ có thiết bị 1 có ID thấp hơn được sử dụng mạng còn thiết bị 2 phải tạm dừng (tại thời điểm số 3). Đây chính là ưu điểm của giao thức CAN so với các chuẩn truyền thông khác.
Sửa lần cuối: