UART so với SPI so với I2C: Hướng dẫn Định tuyến & Bố trí

Zachariah Peterson
|  Created: Tháng Chín 27, 2020  |  Updated: Tháng Mười 27, 2020
I2C so với SPI so với UART cho màn hình LCD

Nếu bạn đang xây dựng một bảng phát triển cho dự án của mình hoặc sử dụng một MCU phổ biến, bạn sẽ tìm thấy nhiều giao thức để giao tiếp với các thành phần hoạt động khác. Các tiêu chuẩn như USB và Ethernet được tích hợp vào hầu hết các bộ điều khiển để làm việc với các thiết bị ngoại vi máy tính. Tuy nhiên, các giao thức như I2C, SPI, UART và các giao thức khác được sử dụng để giao tiếp với các MCU hoặc IC có thể lập trình phía dưới. Sự khác biệt giữa SPI so với I2C so với UART là đơn giản, và bất kỳ nhà thiết kế nào làm việc với MCU đều nên biết cách tuân theo các hướng dẫn định tuyến và bố trí cho các giao thức này.

Các giao thức này là các tiêu chuẩn tín hiệu tốc độ chậm, vì vậy bạn hầu như không cần phải lo lắng về những vấn đề như kiểm soát trở kháng hay hành vi đường truyền tín hiệu nếu bạn đang làm việc với các giao thức này. Tuy nhiên, một số điểm thiết kế quan trọng cần được xem xét khi đảm bảo tín hiệu của các đường bus được các bộ thu đọc một cách chính xác. Cũng có vấn đề về địa chỉ, nhưng sản phẩm cụ thể và mã của bạn có thể xử lý điểm này. Bây giờ, hãy xem xét cách sử dụng ba giao thức phổ biến này trong bố trí PCB của bạn, thiết lập một số hướng dẫn về bố trí/định tuyến, và đề cập đến một số điểm quan trọng để duy trì tính toàn vẹn của tín hiệu.

Sự Khác Biệt Giữa I2C so với SPI so với UART và Hướng Dẫn Bố Trí của Chúng

Mọi thứ từ MCU 8-bit đến 32-bit đều sử dụng ít nhất một trong những giao thức này cùng với GPIOs để lập trình và gửi tín hiệu đến các thiết bị ngoại vi đơn giản. Ba giao thức nối tiếp này là giao thức bus; I2C và UART sử dụng các phương thức địa chỉ, trong khi SPI không sử dụng địa chỉ. Mặc dù SPI không sử dụng địa chỉ, nó vẫn là một giao thức bus và vẫn có thể được sử dụng để chọn các thiết bị nằm dưới để nhận dữ liệu.

Hướng dẫn Định tuyến & Bố trí Giao thức I2C

I2C (phát âm là I-bình phương C, hoặc đôi khi là IIC cho mạch tích hợp liên kết) sử dụng hai dây (chế độ tiêu chuẩn, nhanh và nhanh-plus) để điều khiển các thiết bị khác; một dây là dây đồng hồ (SCL), trong khi dây kia là dây dữ liệu (SDA). Nó có ba chế độ, được tóm tắt trong bảng dưới đây. Lưu ý rằng các giá trị thời gian tăng/giảm giả định rằng các điện trở chuỗi tiêu biểu được lắp đặt tại các I/O.

Chế độ

Tốc độ dữ liệu/tốc độ đồng hồ

Thời gian tăng tối đa

Thời gian tăng tối thiểu

Định hướng

Tiêu chuẩn

100 kHz

1000 ns

-

Hai chiều

Nhanh

400 kHz

300 ns

20 ns*

Hai chiều

Nhanh cộng

1 MHz

300 ns

20 ns*

Hai chiều

Tốc độ cao

3.4 MHz (bus 100 pF)

1.7 MHz (bus 400 pF)

120 ns**
240 ns**

15 ns**
30 ns**

Hai chiều

Cực nhanh

5 MHz

50 ns

25 ns

Một chiều


