Nhúng với Elliot: Lin dành cho tin tặc

Một chiếc ô tô là một đống hàng trăm vi điều khiển những ngày này – chỉ cần hỏi bất kỳ thợ máy Greybeard nào và anh ta sẽ bắt đầu “bộ chế hòa khí” của mình. Tất cả các hệ thống và hệ thống phụ này cần phải nói chuyện với nhau trong môi trường thù địch điện, và nó không phải là một sự cường điệu để nói rằng thông tin sai lệch, hoặc thậm chí có liên lạc chậm trễ, có thể có hậu quả lớn. Mạng trong xe là kinh doanh lớn. Sản xuất hàng loạt ô tô làm cho nhiều IC thu phát có liên quan đến chi phí thấp cho hacker phần cứng không ô tô. Vậy tại sao chúng ta không thấy nhiều dự án hacker hơn để tận dụng cơ sở tài nguyên đáng chú ý này?

Xương sống của mạng của một chiếc xe là mạng khu vực bộ điều khiển (có thể). Bản đồ [Eric Yetchick] của Hackaday là một hacker Car EXTRODINAIRE, và đã viết nhiều thứ mà mọi thứ bạn muốn biết về xe buýt có thể trong một loạt nhiều phần mà bạn chắc chắn muốn đánh dấu để đọc sau. Động cơ, phanh, cửa và tất cả các đánh giá dữ liệu thiết bị (vi sai) có thể. Đó là độ tin cậy nhanh và cao. Nó cũng phức tạp và hơi tốn kém để thực hiện.

Vào cuối năm 1990, nhiều nhà sản xuất có các giao thức xe buýt độc quyền của riêng họ chạy cùng với các phần không quan trọng của mạng ô tô: cách một bàn điều khiển gắn cửa nói chuyện với chuauffeur khóa cửa và động cơ cửa sổ, ví dụ. Nó không đáng lộn xộn lên xe buýt chính có thể với các thông tin liên lạc không quan trọng và địa phương như thế, vì vậy các mạng phụ đã được quay ra khỏi khả năng chính. Chúng không cần đảm bảo tốc độ hoặc độ tin cậy của mạng chính và vì lý do chi phí mà họ phải dễ thực hiện. Các vi điều khiển nhỏ nhất nên đủ để cuộn một cửa sổ lên xuống, phải không?

Vào đầu những năm 2000, thông số kỹ thuật của mạng kết nối cục bộ (LIN) được chuẩn hóa một phương thức này cho các mạng phụ này, tập trung vào chi phí thực hiện thấp, tốc độ trung bình, cấu hình lại và hành vi có thể dự đoán được để liên lạc giữa một vi điều khiển chính và một số ít nô lệ một cụm. Giá rẻ, đơn giản, có thể thực hiện trên vi điều khiển nhỏ, và chỉ tốt nhất cho các dự án quy mô trung bình? Một giấc mơ của hacker! Tại sao bạn không sử dụng LIN trong các dự án đa vi mô của mình? Hãy đào vào và bạn có thể thấy nếu có bất kỳ điều này hữu ích cho bạn.

Giao thức lin.

Một cụm “Lin”, đó là những gì Mạng nhỏ cục bộ được gọi trong biệt ngữ, bao gồm một vi điều khiển chính và một số nô lệ. Lin bắt đầu như nối tiếp 8N1 UART thông thường, thường ở mức 19.200 baud, và đi với một dây. Tiếp theo, nó thêm một giao thức cho phép một dây duy nhất này được sử dụng làm bus, được chia sẻ giữa nhiều nô lệ. Nếu bạn đã cố gắng tung ra giao thức mạng của riêng mình để dễ dàng giao tiếp nối tiếp UART, bạn sẽ kết thúc với một cái gì đó như Lin. Đi tìm nạp một bản sao của thông số kỹ thuật (PDF) và đọc cùng!

