USART, UART, RS232, USB, SPI, I2C, TTL, v.v ... tất cả những thứ này là gì và chúng liên quan với nhau như thế nào?


166

Là một người có sở thích điện tử mới làm quen, tôi đã nghe những thuật ngữ này và nhiều hơn nữa bị ném khắp nơi. Tại gốc, tôi hiểu rằng tất cả chúng đều dựa trên giao tiếp giữa các thiết bị, máy tính, thiết bị ngoại vi, v.v.

Tôi có một sự hiểu biết cơ bản về cách tất cả chúng hoạt động, nhưng tôi bối rối khi thấy rất nhiều người trong số họ và gặp khó khăn trong việc hiểu họ liên quan với nhau như thế nào. Ví dụ, UART có phải là tập con của USART không? Sự khác biệt giữa RS232 và nối tiếp là gì? Sự khác biệt cốt lõi giữa tất cả các phương thức truyền thông này: độ tin cậy, chi phí, ứng dụng, tốc độ, yêu cầu phần cứng là gì?

Nếu bạn có thể tưởng tượng, tôi có tất cả những điều khoản này được viết trên thẻ, nằm rải rác trên bàn cà phê và tôi cần ai đó chỉ giúp tôi sắp xếp sự hiểu biết của mình. Hãy tha thứ cho tôi nếu câu hỏi này hơi mơ hồ, nhưng tôi thực sự cảm thấy đó là bản chất của câu hỏi này cùng nhau.


Câu trả lời:


253

Nối tiếp là một từ ô cho tất cả đó là "Ghép kênh phân chia thời gian", để sử dụng một thuật ngữ đắt tiền. Điều đó có nghĩa là dữ liệu được gửi trải đều theo thời gian, thường là hết từng bit một. Tất cả các giao thức bạn đặt tên là các giao thức nối tiếp.

UART, đối với Máy phát nhận không đồng bộ phổ quát, là một trong những giao thức nối tiếp được sử dụng nhiều nhất. Nó gần như cũ như tôi, và rất đơn giản. Hầu hết các bộ điều khiển có UART phần cứng trên tàu. Nó sử dụng một dòng dữ liệu duy nhất để truyền và một để nhận dữ liệu. Hầu hết dữ liệu 8 bit thường được truyền, như sau: 1 bit start (mức thấp), 8 bit dữ liệu và 1 bit stop (mức cao). Bit bắt đầu mức thấp và bit dừng mức cao có nghĩa là luôn có sự chuyển đổi từ cao xuống thấp để bắt đầu giao tiếp. Đó là những gì mô tả về UART. Không có cấp điện áp, vì vậy bạn có thể có nó ở mức 3,3 V hoặc 5 V, tùy theo bộ vi điều khiển của bạn sử dụng. Lưu ý rằng các bộ vi điều khiển muốn giao tiếp qua UART phải đồng ý về tốc độ truyền, tốc độ bit, vì chúng chỉ có các bit bắt đầu rơi xuống để đồng bộ hóa. Đó gọi là giao tiếp không đồng bộ.

Đối với liên lạc đường dài (Không phải hàng trăm mét), UART 5 V không đáng tin cậy lắm, đó là lý do tại sao nó được chuyển đổi thành điện áp cao hơn, thường là +12 V cho "0" và -12 V cho " 1 ". Định dạng dữ liệu vẫn giữ nguyên. Sau đó, bạn có RS-232 (mà bạn thực sự nên gọi là EIA-232, nhưng không ai làm thế.)

Sự phụ thuộc thời gian là một trong những nhược điểm lớn của UART và giải pháp là USART , cho Máy phát thu đồng bộ / không đồng bộ toàn cầu. Điều này có thể làm UART, nhưng cũng là một giao thức đồng bộ. Đồng bộ không chỉ có dữ liệu mà còn có đồng hồ được truyền. Với mỗi bit, một xung đồng hồ báo cho người nhận, nó sẽ chốt bit đó. Các giao thức đồng bộ hoặc cần băng thông cao hơn, như trong trường hợp mã hóa Manchester hoặc thêm một dây cho đồng hồ, như SPI và I2C.