*Giả định VDD/VCC = 5.5 V. Giảm tuyến tính nếu VDD/VCC thấp hơn
**Chia các giá trị này cho 2 đối với dòng clock

Lưu ý rằng chế độ cực nhanh là chế độ duy nhất mà việc giao tiếp được sử dụng cho các thao tác ghi xuôi dòng. Chế độ này cũng quan trọng vì nó giúp chúng ta nhận biết khi nào trở kháng của bus cần được khớp, điều này trên thực tế gần như không bao giờ xảy ra. Nếu chúng ta lấy một giới hạn thận trọng 10% về chiều dài dây quan trọng, chúng ta thấy rằng chiều dài quan trọng trong những dây này là 0,32 m, dài hơn nhiều so với kích thước của hầu hết các bảng mạch sẽ sử dụng I2C. Nếu chúng ta sử dụng tần số gối cho thời gian tăng/giảm tối thiểu với giới hạn 10% về chiều dài quan trọng, chúng ta đến với một giá trị dài hơn nhiều là 0,92 m. Chúng ta nên lấy con số thận trọng hơn là 0,32 m cho chế độ cực nhanh; bất kỳ dây I2C nào ngắn hơn giá trị này sẽ không hoạt động như một đường truyền, và chúng ta chỉ cần lo lắng về kế hoạch chấm dứt.

Điểm quan trọng trong việc chấm dứt là chọn đúng điện trở kéo lên và điện trở nối tiếp. Các điện trở kéo lên và dung lượng của dây bus VDD/VCC tạo thành một mạch RC phóng và sạc, đó là những gì cung cấp tín hiệu cho bộ thu khi bộ điều khiển chuyển đổi. Các giá trị điện trở kéo lên (Rp) cho các dây tín hiệu và đồng hồ phải tuân theo bất đẳng thức sau:

 I2C pull-up resistor value
I2C pull-up resistor value.

Lưu ý rằng số ở mẫu số phía trên được định nghĩa cho thời gian chuyển đổi từ 30% đến 70%, đây là tiêu chuẩn trong quy định I2C. Đối với thời gian chuyển đổi từ 10% đến 90%, thay thế 0.8473 bằng 2.2. Điều này sẽ hạn chế thêm giá trị của các điện trở kéo lên.

PCB layout topology for I2C
I2C layout topology.

Điện dung của bus được xác định bằng cách sử dụng các công thức tiêu chuẩn cho trở kháng bus VCC, có thể được tính toán bằng cách sử dụng các phương trình giống như bạn sẽ sử dụng cho một đường truyền (hoặc microstrip hoặc stripline). Bạn có thể sau đó giải quyết điện dung của bus sử dụng trở kháng và độ trễ lan truyền của đường. Nếu bạn không muốn thực hiện phép tính đó, có các máy tính điện dung bus I2C bạn có thể tìm thấy trực tuyến. Cuối cùng, các điện trở nối tiếp là tùy chọn theo tiêu chuẩn I2C, mặc dù chúng có thể được bao gồm để bảo vệ các thiết bị khỏi các đợt tăng điện áp và làm chậm thời gian tăng/giảm. Xem Hình 46 trên trang 59 của tiêu chuẩn I2C để xác định giá trị điện trở nối tiếp phù hợp để kết hợp với giá trị điện trở kéo lên của bạn.

Giao thức SPIHướng dẫn Định tuyến & Bố trí

Giao thức SPI tương tự như I2C. Tổng cộng có 4 dây được sử dụng trong bus này, và các thành phần có thể được sắp xếp theo hai chế độ có thể. Nếu một thiết bị điều khiển đơn lẻ được sử dụng để kích hoạt một thiết bị hạ lưu đơn lẻ, cấu trúc mạng sẽ đơn giản là điểm-điểm. Việc kích hoạt nhiều thiết bị phụ thuộc vào số lượng đầu ra chọn chip do trình điều khiển cung cấp (chế độ tiêu chuẩn). Chế độ thứ hai sử dụng phương pháp nối tiếp, nơi một đầu ra chọn thiết bị đơn lẻ lần lượt kích hoạt từng thiết bị trong chuỗi nối tiếp.


