Bus nối tiếp nhúng phổ biến nhất là gì? [đóng cửa]


8

Tôi đang thiết kế một thiết bị nhúng mà tôi muốn làm cho có thể tương tác với các thiết bị ngoại vi của bên thứ ba thông qua một chiếc xe buýt nối tiếp. Tôi nên chọn SPI, I²C, hoặc một số xe buýt khác?

Các thiết bị ngoại vi sẽ có băng thông khá thấp (một số cảm biến giao tiếp qua xe buýt, được thăm dò định kỳ) và rất có thể trong phạm vi một mét hoặc ít hơn của bộ điều khiển. Nhiệm vụ duy nhất của bộ điều khiển là thu thập dữ liệu cảm biến, đóng gói theo một cách nào đó và sau đó gửi nó đến một mô-đun không dây thông qua một bus khác (mặc dù bus cảm biến cũng có khả năng được sử dụng lại cho việc này).


3
Nó phụ thuộc vào thiết bị ngoại vi nào bạn muốn tương tác với, ở điện áp nào, ở tốc độ nào và ở khoảng cách nào.
Toby Jaffey

1
Tôi đã thêm chi tiết cho câu hỏi
pfyon

1
Tôi không thể tin rằng UART đã không được đề cập ở tất cả ... Tôi chỉ nói.
Abbeyatcu

Chỉnh sửa nếu tôi sai, nhưng tôi không nghĩ UART là xe buýt. Tôi nghĩ rằng đó chỉ là giao tiếp nối tiếp giữa hai thiết bị.
pfyon

Vì vậy, một chiếc xe buýt không cho giao tiếp nối tiếp giữa hai thiết bị? Bạn đang giảm giá vì đôi khi nó chỉ được sử dụng điểm-điểm? PCIe, SATA, HT đều nói chung là điểm-điểm. Bất kể, hầu hết các thiết bị ngoại vi UART có thể được sử dụng cho RS-422, RS-485 hoặc LIN là đa thả.
Nick T

Câu trả lời:


12

Nếu bạn không chắc chắn và yêu cầu của bạn khá mơ hồ, tôi sẽ chọn I²C.

Sự khác biệt chính giữa SPI và I²C là SPI yêu cầu một dòng chọn chip cho mọi thiết bị ngoại vi. I²C phát một địa chỉ ngoại vi khi bắt đầu giao tiếp, vì vậy nó không cần các dòng chọn chip. Các dòng chọn chip trở nên cồng kềnh sau vài lần đầu tiên.

Mặt khác, SPI có lẽ dễ thực hiện và gỡ lỗi hơn. Nó có thể là người chiến thắng nếu bạn chỉ muốn kết nối với một vài thiết bị.

Tôi sẽ loại trừ USB trừ khi bạn cần tốc độ dữ liệu cao trên khoảng cách tương đối dài (m chứ không phải cm). Tôi cũng sẽ loại trừ RS-232 trừ khi nó vẫn còn 1976 và các thiết bị ngoại vi của bạn cần tín hiệu lớn để phân biệt một chút với nhiễu.

Bạn có thể xem xét Dallas 1 dây, nhưng tôi nghi ngờ nó không phổ biến như I²C và xe buýt "1 dây" cần 2 dây để hoạt động luôn có vẻ hơi tanh.


1
Tôi nghĩ rằng nếu bạn có một bộ điều khiển rất đơn giản và bạn cần sử dụng bit-banging (về cơ bản là vận hành đồng hồ thủ công) thì việc thực hiện SPI trên 4 cổng GPIO còn lại sẽ dễ dàng hơn nhiều.
Simons Wons

1
Tôi nghĩ rằng bạn đúng về việc bitbang SPI dễ dàng hơn I2C. Tôi hy vọng nó sẽ không đi xuống để đập.
pfyon

3
+1 cho tính chất tanh của hệ thống 2 dây được bán trên thị trường là "1 dây".
semaj

Và để làm cho nó tồi tệ hơn, nhiều chip thực hiện hệ thống 1 dây (+ mặt đất) yêu cầu pin thứ ba - Vcc - vì chúng không thể hoạt động bằng năng lượng ký sinh! Khi tôi nghĩ về xe buýt 1 dây, tôi đang tưởng tượng một số thiết lập được ghép nối điện dung, với bộ chỉnh lưu cầu giới hạn hiện tại và một số mã dòng tự đồng hồ; không phải 2 hoặc 3 dây.
Kevin Vermeer