Mỗi giao dịch LIN về cơ bản giống nhau: Master gửi tiêu đề bao gồm mã định danh được bảo vệ (PID), chỉ định tác vụ được thực hiện. Nhiệm vụ có thể giống như “cảm biến nhiệt độ báo cáo” hoặc “đặt vị trí servo 3”. Tùy thuộc vào nhiệm vụ, từ một đến tám byte dữ liệu theo dõi, với tổng kiểm tra hai byte. Các nô lệ phải biết những nhiệm vụ nào để đáp ứng và làm thế nào để đáp ứng. Vì vậy, nếu “đặt vị trí servo 3” được gửi, nô lệ servo 3 cần lắng nghe các byte tiếp theo và phản ứng tương ứng. Tất cả các nô lệ không phản hồi lệnh có thể coi thường dữ liệu cho đến khi tiếp theo.

Trong trường hợp “Cảm biến nhiệt độ báo cáo 2”, nô lệ với cảm biến nhiệt độ sẽ gửi dữ liệu của nó ngay sau khi nhận được lệnh. Vì chiều dài byte được biết trước, và chỉ có cảm biến 2 được phép đáp ứng với tác vụ này, Master biết chính xác, giả sử, bốn byte phản ứng và biết cách dùng.

Hệ thống bỏ phiếu này với các tiêu đề gửi chủ và các phản ứng gửi nô lệ đảm bảo rằng không có thiết bị nào sẽ truy cập vào xe buýt cùng một lúc, vì vậy Lin chỉ bằng một dòng RX / TX duy nhất. Lời mở đầu bao gồm một byte đồng bộ (0x55) giúp các nô lệ khóa vào đồng hồ chính, vì vậy các nô lệ có thể chạy trên các nguồn đồng hồ RC ít tốn kém hơn và có thể tự động bauding.

Vì độ dài của tin nhắn được biết trước thời hạn, thời gian cho thói quen bỏ phiếu của Sư phụ có thể được ghi lại trong một lịch trình. Master thăm dò mạng theo các khoảng thời gian xác định và nếu SLAVE không phản hồi trong vòng 1,4 lần thời gian cần thiết cho giao dịch, được coi là thiếu trong hành động. Dù bằng cách nào, Master được chuyển sang mục tiếp theo trong lịch trình của nó và sẽ không thử lại nô lệ có khả năng bị lỗi cho đến khi đến lượt nó trở lại. Điều này đảm bảo một tỷ lệ cập nhật đã biết cho tất cả các thiết bị, khiến cuộc sống đơn giản hơn rất nhiều để lập trình bậc thầy.

Đó là những điều cơ bản. Master gửi PIDS và một loạt các byte dữ liệu theo sau. Mọi thứ đều thoải mái UART cũ, gọi và phản hồi, thích nghi đơn giản nhất có thể để tạo một mạng nhỏ.

Extras.

Ứng dụng Cấu hình GUI Lin từ một VI hướng dẫndeo.
Giữ mạng dễ dàng yêu cầu Master và Slaves đều đồng ý về bộ lệnh và độ dài phản ứng hợp lệ. Đó là rất nhiều thông tin cần thiết cho cụm LIN để hoạt động, về nguyên tắc. Giúp đỡ vấn đề hơi, có một định dạng thông thường để chú ý tất cả những điều này được đặt ra trong thông số kỹ thuật của Lin.

Ngoài ra còn có một API thông thường cho C mà cả vi điều khiển Master và Slave có thể sử dụng để xử lý mã hóa hành vi trong cụm LIN. Kết hợp, điều này tạo ra một quy trình công việc thông thường để chỉ định và triển khai Lin Buss – rất hữu ích cho các nhà sản xuất ô tô, và không vô dụng đối với tin tặc.

Ngoài ra còn có một trạng thái ngủ và hành vi được xác định cho xe buýt, với tín hiệu ngủ và thức tỉnh liên quan. Tất cả các nô lệ phải trả lời tín hiệu ngủ và bất kỳ ai trong số họ nên tự động đi ngủ sau thời gian chờ bốn giây nếu họ không nghe thấy từ chủ. Bất kỳ nút, nô lệ hoặc chủ, có thể gửi lệnh WakeUp và sau đó Master nên quay lại lịch kiểm phiếu bình thường của nó.