SPI (Giao diện ngoại vi nối tiếp) là một giao thức nối tiếp rất đơn giản khác. Một chủ nhân gửi tín hiệu đồng hồ, và trên mỗi xung đồng hồ, nó chuyển một bit ra nô lệ, và một bit vào, đến từ nô lệ. Do đó, tên tín hiệu là SCK cho đồng hồ, MOSI cho Master Out Slave In và MISO cho Master In Slave Out. Bằng cách sử dụng tín hiệu SS (Chọn nô lệ), chủ có thể điều khiển nhiều hơn một nô lệ trên xe buýt. Có hai cách để kết nối nhiều thiết bị nô lệ với một chủ, một cách được đề cập ở trên tức là sử dụng nô lệ chọn và cách khác là kết nối chuỗi, nó sử dụng ít chân phần cứng hơn (chọn dòng), nhưng phần mềm trở nên phức tạp.

I2C(Mạch tích hợp, phát âm là "Tôi bình phương C") cũng là một giao thức đồng bộ, và đây là giao thức đầu tiên chúng ta thấy có một số "trí thông minh" trong đó; những cái khác lặng lẽ chuyển bit vào và ra, và đó là điều đó. I2C chỉ sử dụng 2 dây, một cho đồng hồ (SCL) và một cho dữ liệu (SDA). Điều đó có nghĩa là chủ và nô lệ gửi dữ liệu qua cùng một dây, một lần nữa được điều khiển bởi chủ tạo ra tín hiệu đồng hồ. I2C không sử dụng Chọn nô lệ riêng biệt để chọn một thiết bị cụ thể, nhưng có địa chỉ. Byte đầu tiên được gửi bởi master giữ địa chỉ 7 bit (để bạn có thể sử dụng 127 thiết bị trên bus) và bit đọc / ghi, cho biết liệu byte tiếp theo cũng sẽ đến từ master hay nên đến từ master nô lệ. Sau mỗi byte, người nhận phải gửi "0" để xác nhận việc nhận byte, mà chủ nhân chốt với xung đồng hồ thứ 9. Nếu chủ muốn viết một byte, quy trình tương tự lặp lại: chủ sẽ đặt bit sau bit trên bus và mỗi lần đưa ra xung đồng hồ để báo hiệu rằng dữ liệu đã sẵn sàng để đọc. Nếu chủ muốn nhận dữ liệu, nó chỉ tạo ra các xung đồng hồ. Các nô lệ phải lưu ý rằng bit tiếp theo đã sẵn sàng khi xung đồng hồ được đưa ra. Giao thức này được NXP (trước đây là Phillips) cấp bằng sáng chế, để tiết kiệm chi phí cấp phép, Atmel sử dụng từ TWI (giao diện 2 dây) giống hệt như I2C, vì vậy mọi thiết bị AVR sẽ không có I2C nhưng nó sẽ có TWI. Nếu chủ muốn nhận dữ liệu, nó chỉ tạo ra các xung đồng hồ. Các nô lệ phải lưu ý rằng bit tiếp theo đã sẵn sàng khi xung đồng hồ được đưa ra. Giao thức này được NXP (trước đây là Phillips) cấp bằng sáng chế, để tiết kiệm chi phí cấp phép, Atmel sử dụng từ TWI (giao diện 2 dây) giống hệt như I2C, vì vậy mọi thiết bị AVR sẽ không có I2C nhưng nó sẽ có TWI. Nếu chủ muốn nhận dữ liệu, nó chỉ tạo ra các xung đồng hồ. Các nô lệ phải lưu ý rằng bit tiếp theo đã sẵn sàng khi xung đồng hồ được đưa ra. Giao thức này được NXP (trước đây là Phillips) cấp bằng sáng chế, để tiết kiệm chi phí cấp phép, Atmel sử dụng từ TWI (giao diện 2 dây) giống hệt như I2C, vì vậy mọi thiết bị AVR sẽ không có I2C nhưng nó sẽ có TWI.

