Chính xác thông số kỹ thuật USB giải thích phải làm gì khi cáp được kết nối lần đầu tiên?


15

Vì vậy, tôi biết về thông số kỹ thuật USB 2.0 được đặt tại trang web USB.org .

Tôi hơi lười biếng và thiếu kiên nhẫn. Ai đó có thể cho tôi biết nơi để tìm hiểu chính xác những gì được mong đợi của thiết bị ngoại vi của tôi khi cáp USB được kết nối không?

Ví dụ: nếu thiết bị ngoại vi của tôi là máy in, làm thế nào để tôi nói với máy tính ở đầu kia rằng một máy in (với một mô tả mô hình cụ thể, tôi cho rằng) vừa được kết nối? Hơn, trong máy tính, làm thế nào để trình điều khiển máy in biết cổng USB nào được kết nối với máy in?

Ứng dụng của tôi thực sự là USB MIDI. Tôi cũng đã nhận được tài liệu USB-MIDI này , nhưng tôi thiếu giao thức USB cơ bản hơn.

Chỉ cần thông tin của mọi người, chip USB tôi đang sử dụng là FTDI FT220x và nó được nối với SPI của ADSP-21479 SHArC. Bây giờ chúng tôi sử dụng nó đơn giản để liên lạc văn bản bằng PC (chạy TeraTerm) làm "bàn điều khiển" . Tôi có quyền truy cập vào mã thiết lập cổng SPI và kết nối với chip FTDI, nhưng không có mã nào thực hiện bất kỳ giao tiếp ban đầu nào. Tôi không biết FT220x làm gì khi lần đầu tiên kết nối với PC.

Tôi không hài lòng khi đọc và tìm hiểu, nhưng tôi muốn biết bắt đầu đọc từ đâu và thông số USB 100 MB là mục tiêu quá lớn để bắn vào. Chân thành cảm ơn bất cứ ai đã giúp đỡ hành động.


1
Vì vậy, bạn chỉ tò mò về những gì FTDI FT220x đang làm đằng sau hậu trường, phải không? Vì FTDI chăm sóc rất nhiều công cụ USB cho bạn, nên cũng có một số giới hạn đối với những gì nó sẽ cho phép bạn làm. Tôi đã sử dụng gia đình FT2232H trong một thời gian, sẽ cố gắng giải thích những gì tôi biết ...
MarkU

Điều cuối cùng tôi đang cố gắng làm là sử dụng cổng USB này đủ thông minh để gửi văn bản qua lại cho PC chạy TeraTerm, điều tôi hy vọng sẽ làm là sử dụng cùng một đầu nối USB để làm USB MIDI. Tôi cần hiểu cách "đóng gói" dữ liệu thành gói 32 bit, nhưng tôi nghĩ (và vẫn nghĩ) rằng phải có một giao thức nào đó nói với đầu kia rằng đây là thiết bị USB MIDI. (cho đến nay, tôi chỉ không nắm bắt được các yếu tố cần thiết về USB và câu trả lời của bạn có vẻ rất hữu ích để giúp tôi đi.)
robert bristow-johnson

Câu trả lời:


21

USB có một số lớp, được mô tả trong Đặc tả USB 2.0 . Nếu bạn quen thuộc với mô hình mạng lớp OSI, bạn có thể nghĩ về nó như thế này:

  • Lớp phiên = Chương 10 Phần cứng và phần mềm máy chủ lưu trữ USB (trình điều khiển thiết bị)
  • Lớp vận chuyển = Chương 9 Khung thiết bị USB
  • Lớp mạng = Lớp giao thức Chương 8 (dòng bit)
  • Lớp liên kết dữ liệu = Chương 7 Điện (mạch)
  • Lớp vật lý = Chương 6 Cơ khí (cáp và đầu nối)

Về mặt khái niệm, USB dựa trên các luồng dữ liệu, được gọi là Điểm cuối , có thể là IN (đến máy chủ) hoặc OUT (từ máy chủ). Mọi thiết bị đều có Điểm cuối 0, được sử dụng để kiểm soát và trạng thái. Một thiết bị có thể có các điểm cuối bổ sung cho dữ liệu ứng dụng. Mỗi điểm cuối hoạt động giống như một bộ đệm FIFO.

Dữ liệu được truyền trên điểm cuối dưới dạng Hàng loạt (như TCP / IP, được đảm bảo rằng mọi byte đến và theo đúng thứ tự) hoặc Isoyncous (như UDP / IP, được đảm bảo là mới nhưng có thể bỏ gói). Có một kiểu chuyển đổi " Ngắt " được đặt tên sai , thực sự chỉ được thăm dò bởi chủ nhà.