Lin phiên bản 2.0 bao gồm một số loại khung hình tùy chọn làm cho mạng linh hoạt hơn nhiều. Đặc biệt, “Khung lẻ tẻ” làm cho phản ứng của nô lệ tùy chọn nếu nó không nhận được bất kỳ dữ liệu mới nào vì bản cập nhật cuối cùng. “Sự kiện kích hoạt khung” giống như các khung lẻ tẻ, ngoại trừ chúng có thể được trả lời thêm bởi bất kỳ nút nô lệ nào có dữ liệu mới.

Điều này giới thiệu khả năng va chạm trên xe buýt, trong trường hợp đó hy vọng tổng kiểm tra không tăng lên và bậc thầy rơi trở lại các khung cụ thể của nô lệ như trước đây. Hai chế độ này tăng tốc lên xe buýt khi các bản cập nhật dữ liệu không thường xuyên, nhưng hãy thêm một số tính năng xác thực vào lịch trình và độ phức tạp có điều kiện vào mã. Chỉ sử dụng chúng nếu bạn cần chúng.

Master cũng có thể có nhiều lịch trình và chuyển đổi giữa chúng. Những nô lệ không quan tâm – họ chỉ lắng nghe những nhiệm vụ có liên quan đến họ. Không có lý do gì để chủ để gửi dữ liệu vị trí servo mỗi kỳ nếu nó không thay đổi, ví dụ, ngay cả khi nó làm cho mọi thứ trở nên đơn giản về mặt khái niệm. Cuộc gọi của bạn.

Thậm chí còn có một thông số lớp mang tùy chọn tương thích với bus có thể và giúp nó đơn giản hơn để tích hợp cụm LIN cục bộ với mạng lớn hơn. Nói tóm lại, Lin là một suy nghĩ rất kỹ lưỡng thông qua giao thức xe buýt UART với việc áp dụng công nghiệp tốt. Bạn sẽ tìm thấy hướng dẫn tốt từ mỗi nhà cung cấp phần cứng thu phát Lin. (Đây là một phần giới thiệu tuyệt vời từ các công cụ quốc gia.)

Phần cứng – lớp vật lý

Topping tất cả sự khác biệt về giao thức này là một loạt các chip thu phát lin khác nhau dao động từ 0,25 đô la đến 0,5 đô la cho bộ thu phát đơn giản, trên tới xung quanh một hoặc hai cho chip “cơ sở hệ thống” với các bộ điều chỉnh điện áp tích hợp. Chúng đặc biệt trơn, vì bộ thu phát có thể chăm sóc logic ngủ / đánh thức và bật và tắt nguồn điện cho vi điều khiển của bạn. Điều này làm cho việc tích hợp một nút nô lệ hoạt động ở mức 3,3 V rất đơn giản.

Chip nhỏ mua cho bạn rất nhiều.
Kể từ khi xe buýt LIN được phát triển cho ô tô, nó thường được chỉ định cho 12 V vì đó là những khóa học thông qua các tĩnh mạch dây nịt của chiếc xe của bạn. Phần cứng thu phát Lin cần có khả năng chứa các điện áp cao hơn, vì hệ thống điện ô tô có thể là môi trường nhọn. Họ cũng phải đối phó với tranh chấp xe buýt, khi chip thu phát có thể đang cố gắng kéo dòng Lin xuống trong khi người khác đang cố gắng kéo nó lên, do đó cũng có sự bảo vệ quá nóng được tích hợp. Bộ thu phát Lin là những con thú nhỏ mạnh mẽ.

Ngược lại với các dòng I2C, được kéo lên với các điện trở Puny, một chiếc xe buýt Lin ô tô được kéo lên đến 12 V với điện trở 1 kω. Để kéo dòng này đủ nhanh, bộ thu phát Lin cần có khả năng tiến hành hàng chục milliamps, vì vậy chúng có bóng bán dẫn hơi (đối với ICS) được tích hợp. Sự kết hợp của điện áp cao và dòng dòng tương đối cao ngụ ý rằng một thông số ô tô Xe buýt Lin là tốt cho 40 mét, thay vì vài mét mà I2C cung cấp cho bạn mà không cần dùng đến các trình điều khiển. Nếu bạn cần khoảng cách hoặc khả năng miễn dịch tiếng ồn, Lin có sẵn cho bạn.