Hai hoặc nhiều tín hiệu trên cùng một dây có thể gây ra xung đột và bạn sẽ gặp vấn đề nếu một thiết bị gửi "1" trong khi thiết bị kia gửi "0". Do đó, xe buýt có dây - HOẶC: hai điện trở kéo xe buýt lên mức cao và các thiết bị chỉ gửi mức thấp. Nếu họ muốn gửi một mức độ cao, họ chỉ cần phát hành xe buýt.

TTL (Transitor Logic Transitor) không phải là một giao thức. Đây là một công nghệ cũ hơn cho logic kỹ thuật số, nhưng tên thường được sử dụng để chỉ điện áp cung cấp 5 V, thường được gọi không chính xác về cái nên được gọi là UART.


Về mỗi thứ bạn có thể viết một cuốn sách, và có vẻ như tôi đang đi đúng hướng. Đây chỉ là một tổng quan rất ngắn gọn, cho chúng tôi biết nếu một số điều cần làm rõ.


Chỉ +1 trên TTL, tôi đoán rằng OP có nghĩa là TTL nối tiếp, theo kinh nghiệm của tôi mô tả các tín hiệu UART trước bộ thu phát / bộ điều khiển bus.
kenny

4
@Kenny - nhưng không có thứ gọi là "TTL nối tiếp". Đó là UART. Nếu điện áp là 3,3 V thì sao? TTL chỉ đề cập đến 5 V.
stevenvh

đó là những gì tôi đang nói, I / O của UART thường được gọi theo kinh nghiệm của tôi.
kenny

Phản ứng tuyệt vời! Tôi sẽ đọc nó thêm một vài lần nữa, và cho bạn biết nếu tôi có thắc mắc. Cảm ơn, Steven.
capcom

8
Đặt cược tốt hơn sẽ là câu cá cho tuổi Uart sau đó :-)
Vaibhav Garg

11

Điều này rất gần với lãnh thổ của một cái gì đó mà bạn sẽ đọc bài viết tốt hơn là đặt câu hỏi cho câu trả lời tùy chỉnh, nhưng để giải quyết một điểm chính mà đôi khi nhà sản xuất làm mờ:

Có hai loại giao diện nối tiếp cơ bản: đồng bộ và không đồng bộ.

Giao diện đồng bộ có dữ liệu được truyền với thời gian tương ứng với đồng hồ rõ ràng, cũng được cung cấp. Ví dụ kinh điển về điều này là SPI, nhưng cũng có các hình thức đặc biệt như I2S cho bộ chuyển đổi âm thanh, JTAG, giao diện cấu hình FPGA, v.v. Nhiều kênh truyền thông song song chỉ là ý tưởng này được mở rộng để di chuyển nhiều bit cùng một lúc. Thường nhưng không phải lúc nào cũng gửi những bit đáng kể đầu tiên.

Các giao diện không đồng bộ có thời gian được mã hóa trong chính luồng dữ liệu. Đối với "cổng nối tiếp" và các tiêu chuẩn liên quan như RS232, thời gian của từ có liên quan đến bit bắt đầu và người nhận chỉ lấy mẫu dòng theo các khoảng thời gian đúng sau đó. Các giao diện khác có thể phức tạp hơn một chút và yêu cầu phục hồi đồng hồ fancier bằng cách sử dụng các vòng lặp và thuật toán khóa pha. UART là "Máy phát thu không đồng bộ phổ quát" - thực sự là tên của một khối chức năng thường được sử dụng để thực hiện "cổng nối tiếp" với một số điều kiện linh hoạt về độ dài từ, tốc độ và điều kiện bắt đầu / kết thúc. Những thứ như RS232, RS422, v.v. là các tiêu chuẩn cho tín hiệu điện ngoài bảng của dữ liệu bạn sẽ nhận được từ những thứ này - điện áp, đầu cuối đơn hoặc vi sai, nếu 1 cao hay thấp, v.v.