"1 dây" nên được gọi là "1 dây dữ liệu", vì đó là nhiều hơn nó là. Các dây phụ là GND và (đôi khi) là một đường dây điện ổn định.
Johan

3

Vì bạn nói rằng nó sẽ có băng thông thấp, tôi sẽ phân bổ đủ IO ​​để xử lý cả SPI và I2C. Tôi cũng có thể nếu có thêm các dòng CS để bạn có thể chạy nhiều thiết bị SPI. Cũng đừng quên nhìn vào cách bạn sẽ cung cấp năng lượng cho thiết bị ngoại vi. Nếu bạn sắp hết pin để có tuổi thọ tối đa, bạn cần đặt thiết bị ở chế độ năng lượng thấp hoặc rút điện khi không sử dụng. Cũng sử dụng mô-đun bộ điều khiển nối tiếp của bạn nếu có thể nhiều bộ điều khiển sẽ chuyển đổi SPI, I2C và nối tiếp. Nếu bạn có thể và tách không dây khỏi cảm biến, điều này giúp tắt thiết bị dễ dàng hơn khi không sử dụng. Ngoài ra, một số cảm biến có một dòng sẽ báo cho bộ điều khiển khi chúng cần được bảo trì, do đó bạn cũng muốn có thêm IO đi vào một pin lý tưởng mà bạn có thể tạo ra một ngắt từ đó.


2

Câu hỏi là một chút vấn đề vì vấn đề định nghĩa.

Giao tiếp nối tiếp về cơ bản là những gì bạn cần nếu bạn muốn giao tiếp với một số thiết bị ngoại vi bên ngoài mà không cần sử dụng cổng umpteen trên bộ điều khiển của bạn. Về cơ bản mọi phương thức giao tiếp nối tiếp đều cần đồng hồ và cấu hình về cách xử lý các kết nối dữ liệu.

SPI là xe buýt 4 dây. I2C là xe buýt 2 dây.

Mỗi người có những đặc điểm khác nhau. Những gì bạn cần trả lời là giao tiếp của bạn cần nhanh như thế nào, cần đáng tin cậy như thế nào, vi điều khiển của bạn cung cấp các tùy chọn nào, v.v.

Bài viết wikipedia này và trang web tham khảo này giải thích rõ ràng hơn nhiều so với tôi có thể, cũng làm theo các tài liệu tham khảo để tìm hiểu nhiều hơn nữa!


2

Về cơ bản, bạn nên chọn giữa I2C và SPI.

Bất kể bạn sử dụng xe buýt nào, bạn nên xem xét mức điện áp của cảm biến và thiết bị ngoại vi của bên thứ ba. Bạn có thể thực hiện việc này bằng cách tạo bộ chuyển đổi của riêng mình với hai MOSFET (Chỉ đi một chiều - Nhặt / không thay đổi hoặc không thay đổi; chỉ có vấn đề nếu bạn cần chạy cảm biến ở 3.3 và giao diện với các bậc thầy 1.8 và 5V). Xem AN10441 của NXP [PDF]. Điều này cũng sẽ làm việc cho SPI (Chỉ cần loại bỏ pullups). Bạn sẽ cần thêm một đường dây vào đầu nối của mình để thiết lập điện áp tham chiếu (nếu bạn chưa làm như vậy.)

Một nhược điểm của I2C là bạn bị giới hạn ở đồng hồ chậm nhất trên xe buýt. Nếu một cảm biến chỉ có khả năng 100kHz và bạn muốn nói chuyện với bộ nhớ của mình ở tốc độ 400kHz hoặc 1 MHz (cả hai tốc độ hợp lệ), thì hành vi của cảm biến chậm hơn của bạn là không xác định. Nếu bạn sử dụng SPI, dòng chọn chip có nghĩa là cảm biến chậm hơn thậm chí sẽ không lắng nghe những gì trên xe buýt và bạn có thể chạy các tốc độ khác nhau cho các cảm biến khác nhau.


1

Tôi sẽ sử dụng I2C. Chỉ cần đảm bảo rằng bạn có thể có được một mô-đun không dây có thể giao tiếp qua I2C nếu bạn muốn có nó trên cùng một xe buýt với các cảm biến của bạn. Hầu hết các thiết bị ngoại vi truyền thông tôi từng thấy sử dụng SPI chứ không phải I2C.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.