Nhưng không có gì buộc bạn phải chạy xe buýt của bạn ở 12 V, ngay cả phần cứng thu phát. Các bộ thu phát vi mạch mà tôi đã thấy chạy xuống 5,5 V, trong khi những người từ NXP và Melexis chạy xuống tại 5 V. tương thích với Arduino.

Và không có gì buộc bạn phải sử dụng phần cứng thu phát! Bạn chỉ cần kết nối một bóng bán dẫn PNP (hoặc MOSFET P-channel) đến đường bus và lái xe với UART TX, lấy mẫu bus bằng dòng RX. Điều này có nhược điểm của tiếng vang địa phương, nhưng điều đó có thể được xử lý trong phần mềm. Hoặc, chỉ với một vài phần hơn nhiều, có dịch vụ này mà chúng ta đã thấy trước đây. Tôi không thể tìm thấy bất kỳ dự án hacker nào triển khai các bộ thu phát lin từ đầu. Có lẽ đó là vì những công nghiệp chỉ rất rẻ.

Điểm mạnh và điểm yếu

Không có xe buýt là lý tưởng cho tất cả các dịp, và lin cũng không ngoại lệ. Lin không đặc biệt nhanh, được phát triển khoảng 19.200 baud uarT. Cập nhật khá không thường xuyên, từ quan điểm của vi điều khiển. Giao dịch đầy đủ, với thời gian chờ, mất khoảng mười mili giây. Nếu Master Polls mười sáu thiết bị, đó là tỷ lệ cập nhật khoảng bảy trường hợp xấu nhất của Hertz. Tất nhiên, chủ nhân không cần phải thăm dò mọi thiết bị mỗi lần và nhiều lần các thông điệp sẽ có độ dài một nửa, nhưng bạn sẽ không nhận được nhiều hơn 200 Hz. Mặt khác, tỷ lệ cập nhật là không đổi do khả năng thực hiện thời gian chờ chặt chẽ cho các thiết bị flaky, rất tuyệt vời về độ tin cậy và sự đơn giản, và nó không chậm hơn nhiều so với I2C.

Có hai phiên bản chính của LIN mà bạn sẽ thấy trong tự nhiên, 1.x và 2.x. Ngoài các loại khung tùy chọn được thảo luận ở trên, hai phiên bản có các công thức kiểm tra khác nhau – và một trong 2.x thực sự rất kỳ lạ – đòi hỏi một máy tính dựa trên web để đảm bảo bạn đang làm đúng. Thay vì bổ sung MOD-256, chúng sẽ trừ đi 255 từ bất kỳ giá trị nào 256 trở lên. Nó giống như một dòng tràn 8 bit bao bọc xung quanh 1 thay vì 0. Điều này có ý nghĩa với bất kỳ ai trong số bạn?

Các thiết bị Lin không phổ biến bên ngoài ngành công nghiệp ô tô là I2C hoặc SPI, bởi một cú sút xa, vì vậy có lẽ bạn chưa bao giờ bị buộc phải đối phó với giao thức. Nhưng nếu bạn muốn kết nối một số lượng nhỏ các mô-đun dựa trên vi điều khiển, dễ dàng và rẻ nhất có thể, chỉ sử dụng một dây (cộng với mặt đất), thật khó để nghĩ bất cứ thứ gì dễ dàng hơn. Viết mã nô lệ I2C chắc chắn không có dã ngoại. Viết mã để nghe một byte cụ thể trên dòng UART và sau đó phản ứng không thể đơn giản hơn.

Bạn muốn biến UART vani trơn của bạn thành xe buýt? Lấy một trang hoặc hai trong cuốn sách Lin! bạn đã làm như vậy chưa? cho chúng tôi xem!

Leave a Reply

Your email address will not be published. Required fields are marked *

Previous post SENSE ALL THE things WITH A synthetic SENSOR
Next post Liên kết Hackaday: Chủ nhật, ngày 12 tháng 5 năm 2013