"USART" có thể là một nguồn gây nhầm lẫn hợp pháp, vì nó là một loại thiết bị lai, "Máy phát thu không đồng bộ / không đồng bộ" Về cơ bản, đây được sử dụng phổ biến nhất như một UART, nhưng nó cũng có thể được cấu hình để tạo (hoặc xem xét) một đồng hồ riêng được đồng bộ hóa với dữ liệu và có thể đảo ngược thứ tự bit. Nó thường có thể được cấu hình để tương tác với SPI, nhưng nó có thể không thể loại bỏ thời gian dành riêng cho các bit start / stop nên có thể không thể hoạt động với một cái gì đó như I2S có thể mong muốn dữ liệu chảy liên tục mà không có khoảng cách giữa các từ.


Giải thích rất hay (Y) Yêu sự ngắn gọn. Thankyou
@chris

8

RS-232 là một giao thức nối tiếp rất đơn giản ban đầu được sử dụng cho modem và teletypes. Đó là cái thường được gọi là cổng nối tiếp (hoặc cổng COM trong MS-Windows). Trên đường dây, nó thường sử dụng các mức ± 12V, nhưng chúng có thể khác nhau khi phát hiện được chỉ định ở mức 3V. Luôn có một trình điều khiển đường truyền (ngày nay thường là từ gia đình MAX 232) chuyển đổi các mức này thành và từ các mức tín hiệu số bên trong của máy tính hoặc vi điều khiển.

TTL có nghĩa là Transitor-Transitor-Logic và có mức logic bằng 0 gần 0V và đối với logic gần 5V. Thông thường bất kỳ logic 5V nào được gọi là TTL, mặc dù hầu hết các mạch hiện nay đều được xây dựng dưới dạng CMOS. Ngày nay cũng có nhiều mạch hoạt động ở mức 3,3V, không còn là TTL.

Đối với các mức bên trong, các mức trên dòng RS-232 được đảo ngược, + 12V tương ứng với mức logic thấp và -12V tương ứng với mức cao logic, có thể gây nhầm lẫn.

Để mô tả định dạng dữ liệu người ta thường hiển thị tín hiệu logic. Khi dòng không hoạt động, nó là cao. Việc truyền bắt đầu với bit bắt đầu thấp, các bit dữ liệu có bit có trọng số thấp nhất trước tiên, bit chẵn lẻ tùy chọn và một đến hai bit stop (logic 1). Điều này được gọi là truyền không đồng bộ, bởi vì các bit start và stop đồng bộ hóa dữ liệu cho từng byte riêng biệt.

UART (Máy phát thu không đồng bộ phổ) là một thiết bị trong máy tính hoặc vi điều khiển thực hiện loại giao tiếp không đồng bộ này.

USART (Máy phát thu đồng bộ không đồng bộ toàn cầu) là một thiết bị ngoài ra có thể thực hiện một số loại truyền đồng bộ, do đó có thêm S. Loại nào khác nhau, bạn cần tra cứu nó trong bảng dữ liệu.

SPI, I²C và USB là khác nhau (và trong trường hợp USB rất dài).


1

Tôi đồng ý với những gì đã được đề cập về giao thức SPI và CAN. Để cải thiện hiệu suất tốt hơn, giao thức CAN đã được thiết kế. Trong khái niệm Trọng tài này được sử dụng trong đó hai thiết bị đã sẵn sàng để liên lạc, sau đó tùy thuộc vào mức độ ưu tiên của chúng, việc truyền hoặc tiếp nhận diễn ra. CAN được sử dụng rộng rãi trong nhiều ngành công nghiệp.

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.