USB 2.0 sử dụng cặp vi sai cho datalink. Tôi sẽ không đi sâu vào chi tiết vì điều này được đề cập trong thông số kỹ thuật USB 2.0 chương 7. Nói chung về bố trí PCB, chúng tôi coi đây là một cặp vi sai có độ dài phù hợp và đặt trong các điện trở sê-ri theo yêu cầu của bất kỳ USB PHY nào (Vật lý Giao diện) đang được sử dụng. Thiết bị ngoại vi USB sử dụng điện trở có giá trị cao trên một trong các dòng D + hoặc D- để thông báo cho chủ nhà rằng đó là thiết bị ngoại vi tốc độ cao hoặc tốc độ thấp.

Ngay sau khi máy chủ USB phát hiện ra rằng có một thiết bị, máy chủ yêu cầu một loạt các mô tả từ thiết bị. Điều này được chăm sóc đằng sau hậu trường bởi chip FTDI. Các mô tả được mô tả trong Chương 9.5 . Chúng bao gồm Device Descriptor , Cấu hình Descriptor , Interface Phần mô tả , Endpoint Phần mô tả , Chuỗi Phần mô tả , thậm chí có thể HID Báo cáo Phần mô tả .

Bộ mô tả thiết bị bao gồm các số USB VID (Nhận dạng nhà cung cấp) và số PID (Nhận dạng sản phẩm). Hệ điều hành sử dụng cặp số này, VID_PID, để xác định trình điều khiển thiết bị nào sẽ được sử dụng cho thiết bị này. Lưu ý rằng số VID được cấp bằng cách có thành viên trong diễn đàn người triển khai USB, vì vậy đó là một vấn đề nếu bạn là nhà phát minh cá nhân.

Ngoài ra, còn có trình điều khiển lớp HID (Thiết bị giao diện con người), cung cấp đầu vào hơi chung cho bàn phím / chuột / vv, cũng như bất kỳ đầu vào / đầu ra chung nào. Một lợi thế của HID là nó không yêu cầu cung cấp trình điều khiển thiết bị tùy chỉnh, nhưng thông lượng của nó có phần bị hạn chế so với trình điều khiển hàng loạt tùy chỉnh. Có một tài liệu đặc tả khác về các mô tả HID; và một tài liệu Bảng sử dụng HID chi tiết tất cả các số mã mô tả các tính năng khác nhau có sẵn trên một thiết bị giao tiếp với con người nhất định.

Chip FTDI như bảng dữ liệu FT220X cung cấp "công cụ giao diện nối tiếp" USB (không bị nhầm lẫn với nối tiếp SPI hoặc nối tiếp RS232). Điều này quan tâm đến hầu hết các công cụ cấp thấp được mô tả trong chương 6, 7 và 8.

FTDI sử dụng EEPROM (offchip trên FT2232H, trên chip trên FT220X) để chứa một ít thông tin đi vào phần mô tả. Bạn có thể tùy chỉnh các giá trị VID / PID và cung cấp các chuỗi mô tả tùy chỉnh.


6
Tôi thích tóm tắt. Tôi đã phải đọc thông số ENTIRE 2.0 (hơn 1000 trang khi tôi nhớ lại) trong khoảng thời gian vài tuần vì tôi phải tự mình tìm ra tất cả những thứ nhảm nhí này. Đó không phải là một trải nghiệm thú vị, tôi phải nói. (Không thể sử dụng HID trong trường hợp của tôi.) Cũng không có cuốn sách hay nào về chủ đề này. Tôi ghét cuốn sách về USB của Jan Axelson và coi cuốn sách của cô ấy "gần như hoàn toàn vô dụng" vì ai đó đang cố gắng thực hiện công việc này như một vi mô nhúng từ đầu. Nó thực sự chủ yếu là vô giá trị, ngược lại. Nếu bạn biết về một cuốn sách hay cho người triển khai (phần cứng tùy chỉnh), tôi rất vui khi nghe một tiêu đề !! +1
jonk

1
Tùy thuộc vào thị trường tiềm năng của Op, VID / PID là thách thức lớn nhất. Sử dụng phương pháp Axelsons hoạt động theo nghĩa bạn có thể sử dụng VID của cô ấy (chi phí 3,5 nghìn đô la cho riêng bạn) và yêu cầu một hoặc nhiều PID của cô ấy miễn phí. Bạn cũng có thể yêu cầu PID từ các tổ chức như Microchip / Atmel, FTDI và TI (dựa trên VID của họ). Cuốn sách hay nhất IMO là Intels "Ví dụ về thiết kế USB", nó hơi dài trong răng, nhưng tốt cho USB 2.x. Thật không may, nhiều ví dụ mã bị hỏng vì những thay đổi trong Visual Studio thông qua các phiên bản của nó.
Jack Creasey