Trong ví dụ trên, bộ điều khiển của chúng tôi có hai đầu ra chọn chip được sử dụng để kích hoạt khi các thiết bị ngoại vi sẽ nhận và chấp nhận dữ liệu từ máy chủ. Khi dữ liệu nối tiếp được xuất ra từ bộ điều khiển, thiết bị ngoại vi cần thiết cũng cần được bộ điều khiển kích hoạt trong một khung dữ liệu để thiết bị ngoại vi sẽ chấp nhận và đọc dữ liệu. Điều này được lập trình trong logic của bộ điều khiển. Ví dụ, nếu một vi điều khiển hoặc FPGA được sử dụng làm bộ điều khiển, nó sẽ được thực hiện trong mã cho ứng dụng của thiết bị.

Khác với I2C, các thông số tín hiệu trong SPI có thể cấu hình cao. Phương pháp xả RC với dung lượng đường dẫn được hiển thị ở trên có thể kiểm soát dòng ra và thời gian tăng/giảm từ giao diện của bạn. SPI là một giao diện push-pull, và không có dòng điện được rút qua điện trở kéo lên. Thời gian tăng được chi phối bởi dung lượng bên ngoài và trở kháng ra của trình điều khiển. Thông số SPI trên bộ điều khiển chủ của bạn có thể đưa ra một thời gian tăng cụ thể cho một dòng rút cụ thể vào bus cho một tổng dung lượng cụ thể (có thể là 50 hoặc 100 pF). Ví dụ, trên bus SPI của một MCU PIC32, thời gian chuyển đổi ra được quy định là 5 ns cho một dung lượng bên ngoài là 50 pF. Vì vậy, nếu chúng ta giảm xuống 10 pF, chúng ta sẽ mong đợi thời gian tăng giảm xuống còn 1 ns cho một dòng ra và mức điện áp nhất định. Trong trường hợp đó, bạn giờ đây có một khoảng cho phép dài 0.6 inch (ước lượng thô với giới hạn 10% rất thận trọng về chiều dài không khớp). Bạn có thể sau đó sử dụng một điện trở nối tiếp để chấm dứt đầu ra trở kháng thấp của trình điều khiển trong trường hợp đường dây trở nên rất dài cho một thời gian tăng ngắn.

Giao thức UART Hướng dẫn Định tuyến & Bố trí

Giao thức truyền nhận bất đồng bộ đa năng (UART) tương tự như I2C và SPI. Các giao diện này có tốc độ dữ liệu tối đa khoảng 5 Mbps. Các thiết bị UART cũng dễ dàng sử dụng vì không có tín hiệu đồng hồ được gửi giữa các thiết bị; mọi thứ đều là bất đồng bộ. Lưu ý rằng mỗi thiết bị UART nội bộ (hệ thống) phải chạy ở một bội số của tốc độ baud (tức là, mỗi bit được lấy mẫu N lần). Chỉ sử dụng hai dây để giao tiếp giữa một thiết bị điều khiển đơn và một thiết bị ngoại vi đơn.

Lưu ý rằng định dạng dữ liệu, mức tín hiệu, và tốc độ baud của một thiết bị UART có thể được cấu hình với một mạch điều khiển bên ngoài. Việc bạn có thấy hành vi tín hiệu tốc độ cao hay không phụ thuộc vào việc bạn đang truyền tải với mức tín hiệu RS-232 hay RS-485. Tín hiệu UART ở mức RS-232 thường được thực hiện mà không cần chấm dứt vì tốc độ cạnh là chậm. Tuy nhiên, RS-485 với tín hiệu UART thường yêu cầu điện trở chấm dứt. Tuân theo các hướng dẫn thiết kế tốc độ cao tiêu chuẩn để xác định khi nào cần chấm dứt bằng cách nhìn vào sự chuyển đổi sang hành vi đường truyền tín hiệu (xem bài viết mà tôi đã liên kết ở trên).

