Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
wafer.jpg

Giao thức USB

E-mail Print PDF

Trong lĩnh vực lập trình hệ thống nhúng, một trong những công việc quan trọng nhất với chúng ta đó chính là lập trình ghép nối, điều khiển các module, các thiết bị ngoại vi ghép nối với hệ trung tâm.

Để có thể làm được việc này, ngoài các kỹ năng lập trình chúng ta còn cần phải thành thạo về các giao thức ghép nối phổ biến như RS232, SPI, I2C và đặc biệt hiện nay nhu cầu tất yếu chúng ta phải tìm hiểu về chuẩn USB vì đây có thể nói là một trong các chuẩn phổ biến nhất hiện nay. Tìm hiểu chuẩn USB sẽ giúp cho chúng ta có kiến thức để có thể làm được rất nhiều công việc như:

Thiết kế, chế tạo thiết bị hoạt động theo chuẩn USB

Viết driver cho thiết bị giao tiếp theo chuẩn USB

Lập trình ghép nối với các thiết bị làm việc theo chuẩn USB

Trong phạm vi bài viết này, tác giả muốn giới thiệu với các bạn những thông tin quan trọng nhất, cần thiết cho các bạn có thể nắm vững về chuẩn USB để có thể tiếp tục đón xem các bài viết hấp dẫn tiếp theo về thiết kế thiết bị theo chuẩn USB và lập trình USB Driver trên Linux.

1. Chuẩn tín hiệu

Chuẩn USB sử dụng 4 đường tín hiệu trong đó có 2 đường cấp nguồn DC (VBUS-5V và GND). 2 đường còn lại là một cặp tín hiệu vi sai (D+ và D-) cho phép truyền dữ liệu. Cặp dây tín hiệu này được nối xoắn ở bên trong nên có khả năng chống nhiễu tốt.

Lưu ý: cổng USB trên máy tính cho phép cấp nguồn nuôi ra bên ngoài với dòng lên tới 500mA. Như vậy, các thiết bị sử dụng ít điện năng như chuột, thẻ nhớ USB... đều có thể lấy trực tiếp nguồn từ cổng USB của máy tính mà không cần dùng thêm nguồn ngoài.


2. Mô hình mạng


Các thiết bị hoạt động theo chuẩn USB được kết nối với nhau theo đồ hình mạng hình sao phân cấp.  Trung tâm của mỗi hình sao này là các Hub. Trong đồ hình như vậy, các thiết bị USB được chia làm 3 loại chính:

USB Host: thiết bị đóng vai trò điều khiển toàn bộ mạng USB (có thể lên tới tối đa 126 thiết bị). Ví dụ như trên máy tính, USB Host được gắn trên mainboard. Để giao tiếp và điều khiển các USB device, USB Host controller cần được thiết kế tích hợp với USB RootHub (Hub mức cao nhất). Vai trò của thiết bị USB Host:

Trao đổi dữ liệu với các USB Device

Điều khiển USB Bus:

Quản lý các thiết bị cắm vào hay rút ra khỏi Bus USB qua quá trình điểm danh (Enumeration)

Phân xử, quản lý luồng dữ liệu trên Bus, đảm bảo các thiết bị đều có cơ hội trao đổi dữ liệu tùy thuộc vào cấu hình của mỗi thiết bị.

USB Device: là các thiết bị đóng vai trò như các slave giao tiếp với USB Host. Xin lưu ý một điều hết sức quan trọng đó là các thiết bị này hoàn toàn đóng vai trò bị động, không bao giờ được tự ý gửi gói tin lên USB Host hay gửi gói tin giữa các USB Device với nhau, tất cả đều phải thông qua quá trình điều phối của USB Host. Các bạn sẽ hiểu cơ chế này rõ hơn trong phần truyền thông của chuẩn USB. Chức năng của thiết bị USB Device:

Trao đổi dữ liệu với USB Host

Phát hiện gói tin hay yêu cầu từ USB Host theo giao thức USB.

USB Hub: đóng vai trò như các Hub trong mạng Ethernet của chúng ta. Cấp nguồn cho các thiết bị USB

3. Kịch bản hoạt động


Quá trình hoạt động của chuẩn USB có thể được chia làm hai giai đoạn chính

Quá trình điểm danh: là quá trình USB Host phát hiện các thiết bị cắm vào và rút ra khỏi đường USB Bus. Mỗi khi một thiết bị tham gia vào Bus USB, USB Host sẽ tiến hành đọc các thông tin mô tả (Description) của USB Device, từ đó thiết lập địa chỉ (NodeID) và chế độ hoạt động tương ứng cho thiết bị USB Device. Các địa chỉ sẽ được đánh từ 1->126 nên về lý thuyết, chuẩn USB cho phép kết nối 126 thiết bị vào đường Bus. Khi thiết bị rút ra khỏi đường Bus, địa chỉ này sẽ được thu hồi.

Quá trình truyền dữ liệu: để hiểu quá trình truyền dữ liệu này, chúng ta phải hiểu được hai khái niệm có thể nói là khó và quan trọng nhất trong chuẩn USB, đó là khái niệm Interface và Endpoint (Xin lưu ý là chỉ thiết bị USB device mới có Endpoint, USB Host không có Endpoint). Một thiết bị USB sẽ có thể có nhiều Interface, một Interface có thể sử dụng nhiều Endpoint. Tôi xin lấy một ví dụ sau để các bạn thấy:

Thẻ nhớ USB chỉ sử dụng 1 Interface theo chuẩn USB Mass storage, interface này sử dụng 3 Endpoint.

Bộ USB 3G sử dụng các Interface khác nhau như: CD Room, Mass storage và Communication, mỗi interface lại sử dụng nhiều Endpoint khác nhau.

Như vậy, đứng ở góc độ mức hệ thống, các Interface chính là các dịch vụ khác nhau mà thiết bị đó cung cấp còn các Endpoint chính là các cổng cần thiết cho mỗi dịch vụ. Tương ứng với khái niệm trong kiến trúc TCP/IP, ví dụ giao thức FTP là giao thức sử dụng để truyền file sẽ sử dụng hai cổng 20,21. Trong khi đó giao thức HTTP lại sử dụng port 80, giao thức Telnet sử dụng port 23.

Thực tế các Endpoint cũng như các Port trong chuẩn TCP/IP đóng vai trò như các bộ đệm truyền/nhận dữ liệu. Nhờ việc sử dụng nhiều bộ đệm mà các quá trình truyền thông được tiến hành song song và cho tốc độ cao hơn, bên cạnh đó giúp cho việc phân tách các dịch vụ khác nhau. Với chuẩn USB, các thiết bị được thiết kế với tối đa là 16 Enppoint. Các Endpoint được phân loại theo hướng truyền dữ liệu nhìn từ phía USB Host. Cụ thể

Các Endpoint truyền dữ liệu từ USB Device tới USB Host là endpoint IN

Các Endoint truyền dữ liệu từ USB Host tới USB Device là endpoint OUT

Hình bên trái là kết quả chúng ta xem các thông tin cấu hình của một thiết bị USB hoạt động với 1 Interface, Interface này sử dụng hai Endpoint (0x01 và 0x82), 1 Endpoint In và một Endpoint Out, cả hai Endpoint hoạt động ở chế độ Bulk Transfer (Chi tiết chúng ta sẽ xem ở phần chế độ truyền ngay sau đây). Trên Linux, các bạn có thể dùng lệnh lsusb để xem các thông tin này với bất cứ thiết bị USB nào cắm vào Bus.
Đề truyền được dữ liệu theo chuẩn USB, các thiết bị USB Device phải được kết nối với USB Host thông qua các Pipe (đường ống). Mỗi Pipe sẽ nối một Endpoint của USB Device với USB Host.

4. Chế độ truyền

Chuẩn USB cung cấp cho chúng ta tổng cộng là 4 chế độ truyền, đáp ứng nhiều mục đích khác nhau tùy thuộc vào cơ chế truyền cũng như tốc độ mà người thiết kế mong muốn.

Truyền điều khiển (Control transfer): là chế độ truyền được tất cả các thiết bị USB hỗ trợ để truyền các thông tin điều khiển với tốc độ tương đối chậm.

Truyền ngắt (Interrupt transfer): sử dụng cho các thiết bị cần truyền một lượng dữ liệu nhỏ, tuần hoàn theo thời gian ví dụ như chuột, bàn phím. Khi đó, ví dụ cứ 10s một lần USB Host sẽ gửi request xuống và USB Device sẽ trả dữ liệu về cho USB Host (với trường hợp Interrupt In Endpoint).

Truyền theo khối (Bulk transfer): sử dụng cho các thiết bị cần truyền một lượng dữ liệu lớn, yêu cầu độ chính xác tuyệt đối, không có ràng buộc quá chặt chẽ về thời gian thực ví dụ như thẻ nhớ USB, máy in. Cái này tương tự như giao thức TCP trong mạng Ethernet

Truyền đẳng thời (Isochronos transfer): sử dụng cho các thiết bị cần truyền một lượng dữ liệu lớn với tốc độ rất nhanh, đảm bảo ràng buộc về thời gian thực tuy nhiên chấp nhận hy sinh độ chính xác ở một mức nhất định như các thiết bị nghe nhạc, xem phim kết nối theo chuẩn USB. Chuẩn này tương tự giao thức UDP trong mạng Ethernet.

Trên đây là bài giới thiệu về chuẩn USB. Thực sự để dùng chuẩn USB thì không quá khó nhưng để hiểu cặn kẽ chuẩn USB thì thực sự chúng ta cần đầu tư nhiều thời gian và công sức. Hy vọng bài viết ngắn này sẽ giúp các bạn trong quá trình học tập và làm việc. Chi tiết các bạn có thể tham khảo sách "USB Complete" tuy nhiên theo kinh nghiệm cá nhân tác giả, các bạn nên kết hợp giữa đọc sách và tự mình lập trình cho các thiết bị chuẩn USB, khi đó các bạn mới nắm vững được. Tùy vào chuyên môn của các bạn, có rất nhiều bài toán có thể giúp các bạn nắm vững hơn về chuẩn USB, tác giả xin đưa ra một số ví dụ để các bạn tham khảo theo các mức độ từ dễ tới khó.

Lập trình giao tiếp với một thiết bị USB với máy tính: USB Joystick

Tạo ra một thiết bị làm việc theo chuẩn USB: có thể sử dụng các IC trên thị trường như PIC4550, AT91SAM256...

Lập trình giao tiếp với các thiết bị USB chuyên dụng sử dụng thư viện WinUSB của Microsoft

Tạo driver cho chuẩn USB trên Linux, lập trình kết nối với thiết bị.

Tác giả: thuanpv

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên

 

 

Related Articles

Chat Zalo