1
Cách tốt nhất để có quyền truy cập vào VID / PID cho người có sở thích là sử dụng LUFA (miễn phí): Fourwalledcubicle.com/files/LUFA/Doc/130303/html/iêu ..... những thứ này không thể được sử dụng trong sản phẩm thương mại nhưng là tốt cho sử dụng nhà / bản demo, nơi bạn có thể kiểm soát va chạm ở mức độ lớn.
Jack Creasey

1
Tái bút Một giới thiệu tuyệt vời là sử dụng "thiết kế USB nhúng theo ví dụ: FTDI đã phát hành: ftdichip.com/Support/Document/TechnicalPublications/, ... điều này có nhiều ví dụ hữu ích (tất nhiên dựa trên các thiết bị FTDI) và tất cả các liên kết các tệp công việc bao gồm sử dụng bộ điều khiển PSOC.
Jack Creasey

1
Lưu ý rằng nếu thiết bị USB tự cấp nguồn, nó phải đợi cho đến khi phát hiện thấy điện áp VBUS trước khi áp dụng điện trở kéo lên D + hoặc D-. Tôi đã không chứng nhận về điều này.
Adam Haun

4

Hành vi và tương tác của các "đối tác" USB (máy chủ và thiết bị) nằm rải rác trong thông số kỹ thuật của USB. Cách tốt nhất để có được một số căn cứ là xem xét "khung thiết bị", Chương 9, mô tả các trạng thái thiết bị (bắt buộc) có thể (Hình 9-1) và khung Máy chủ (và Hub), trong Chương 10 và 11. Bỏ qua chi tiết giao thức (đường ống / loại giao dịch / lớp giao thức OSI trừu tượng, bố cục PCB, v.v.), có thể đạt được sự tương tác tốt hơn về tương tác ban đầu bằng cách nghiên cứu sơ đồ trạng thái cổng (Hình 11-10).

Về bản chất, nếu cáp không được kết nối giữa máy chủ và thiết bị, các cổng máy chủ ở trạng thái "Cấp nguồn" (VBUS là BẬT), nhưng "Ngắt kết nối". Dây D + và D- được giữ ở mức thấp với mức kéo xuống 15k.

Khi cáp được kết nối, VBUS sẽ đi vào thiết bị. Thiết bị nhận ra rằng nó đang được kết nối và báo hiệu sự kiện "kết nối" bằng cách kéo CAO một trong các dây D, D + nếu đó là thiết bị FS / HS và D- nếu đó là thiết bị LS.

Kéo dây D +/- trên một cổng nhất định sẽ làm gián đoạn phần mềm máy chủ, báo cáo "thay đổi trạng thái cổng". Phần mềm máy chủ (thường là ehci.sys) sau đó khởi tạo trình tự "thiết lập lại cổng" trên cổng cụ thể đó . Sau khi hoàn thành "thiết lập lại cổng USB", cổng máy chủ được bật để liên lạc với USB. Cổng trở nên hoạt động (các gói khung bắt đầu chảy ra).

Sử dụng giao thức USB, máy chủ chỉ định địa chỉ duy nhất cho thiết bị này và đọc "mô tả thiết bị". Điều này bắt đầu quá trình "liệt kê thiết bị". Bộ mô tả thiết bị chứa thông tin về loại thiết bị nào thuộc về (HID, COM, MIDI, Máy in, v.v.) và VID / PID của thiết bị cụ thể đó, cùng với một loạt các thông tin khác, xem Bảng 9-8.

Sau khi nhận được lớp thiết bị và VID / PID, phần mềm máy chủ sẽ cố khớp thông tin này trong sổ đăng ký thiết bị và tải trình điều khiển DEVICE tương ứng, hoặc chung chung hoặc cụ thể của nhà cung cấp (nếu có). Trình điều khiển thiết bị sau đó kết thúc quá trình liệt kê bằng cách chọn giao diện thiết bị kết thúc bằng cài đặt "cấu hình thiết bị". Rõ ràng toàn bộ giao tiếp USB chỉ được nhận ra đằng sau cổng cụ thể này , ngay cả khi tất cả các gói được phát đến tất cả các cổng được kích hoạt.

Trên đây là khung chung của giao thức kết nối USB. Dữ liệu đóng gói cho bất kỳ mục đích cụ thể nào (như MIDI) là một câu chuyện khác và nó được xử lý ở cấp ứng dụng hoặc ở cấp trình điều khiển thiết bị, nếu hệ thống có được lớp thiết bị phù hợp. Để có được giao tiếp MIDI gốc, thiết bị phải có lớp này trong bộ mô tả và tuân theo tất cả các định nghĩa lớp MIDI .

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.