Một phương pháp kết thúc điển hình để giảm bớt hiện tượng overshoot khi nó xảy ra là áp dụng kết thúc dạng series. Lưu ý rằng UART có thể ở trạng thái không hoạt động ở mức cao hoặc thấp, và có thể cần đến điện trở kéo lên để thiết lập mức không hoạt động yêu cầu; hãy chắc chắn kiểm tra thông số kỹ thuật của linh kiện trước khi thêm điện trở kéo lên.

Bạn có thể đọc thêm về sự khác biệt giữa thời gian trong các bus đồng bộ và không đồng bộ trong bài thuyết trình AltiumLive năm 2018 của Max Seeley.

Tóm tắt

Nếu các quy tắc SPI và UART có vẻ mơ hồ, đó là bởi vì bạn có nhiều tự do hơn trong việc thiết kế giao diện của mình ở cấp độ firmware. Một khi bất kỳ tiêu chuẩn nào này hoạt động ở tốc độ cạnh nhanh, chúng đều dễ bị nhiễu chéo, giống như các tiêu chuẩn tín hiệu tốc độ cao. Tuy nhiên, bởi vì bạn có nhiều linh hoạt trong thông số kỹ thuật của mình, bạn thường có thể thiết kế các đường dẫn để có độ tự cảm thấp hơn và giảm nhiễu cảm từ. Bạn có một số linh hoạt trong việc định tuyến các tín hiệu này và làm cho chúng rất dễ dàng để làm việc trong hệ thống số tiếp theo của bạn.

Khi thiết kế các hệ thống số với các tiêu chuẩn tín hiệu phổ biến, bạn có thể thiết kế cho sự khác biệt giữa I2C so với SPI so với UART theo hướng dẫn bố trí với các quy tắc thiết kế trong Altium Designer®. Trình quản lý Lớp Xếp và trình giải quyết trường 3D tích hợp từ Simberian sử dụng hình học bảng mạch và hình học đường dẫn của bạn để trích xuất các thành phần nhiễu trong đường dẫn tín hiệu của bạn và giúp bạn xác định trở kháng nếu tín hiệu của bạn bao giờ có chiều dài quá dài hoặc tốc độ cao.

Altium Designer trên Altium 365 mang lại một lượng tích hợp chưa từng có cho ngành công nghiệp điện tử cho đến nay chỉ giới hạn trong thế giới phát triển phần mềm, cho phép các nhà thiết kế làm việc từ xa và đạt được mức độ hiệu quả chưa từng có.

Chúng ta mới chỉ khám phá bề mặt của những gì có thể thực hiện với Altium Designer trên Altium 365. Bạn có thể kiểm tra trang sản phẩm để biết mô tả tính năng sâu hơn hoặc một trong những Hội thảo Trực tuyến Theo Yêu cầu.

About Author

About Author

Zachariah Peterson has an extensive technical background in academia and industry. He currently provides research, design, and marketing services to companies in the electronics industry. Prior to working in the PCB industry, he taught at Portland State University and conducted research on random laser theory, materials, and stability. His background in scientific research spans topics in nanoparticle lasers, electronic and optoelectronic semiconductor devices, environmental sensors, and stochastics. His work has been published in over a dozen peer-reviewed journals and conference proceedings, and he has written 2500+ technical articles on PCB design for a number of companies. He is a member of IEEE Photonics Society, IEEE Electronics Packaging Society, American Physical Society, and the Printed Circuit Engineering Association (PCEA). He previously served as a voting member on the INCITS Quantum Computing Technical Advisory Committee working on technical standards for quantum electronics, and he currently serves on the IEEE P3186 Working Group focused on Port Interface Representing Photonic Signals Using SPICE-class Circuit Simulators.

Related Resources

Tài liệu kỹ thuật liên quan

Back to Home
Thank you, you are now subscribed to updates.