MỞ ĐẦU
Trong thời đại bùng nổ công nghệ thông tin như hiện nay, tin học đã,
đang và sẽ được ứng dụng rộng rãi trong rất nhiều lĩnh vực của đời sống xã hội.
Không nằm ngoài tầm ảnh hưởng mạnh mẽ của tin học là những người làm
công tác giảng dạy, đào tạo, nghiên cứu, . Khi nói đến họ thì ta có thể thấy
ngay rằng công việc của họ sẽ thật khó suôn sẻ khi thiếu chiếc máy tính cá
nhân và các phần mềm đi kèm như bộ Microsoft office với Word, Excel,
PowerPoint và nhiều những ứng dụng khác. Bên cạnh Word và Excel đã tỏ rõ
sức mạnh từ lâu thì thời gian gần đây, PowerPoint cùng với chiếc máy chiếu
càng ngày càng cho thấy ưu điểm vượt trội của nó trong việc tăng hiệu quả diễn
đạt cho một vấn đề bất kỳ. Như vậy đi kèm với các gói phần mềm thì để sử
dụng chúng một cách hiệu quả còn có những thiết bị đầu cuối. Các thiết bị đầu
cuối làm tăng đáng kể khả năng cho chiếc máy tính cá nhân. Trước đây các
thiết bị đầu cuối được ghép nối với máy tính thông qua rất nhiều giao diện như
cổng com, cổng máy in, PS/2. Hiện nay thì dường như đã dần quy về một mối,
đó chính là ghép nối thiết bị đầu cuối với máy tính thông qua cổng USB. Cổng
USB với đường truyền đa năng đúng như tên gọi của nó (Universal Serial Bus),
có khả năng cung cấp nhiều phương thức truyền dẫn cũng như tốc độ truyền
khác nhau cho các ứng dụng khác nhau. Chính vì vậy đồ án này sẽ tập trung
tìm hiểu về chuẩn USB 2.0 và ứng dụng chuẩn USB để thiết kế điều khiển từ
xa cho trình diễn PowerPoint.
Sản phẩm bao gồm: Một bộ phát là thiết bị cầm tay dùng pin, có 3 nút
bấm. Nút Up giúp người sử dụng trở lại slide ngay trước slide hiện hành, nút
Down giúp đi tới slide ngay sau slide hiện hành còn nút light thì bật đèn laser
tạo ra đốm sáng nhỏ giúp cho việc trình diễn đạt hiệu quả diễn đạt cao hơn.
Không thể thiếu là một bộ thu ghép nối với máy tính thông qua cổng USB. Bộ
thu này nhận lệnh từ bộ phát và truyền đạt lại lệnh đó tới máy tính. Bộ thu dễ
sử dụng, không cần driver và lấy nguồn từ máy tính.
Hiện nay để thiết kế thành công sản phẩm trên thì có khá nhiều phương
án như: Bộ phát có thể dùng sóng cao tần hoặc năng lượng hồng ngoại để
truyền lệnh điều khiển tới bộ thu. Về phía bộ thu, để thực hiện chức năng giao
tiếp USB với máy tính thì cần có một bộ điều khiển USB. Để thực hiện bộ điều
khiển này thì có thể dùng các công nghệ như:C; PSoC; SPLD; CPLD;
FPGA .
Phương án thì có nhiều như vậy nên vấn đề ở đây là lựa chọn phương án
nào cho hợp lý và khả thi nhất. Sau một thời gian tìm hiểu, phương án đã được
lựa chọn cho đề tài là: bộ phát sử dụng sóng cao tần để truyền lệnh điều khiển,
về phía bộ thu sẽ thực hiện bộ điều khiển USB bằng vi điều khiển có tích hợp
một bộ điều khiển USB chưa được cấu hình.
Với những gì đã được giới thiệu ở trên thì có thể thấy rằng để thực hiện
đề tài cần có kiến thức cơ bản về một số mảng chính sau: Chuẩn USB 2.0, họ vi
điều khiển PIC (vì vi điều khiển mà ta sử dụng trong đề tài là vi điều khiển PIC
của hãng MicroChip), truyền tín hiệu điều khiển sử dụng sóng cao tần. Chính
vì vậy mà trong khuôn khổ của đồ án này sẽ tập trung trình bày các nội dung
sau:
Phần I: Sơ lược về chuẩn USB (gồm 6 chương):
ã Chương 1: Giới thiệu chung về chuẩn USB
Chương này sẽ đưa ra cái nhìn khái quát, sơ lược về USB
gồm khái niệm, ưu điểm của USB, mô tả hệ thống USB và cáp
USB.
ã Chương 2: Mô hình luồng dữ liệu USB
Chương này mô tả cách thực hiện một kết nối USB, cách
mà theo đó dữ liệu được truyền qua USB.
ã Chương 3: Tầng giao thức USB
Chương này đem lại một cái nhìn từ dưới lên trên của giao
thức USB, bắt đầu với các định nghĩa trường và gói, sau đó là
mô tả các giao tác và cuối cùng là việc đồng bộ và thử lại.
ã Chương 4: Các lớp thiết bị được định nghĩa
Chương này giới thiệu các lớp thiết bị được định nghĩa,
giúp những người thiết kế thiết bị đầu cuối USB nhận định xem
sản phẩm của mình có thuộc lớp thiết bị được định nghĩa hay
không (nếu thuộc lớp thiết bị được định nghĩa thì có thể bỏ qua
khâu viết driver cho sản phẩm).
ã Chương 5: Lớp thiết bị giao diện người sử dụng
Chương này sẽ trình bày về lớp HID với mục đích giúp
người đọc nhận định xem một thiết bị nào đó có phù hợp để gán
vào lớp HID hay không. Chỉ ra các yêu cầu đối với vi chương
trình (firmware) để định nghĩa một thiết bị thuộc lớp HID và
cho phép nó trao đổi dữ liệu với máy tính chủ.
ãChương 6: Quá trình tìm hiểu của máy chủ đối với thiết bị
Chương này mô tả những bước xử lý của máy chủ để máy
chủ có thể tìm hiểu các thông tin về thiết bị như: Tốc độ của
thiết bị, các bộ mô tả của thiết bị. Và việc gán một bộ điều
khiển (driver) cho thiết bị.
Phần II: Thiết kế sản phẩm (gồm 2 chương):
ã Chương 7: Thiết kế bộ phát
Chương này sẽ trình bày một số lưu ý khi thiết kế điều
khiển từ xa sử dụng sóng cao tần (RF), sơ đồ khối hệ thống cho
sản phẩm của đề tài và phần thiết kế bộ phát của sản phẩm.
ã Chương 8: Thiết kế bộ thu
Chương này sẽ giới thiệu sơ qua về họ vi điều khiển PIC-
loại vi điều khiển mà ta sử dụng cho sản phẩm của đề tài và
phần phân tích thiết kế bộ thu.
Trong phần I thì các kiến thức về chuẩn USB mới chỉ được trình bày
vắn tắt và còn thiếu một số kiến thức đáng quan tâm của chuẩn USB. Do yêu
cầu về sự súc tích của nội dung đồ án cũng như lý do là các phần đó không liên
quan trực tiếp đến việc thiết kế sản phẩm nên không trình bày ở đây.
CHÚ THÍCH : TÀI LIỆU TRÊN GỒM FILE PDF + WORD
71 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 5171 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Tìm hiểu về chuẩn USB 2.0 và Ứng dụng chuẩn USB để thiết kế điều khiển từ xa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
42
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
loại âm thanh nào khác. Các thiết bị thuộc lớp thiết bị âm thanh có thể sử dụng
kiểu truyền đẳng thời cho luồng âm thanh hoặc kiểu truyền khối cho dữ liệu đã
được mã hoá bằng giao thức MIDI (Musical Instrument Digital Interface)
4.2.2 Thiết bị giao diện thẻ thông minh
Thẻ thông minh là các loại thẻ quen thuộc được sử dụng cho việc gọi
điện thoại, thẻ quà tặng, thẻ ra vào, trả cước cầu đường, bảo hiểm y tế, giải mã
cho các bộ thu truyền hình vệ tinh và nhiều các ứng dụng khác, những ứng
dụng này yêu cầu một khối lượng thông tin nhỏ hoặc trung bình với sự truy cập
dữ liệu lưu trong thẻ một cách dễ dàng.
Mỗi thẻ là một module bao gồm bộ nhớ và thường thêm một CPU.
Nhiều thẻ cho phép cập nhật nội dung của chúng để thay đổi một số thông tin
ví dụ như giá trị tiền trong thẻ tín dụng hay mã của thẻ.
Để truy cập một thẻ thông minh, bạn kết nối nó với thiết bị giao diện thẻ
thông minh (CCID-Chip Card Interface Device) thường bằng cách nhét thẻ vào
khe đọc hoặc soi nó trước các bộ đọc đối với loại thẻ không cần tiếp xúc. USB
định nghĩa lớp thiết bị giao diện thẻ thông minh vì có một số thiết bị giao diện
thẻ thông minh (CCID) sử dụng giao diện USB để giao tiếp với máy tính.
4.2.3 Lớp các thiết bị truyền thông
Lớp các thiết bị truyền thông bao gồm hai loại thiết bị chính là: thiết bị
thoại và các thiết bị mạng tốc độ trung bình. Thiết bị thoại bao gồm điện thoại
tương tự ,modem tương tự, Các bộ thích nghi đầu cuối ISDN và điện thoại số.
Các thiết bị mạng bao gồm modem ADSL, modem điện tín, 10BASE-T
Ethernet adapter và hub
4.2.4 Lớp thiết bị bảo mật
Lớp thiết bị bảo mật định nghĩa cách thức giúp ta điều khiển sự truy cập
tới các file, âm nhạc, hình ảnh hoặc các dữ liệu khác được truyền trên bus (ví
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
43
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
dụ muốn copy một file nào đó lên thiết bị hoặc đọc nội dung được lưu trong
thiết bị thì phải có password).
4.2.5 Lớp thiết bị cho phép cập nhật firmware từ Host
Lớp thiết bị cập nhật firmware định nghĩa một giao thức cho phép máy
chủ gửi firmware tăng cường hoặc vá cho một thiết bị. Sau khi nhận sự nâng
cấp firmware thì thiết bị sẽ được thiết lập lại để sử dụng firmware mới của nó.
4.2.6 Lớp thiết bị giao diện người sử dụng
Lớp thiết bị giao diện người sử dụng bao gồm các loại bàn phím, thiết bị
con trỏ và các bộ điều khiển dùng để chơi game. Đối với những thiết bị này,
máy chủ đọc thông báo từ thiết bị và gần như lập tức thực hiện theo các yêu
cầu của người sử dụng (các yêu cầu này mang tính giao tiếp trực tiếp giữa
người sử dụng và máy) như sự ấn phím, sự di chuyển của con chuột. Máy chủ
phải đáp ứng đủ nhanh sao cho người sử dụng không nhận thấy độ trễ rất nhỏ
giữa yêu cầu của họ và các đáp ứng của máy.
4.2.7 Cầu liên kết dữ liệu hồng ngoại (Infrared Data Association
Bridge)
Lớp thiết bị cầu liên kết dữ liệu hồng ngoại định nghĩa những yêu cầu về
phần cứng và các giao thức cho phép việc truyền tải dữ liệu ở khoảng cách
ngắn thông qua năng lượng hồng ngoại. Thiết bị cầu liên kết dữ liệu hồng ngoại
sẽ được nối với máy chủ qua cổng USB cho phép máy chủ sử dụng giao diện
USB để giám sát, điều khiển và truyền dữ liệu qua một giao diện hồng ngoại.
4.2.8 Lớp thiết bị lưu trữ thứ cấp
Lớp thiết bị lưu trữ thứ cấp chính là các thiết bị có thể truyền dữ liệu
theo cả hai hướng (từ máy chủ tới thiết bị hoặc từ thiết bị về máy chủ). Điển
hình cho lớp thiết bị này có thể kể đến các ổ đĩa mềm, ổ đĩa cứng, ổ CD, ổ
DVD và ổ nhớ flash. Các loại camera cũng có thể sử dụng lớp lưu trữ thứ cấp
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
44
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
để cho phép việc truy cập các file hình ảnh trong bộ nhớ của camera. Trong các
máy tính sử dụng hệ điều hành Windows, các thiết bị thuộc lớp lưu trữ thứ cấp
sẽ xuất hiện như các ổ đĩa trong cửa sổ My Computer và hệ điều hành cho phép
người sử dụng sao chép, di chuyển và xoá các dữ liệu trong các thiết bị đó.
4.2.9 Lớp các thiết bị in ấn
Lớp các thiết bị in ấn được định nghĩa cho các thiết bị chuyển dữ liệu
nhận được từ máy chủ thành định dạng chữ hay hình ảnh trên giấy hay vật liệu
nào đó
4.2.10 Lớp thiết bị lưu giữ ảnh tĩnh
Lớp thiết bị này bao gồm Các loại máy ảnh và máy quét. Công việc chủ
yếu của lớp thiết bị này là truyền dữ liệu hình ảnh từ thiết bị lên máy tính chủ.
Ngoài ra một vài thiết bị còn có thể nhận dữ liệu từ máy tính. Nếu tất cả những
gì ta cần là truyền các file hình ảnh từ một máy ảnh lên máy tính chủ thì ta có
thể đưa một máy ảnh vào lớp thiết bị lưu trữ thứ cấp.
4.2.11 Lớp các thiết bị đo lường và kiểm tra
Lớp các thiết bị đo lường và kiểm tra là để dành cho các thiết bị đo đạc
như các bộ ADC, DAC, cảm biến và các bộ chuyển đổi (chuyển đổi đơn vị vật
lý chẳng hạn). Các thiết bị này có thể là một khối riêng rẽ hoặc là một cạc trong
một máy tính lớn.
4.2.12 Lớp các thiết bị ảnh động
Lớp các thiết bị ảnh động hỗ trợ các thiết bị ghi hình số xách tay,
webcam, và một số thiết bị có chức năng gửi, nhận hay can chỉnh ảnh động.
Lớp thiết bị này cũng hỗ trợ việc truyền các ảnh tĩnh từ các thiết bị ảnh động.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
45
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
4.2.13 Thực hiện các chức năng không tiêu chuẩn
Một vài thiết bị không có sự phù hợp rõ rệt với một lớp thiết bị được
định nghĩa. Ví dụ như các thiết bị điều khiển động cơ, rơ le, hay các cơ cấu
chấp hành khác. Một ví dụ khác là các thiết bị kết nối giữa hai máy vi tính (Cầu
sử dụng USB). Nếu một thiết bị đầu cuối mà không phù hợp để gán vào một
lớp được định nghĩa thì người thiết kế sẽ phải viết driver cho thiết bị để cung
cấp cho máy chủ các thông tin giúp nó giao tiếp được với thiết bị đó.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
46
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
Chương 5: Lớp thiết bị giao diện người
sử dụng
Lớp thiết bị giao diện người sử dụng (HID-Human Interface Device) là
một trong những lớp đầu tiên được hệ điều hành windows hỗ trợ. Trên những
chiếc máy tính cá nhân sử dụng Windows 98 hoặc các phiên bản muộn hơn thì
những ứng dụng có thể giao tiếp với các thiết bị giao diện người sử dụng bằng
cách sử dụng các bộ điều khiển (driver) được xây dựng sẵn trong hệ điều hành.
Cũng chính vì lý do trên mà nhiều nhà cung cấp thiết bị đầu cuối USB sử dụng
lớp thiết bị giao diện người sử dụng cho sản phẩm của họ. Chương này sẽ trình
bày về lớp HID với mục đích giúp người đọc nhận định xem một thiết bị nào
đó có phù hợp để gán vào lớp HID hay không. Chỉ ra các yêu cầu đối với vi
chương trình (firmware) để định nghĩa một thiết bị thuộc lớp HID và cho phép
nó trao đổi dữ liệu với máy tính chủ. Chương cũng sẽ giới thiệu 6 yêu cầu điều
khiển cụ thể.
5.1 Khái niệm về HID
Từ “giao diện người sử dụng” trong tên gọi của lớp HID để chỉ ra sự
tương tác trực tiếp giữa con người với thiết bị thuộc lớp này. Ví dụ một con
chuột có thể phát hiện việc chúng ta di chuyển hay nhấn chuột để gửi thông tin
lên máy chủ và máy chủ sử dụng thông tin này để đem lại các đáp ứng mà
người sử dụng đang mong đợi trong một ứng dụng cụ thể nào đó. Bên cạnh các
thiết bị phổ biến của lớp HID như bàn phím, con chuột, cần điều khiển
(joystick) thì lớp HID còn bao gồm một số thiết bị khác như các núm điều
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
47
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
chỉnh, các chuyển mạch, nút nhấn, thanh trượt, điều khiển từ xa, bàn phím điện
thoại, các thiết bị điều khiển dùng cho game như bao tay, bánh lái.
Tuy nhiên một thiết bị thuộc lớp HID không nhất thiết phải có một giao
diện người sử dụng. Một thiết bị có thể gán vào lớp HID khi các chức năng của
nó nằm gọn trong các giới hạn của đặc tả lớp HID. Dưới đây là các giới hạn và
khả năng chủ của các thiết bị thuộc lớp HID:
-
-
-
-
-
Tất cả dữ liệu được trao đổi dưới cùng một dạng cấu trúc được gọi là
báo cáo (report). Máy chủ gửi và nhận dữ liệu bằng cách gửi các báo
cáo và yêu cầu các báo cáo trong các phương thức truyền điều khiển
hoặc truyền ngắt. Định dạng báo cáo là khá linh hoạt và nó có thể áp
dụng cho rất nhiều dạng của dữ liệu song đối với mỗi một báo cáo đã
được định nghĩa thì kích cỡ của nó là xác định.
Một giao diện HID phải có một điểm cuối ngắt vào (interrupt IN
enpoint) để gửi dữ liệu lên máy chủ.
Một giao diện HID có thể có tối đa một điểm cuối ngắt vào và một
điểm cuối ngắt ra (interrupt OUT enpoint). Nếu ta cần nhiều điểm
cuối ngắt hơn nữa thì ta có thể tạo một thiết bị đa chức năng gồm
nhiều thiết bị HID ở trong nó. Một ứng dụng phải đảm bảo sự điều
khiển riêng biệt tới từng HID trong thiết bị đa chức năng.
Điểm cuối ngắt vào cho phép HID gửi thông tin lên máy chủ ở
những thời điểm mà không hề biết trước. Ví dụ không thể có cách
nào giúp máy tính biết trước khi nào người sử dụng ấn một phím nào
đó trên bàn phím do đó bộ điều khiển máy chủ sử dụng giao tác ngắt
để thăm dò có định kỳ nhằm thu lượm dữ liệu mới.
Tốc độ trao đổi dữ liệu là hạn chế, đặc biệt là khi truyền ở tốc độ
thấp hoặc toàn tốc. Điểm cuối ngắt tốc độ thấp không thể vượt quá
800 bytes/sec [2], với các điểm cuối toàn tốc thì tốc độ tối đa là 64
KB/s [2] còn điểm cuối ngắt tốc độ cao thì tốc độ tối đa vào khoảng
24 MB/s [2].
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
48
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
-
Với bản Windows 98 Gold thì nó chỉ hỗ trợ USB 1.0 [2] tức là
không hỗ trợ điểm cuối ngắt ra do đó tất cả dữ liệu truyền từ máy
chủ xuống thiết bị phải sử dụng truyền điều khiển
Lưu ý là giao diện HID có thể chỉ là một trong nhiều kiểu giao diện
được hỗ trợ bởi một thiết bị. Ví dụ một loa USB có thể sử dụng phương thức
truyền đẳng thời cho âm thanh đồng thời cũng có thể có một giao diện HID cho
việc điều khiển độ to nhỏ, cân bằng, treble và bass. Một giao diện HID thường
sẽ rẻ hơn cách thức điều khiển vật lý truyền thống trên một thiết bị.
5.2 Các yêu cầu về phần cứng
5.2.1 Các điểm cuối
Tất cả các kiểu truyền của HID sử dụng hoặc điểm cuối điều khiển hoặc
điểm cuối ngắt. Tất cả các HID phải có một điểm cuối ngắt vào để gửi dữ liệu
tới máy chủ. Một điểm cuối ngắt ra là tuỳ chọn.
5.2.2 Các loại báo cáo (Report)
Yêu cầu đối với một điểm cuối ngắt vào cho thấy mọi HID phải có tối
thiểu là một report đầu vào được định nghĩa trong bộ mô tả report của HID. các
report đầu ra và report đặc biệt là tuỳ chọn.
5.2.3 Các yêu cầu có thể gửi từ Host tới thiết bị trong kiểu truyền
điều khiển
Đặc tả HID định nghĩa 6 yêu cầu cụ thể mà Host có thể gửi tới thiết bị.
Hai trong số đó là Set_Report và Get_Report, đem lại cách để Host và thiết bị
trao đổi report thông qua kiểu truyền điều khiển. Host sử dụng Set_Report để
gửi report và Get_Report để nhận thông báo. Bốn yêu cầu còn lại liên quan tới
việc cấu hình thiết bị. Các yêu cầu Set_Idle và Get_Idle dùng để thiết lập và
đọc tốc độ rỗi, cái cho biết có hay không việc một thiết bị gửi lại dữ liệu không
hề thay đổi kể từ lần thăm dò cuối. Các yêu cầu Set_Protocol và Get_Protocol
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
49
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
thiết lập và đọc giá trị giao thức. Giá trị giao thức sẽ cho biết một thiết bị có thể
được sử dụng hay không ngay cả khi bộ điều khiển đầy đủ của nó chưa được
tải trên Host (ví dụ con chuột và bàn phím có thể thực hiện chức năng của nó
ngay trong giai đoạn khởi động - khi mà bộ điều khiển chính thức của nó chưa
được tải ở trên Host). Các loại yêu cầu vừa nêu sẽ được trình bày chi tiết hơn ở
đoạn sau.
5.2.4 Kiểu truyền ngắt
Các điểm cuối ngắt đem lại sự luôn phiên trong việc trao đổi dữ liệu, đặc
biệt khi phía thu phải có được dữ liệu một cách nhanh chóng hoặc định kỳ.
Truyền điều khiển có thể bị trễ nếu bus quá bận trong khi băng thông cho
truyền ngắt lại được đảm bảo.
Khả năng thực hiện truyền ngắt ra (OUT) được bổ sung ở phiên bản 1.1
của chuẩn USB. Windows 98 SE là phiên bản Windows đầu tiên hỗ trợ USB
1.1 và HID 1.1 [2].
5.3 Các yêu cầu về vi chương trình (Firmware)
Vi chương trình phải phù hợp với các yêu cầu của lớp thiết bị. Các bộ
mô tả của thiết bị phải bao gồm một bộ mô tả giao diện để định nghĩa thiết bị
thuộc lớp HID, một bộ mô tả HID và một bộ mô tả điểm cuối ngắt vào (IN). Bộ
mô tả điểm cuối ngắt ra (OUT) là tuỳ chọn. Vi chương trình cũng phải chứa
một bộ mô tả report.
Một HID có thể hỗ trợ một hay nhiều report. Bộ mô tả report chỉ ra kích
thước và nội dung của dữ liệu chứa trong report cũng như cách mà phía thu sẽ
sử dụng dữ liệu nhận được. Các giá trị trong bộ mô tả sẽ chỉ ra mỗi report là
một report đầu vào, đầu ra hay là một report đặc biệt. Máy chủ nhận dữ liệu
chứa trong report đầu vào và gửi dữ liệu chứa trong report đầu ra. Một report
đặc biệt có thể được truyền theo cả hai hướng
Mọi thiết bị nên hỗ trợ tối thiểu một report đầu vào để máy chủ có thể
thu nhận dữ liệu thông qua truyền ngắt hoặc truyền điều khiển. Các report đầu
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
50
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
ra là tuỳ chọn. Để tương thích với Windows 98 Gold thì các thiết bị sử dụng
các report đầu ra nên hỗ trợ việc gửi report thông qua truyền điều khiển. Sử
dụng truyền ngắt cho các thông báo đầu ra là tuỳ chọn. Còn các thông báo đặc
biệt cũng là tuỳ chọn và nếu được sử dụng thì nó luôn được truyền thông qua
truyền điều khiển.
5.4 Cách thức để chỉ ra một thiết bị thuộc lớp HID
Với bất kỳ thiết bị USB nào thuộc lớp HID thì các bộ mô tả của nó chỉ
cho máy chủ cái máy chủ cần biết để giao tiếp với thiết bị. Máy chủ tìm hiểu về
giao diện HID trong suốt quá trình thiết lập bằng cách gửi một yêu cầu
Get_Descriptor. Các bộ mô tả của một thiết bị thuộc lớp HID bao gồm: Bộ mô
tả thiết bị (Device Descriptor), bộ mô tả cấu hình (Configuration Descriptor),
bộ mô tả giao diện (Interface Descriptor), bộ mô tả HID (HID Descriptor), bộ
mô tả điểm cuối ngắt vào (IN interrupt Enpoint Descriptor), bộ mô tả điểm cuối
ngắt ra (OUT Interrupt Endpoint Descriptor) và bộ mô tả điểm cuối ngắt đặc
biệt (Feature Interrupt Endpoint Descriptor). Hai bộ mô tả sau cùng là tuỳ chọn
(tức có thể có hoặc không). Ngoài các bộ mô tả vừa liệt kê ở trên thiết bị thuộc
lớp HID còn phải có một bộ mô tả nữa đó là bộ mô tả Report (bộ mô tả Report
sẽ được nói cụ thể sau). Sau đây là một ví dụ về các bộ mô tả cho một thiết bị
thuộc lớp HID của một nhà cung cấp [2].
{
// Device Descriptor
0x12,
0x01,
0x0200,
0x00,
0x00,
0x00,
0x08,
0x0925,
// Descriptor size in bytes
// Descriptor type (Device)
// USB Specification release number (BCD) (2.00)
// Class Code
// Subclass code
// Protocol code
// Endpoint 0 maximum packet size
// Vendor ID (Lakeview Research)
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
51
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
0x1234,
0x0100,
0x01,
0x02,
0x00,
0x01
// Product ID
// Device release number (BCD)
// Manufacturer string index
// Product string index
// Device serial number string index
// Number of configurations
// Configuration Descriptor
0x09,
0x02,
0x0029,
0x01,
0x01,
0x00,
0xA0,
0x50,
// Descriptor size in bytes
// Descriptor type (Configuration)
// Total length of this and subordinate descriptors
// Number of interfaces in this configuration
// Index of this configuration
// Configuration string index
// Attributes (bus powered, remote wakeup supported)
// Maximum power consumption (100 mA)
// Interface Descriptor
0x09,
0x04,
0x00,
0x00,
0x02,
0x03,
0x00,
0x00,
0x00,
// Descriptor size in bytes
// Descriptor type (Interface)
// Interface Number
// Alternate Setting Number
// Number of endpoints in this interface
// Interface class (HID)
// Interface subclass
// Interface protocol
// Interface string index
// HID Descriptor
0x09,
0x21,
0x0110,
// Descriptor size in bytes
// Descriptor type (HID)
// HID Spec. release number (BCD) (1.1)
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
52
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
0x00,
0x01,
0x22,
002F,
// Country code
// Number of subordinate class descriptors
// Descriptor type (report)
// Report descriptor size in bytes
// IN Interrupt Endpoint Descriptor
0x07,
0x05,
0x81,
0x03,
0x40,
0x0A,
// Descriptor size in bytes
// Descriptor type (Endpoint)
// Endpoint number and direction (1 IN)
// Transfer type (interrupt)
// Maximum packet size
// Polling interval (milliseconds)
// OUT Interrupt Endpoint Descriptor
0x07,
0x05,
0x01,
0x03,
0x40,
0x0A
// Descriptor size in bytes
// Descriptor type (Endpoint)
// Endpoint number and direction (1 OUT)
// Transfer type (interrupt)
// Maximum packet size
// Polling interval (milliseconds)
}
Trong ví dụ trên, ta thấy dòng thứ sáu của bộ mô tả giao diện (Interface
Descriptor) có giá trị là 03 h để chỉ ra giao diện của thiết bị là giao diện của
một HID. Các trường khác đáng lưu ý trong bộ mô tả giao diện là trường
subclass và protocol ở các dòng thứ 7 và 8. Nếu bit subclass=1 thì có nghĩa là
thiết bị hỗ trợ giao diện khởi động. Một HID với giao diện khởi động sẽ có thể
thực hiện một phần chức năng của mình khi mà driver của nó chưa được máy
chủ tải đến. Hoàn cảnh này có thể xuất hiện khi máy tính khởi động trực tiếp từ
DOS hoặc khi sử dụng chế độ an toàn (safe mode) của Windows để gỡ lỗi hệ
thống. Một bàn phím hoặc con chuột với giao diện khởi động có thể sử dụng
một giao thức đã được đơn giản hoá được hỗ trợ bởi hệ thống vào ra cơ sở
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
53
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
(BIOS) của nhiều máy tính chủ. Trường protocol=1 tức là thiết bị hỗ trợ giao
diện bàn phím còn nếu bằng 2 thì thiết bị hỗ trợ giao diện con chuột.
Bộ mô tả HID (HID Descriptor) là bộ mô tả được bổ sung cho lớp HID.
Bộ mô tả này có thể có 7 trường hoặc nhiều hơn tuỳ thuộc vào số lượng các bộ
mô tả được thêm vào cho thiết bị:
-
-
-
-
-
-
-
Trường bLength có kích thước 1 byte cho biết độ dài của bộ mô tả
HID tính theo byte.
Trường bDescriptorType có giá trị là 21h để chỉ ra bộ mô tả này là
bộ mô tả HID.
Trường bcdHID có kích thước 2 byte để chỉ ra phiên bản USB mà
thiết bị tuân theo.
Trường bCountryCode, Nếu thiết bị được sử dụng chỉ trong phạm vi
địa lý của một nước nào đó thì trường này sẽ mang mã của quốc gia
đó (Đặc tả HID có danh sách mã của các nước). Nếu việc sử dụng
thiết bị không phụ thuộc vào vị trí địa lý thì trường này có giá trị 00h
Trường bNumDescriptors chỉ ra số lượng các bộ mô tả lớp thuộc cấp
dưới của bộ mô tả này.
Trường bDescriptorType chỉ ra loại của bộ mô tả thuộc cấp dưới của
bộ mô tả này. (Ví dụ như trường này có giá trị 22h để chỉ ra rằng bộ
mô tả cấp dưới của nó là bộ mô tả Report)
wDescriptorLength cho biết kích thước tổng cộng của các bộ mô tả
đã được mô tả trước nó và phần kích thước kể từ đầu cho đến trường
này của bộ mô tả HID.
Nếu thiết bị có thêm một bộ mô tả vật lý (physical descriptor) thì bộ mô
tả HID sẽ có thêm hai trường nữa được liệt kê lần lượt là:
-
-
bDescriptorType có giá trị là 23h để chỉ ra bộ mô tả cấp dưới là bộ
mô tả vật lý.
wDescriptorLength cho biết tổng kích thước của các bộ mô tả đã
được mô tả tính từ đầu cho đến hết trường này.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
54
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
5.5 Bộ mô tả báo cáo (Report Descriptor)
Một bộ mô tả thông báo định nghĩa khuôn dạng và công dụng của dữ
liệu chứa trong các report. Ví dụ nếu thiết bị là một con chuột thì dữ liệu trong
report sẽ thông báo cho máy chủ biết sự di chuyển của con chuột và sự click
chuột, nếu thiết bị là một bộ điều khiển rơle thì dữ liệu trong báo cáo sẽ cho
biết rơle nào mở và rơle nào đóng.
Bộ mô tả report cần phải đủ linh hoạt để điều khiển thiết bị với các mục
đích khác nhau. Dữ liệu lưu trong report cần được tối ưu hoá về kích thước để
tránh lãng phí không gian lưu trữ và rút ngắn thời gian khi truyền trên bus.
Sau đây là một ví dụ về bộ mô tả report của một keyboard và sẽ trình
bày một số kiến thức liên quan đến bộ mô tả report thông qua việc giải thích ví
dụ này ( hiểu đầy đủ và cặn kẽ về bộ mô tả report là một điều không hề đơn
giản vì vậy mà ví dụ này chỉ mới nêu ra được một phần kiến thức về bộ mô tả).
Để tạo bộ mô tả Report cho lớp HID ta sử dụng phần mềm “HID Descriptor
Tool”, đây là một tiện ích miễn phí và có thể tải về từ địa chỉ sau:
util/download.asp?url=/intelpress/usb/Examples/
ZipFiles/DT.zip&title=HID+Descriptor+Tool&fullpg=3&site=Developer
Ví dụ mẫu cho một bộ mô tả report của keyboard [8]
USAGE_PAGE (Generic Desktop)
USAGE (Keyboard)
COLLECTION (Application)
USAGE_PAGE (Keyboard)
USAGE_MINIMUM (Keyboard LeftControl)
USAGE_MAXIMUM (Keyboard Right GUI)
LOGICAL_MINIMUM (0)
LOGICAL_MAXIMUM (1)
REPORT_SIZE (1)
REPORT_COUNT (8)
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
05
09
A1
05
19
29
15
25
75
95
01
06
01
07
E0
E7
00
01
01
08
55
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
INPUT (Data, Var, Abs)
REPORT_COUNT (1)
REPORT_SIZE (1)
USAGE_PAGE (LEDs)
USAGE_MINIMUM (Num Lock)
USAGE_MAXIMUM (Kana)
OUTPUT (Data, Var, Abs)
REPORT_COUNT (1)
REPORT_SIZE (3)
OUTPUT (Cnst, Var, Abs)
REPORT_COUNT (6)
REPORT_SIZE (8)
LOGICAL_MINIMUM (0)
LOGICAL_MAXIMUM (101)
USAGE_PAGE (Keyboard)
81
95
75
05
19
29
91
95
75
91
95
75
15
25
05
02
01
01
08
01
05
02
01
03
03
06
08
00
65
07
USAGE_MINIMUM (Reserved (no event indicated)) 19
00
USAGE_MAXIMUM (Keyboard Application)
INPUT (Data, Aray, Abs)
29
81
65
00
END_COLLECTION
Khi nhìn vào ví dụ trên ta thấy có 2 cột số phía bên phải, đó chính là các
mã hex mà host nhận được khi nó gửi yêu cầu Get_Descriptor. Cột thứ nhất thể
hiện mã hex của một mục (một mục sẽ được viết bằng chữ in hoa), cột thứ hai
là mã hex thể hiện các thiết lập cụ thể của mục. Bộ mô tả bắt đầu bằng mục
USAGE_PAGE có mã hex là 05h, mục này chỉ ra chức năng tổng quát của
thiết bị. Hai byte sau gọi là USAGE ID, trong ví dụ này có giá trị là 01h để chỉ
ra Generic Desktop. Generic Desktop là loại USAGE ID dùng cho các thiết bị
kiểu như bàn phím, con chuột hay joystick. Tiếp theo ta có mục USAGE, mục
này thực chất chỉ là một USAGE ID của mục USAGE_PAGE, cột thứ nhất có
giá trị là 09h để chỉ ra mục này là một USAGE ID, còn cột thứ hai có giá trị là
06h để chỉ ra loại USAGE ID này là Keyboard. Nhiều USAGE ID có thể có
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
56
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
cùng chung một USAGE_PAGE. Sau khi một USAGE_PAGE xuất hiện thì tất
cả các USAGE ID theo sau nó đều là các USAGE ID của nó. Điều này được áp
dụng cho đến khi xuất hiện một USAGE_PAGE mới. Mục đích của 2 dòng đầu
trong bộ mô tả report ở trên là để báo cho host biết thiết bị của ta có công dụng
tổng quát là Generic Desktop và chức năng cụ thể của nó là một keyboard.
Dòng thứ ba là mục COLLECTION, mục này được dùng để nhóm các mục có
liên quan với nhau. Có 3 loại COLLECTION được định nghĩa là application,
physical và logical, ngoài ra còn một loại không được định nghĩa là Vendor
defined. Một application COLLECTION chứa các mục có chung một mục đích
hoặc các mục cùng thực hiện một chức năng đơn nhất. Tất cả các bộ mô tả
report đều phải có một application COLLECTION và các mục report (tức các
mục của Input report, Output report hay feature report) phải được đặt trong
application COLLECTION. Một COLLECTION sẽ kết thúc với mục
END_COLLECTION.
Dòng tiếp theo là mục USAGE_PAGE (Keyboard), mục này chỉ ra chức
năng của Input report bởi nó được khai báo trong phần của Input report. Phần
khai báo của một report sẽ bắt đầu ngay sau mục COLLECTION hoặc ngay sau
sự kết thúc của một report được khai báo trước nó và phần khai báo của một
report kết thúc với mục INPUT nếu loại report là Input, OUTPUT nếu loại
report là Output, FEATURE nếu loại report là feature. Như vậy phần khai báo
cho input report trong ví dụ của ta bắt đầu với mục USAGE_PAGE (Keyboard)
và kết thúc tại mục INPUT (Data, Var, Abs)
USAGE_MINIMUM và USAGE_MAXIMUM được dùng để gán chỉ số
cho một mảng các USAGE ID sẽ được sử dụng của USAGE_PAGE.
USAGE_PAGE (Keyboard) có 232 USAGE được đánh chỉ số từ 0 (cho sự kiện
không có phím nào được ấn) tới 231 (ứng với sự kiện phím Right GUI được
ấn). Đối với ví dụ ta đang xét thì hai mục USAGE_MINIMUM và
USAGE_MAXIMUM chỉ ra rằng báo cáo INPUT sẽ cung cấp cho host sự kiện
một trong các phím LeftControl (E0h), LeftShift (E1h), LeftAlt (E2h), LeftGUI
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
57
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
(E3h), RightControl (E4h), RightShift (E5h), RightAlt (E6h), RightGUI (E7h)
được ấn hay không.
LOGICAL_MINIMUM và LOGICAL_MAXIMUM định nghĩa giới hạn
cho các giá trị được báo cáo. Giới hạn ở đây được hiểu là giới hạn logic, ví dụ
một thiết bị đo dòng điện trong dải từ 0A tới 10A có độ chia nhỏ nhất là 0.5A
thì LOGICAL_MINIMUM có giá trị là 0 còn LOGICAL_MAXIMUM có giá
trị là 20. Vì việc thông báo một phím được ấn tương đương với giá trị 1 còn
không được ấn tương đương với giá trị 0 nên trong ví dụ này
LOGICAL_MINIMUM có giá trị là 0 còn LOGICAL_MAXIMUM có giá trị
là 1.
REPORT_SIZE chỉ ra kích thước tính theo bit của một trường dữ liệu
trong report, còn REPORT_COUNT chỉ ra số trường dữ liệu được chứa trong
một report. Trong ví dụ của ta thì có thể thấy rằng report thông báo sự kiện
được ấn hay không của 8 phím nên sẽ có 8 trường và mỗi trường có kích thước
1 bit => REPORT_SIZE là 1 còn REPORT_COUNT là 8.
Mục INPUT chỉ ra sự kết thúc phần khai báo cho một Input report. Các
thông số (Data, Var, Abs) có ý nghĩa như sau:
-
-
Tại thuộc tính đầu ta có thể chọn là Data hoặc Cnst (constant). Data
có nghĩa là nội dung của report có thể thay đổi được tức có thể đọc
hoặc ghi nội dung của report một cách tuỳ ý. Cnst có nghĩa là nội
dung của report không được phép thay đổi, ta chỉ có thể đọc nội
dung của report mà thôi.
Tại thuộc tính thứ hai ta có thể chọn là Ary (Array) hoặc Var
(Variable). Trong ví dụ của chúng ta đã chọn là Var tức mỗi một
phím sẽ được biểu diễn riêng bởi một trường => ta mất 8 trường cho
8 phím và phần dữ liệu của report sẽ có kích thước là một byte. Việc
chọn là Var cho phép sự kiện nhiều phím cùng được ấn một lúc. Nếu
cũng trong ví dụ trên mà ta chọn là Ary thì 8 phím sẽ được biểu diễn
bởi một trường duy nhất và kích thước của trường tính theo bit là 3
=> REPORT_SIZE là 3 còn REPORT_COUNT là 1. Nếu ta chọn
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
58
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
như vậy thì kích thước của report sẽ rất gọn song gặp phải nhược
điểm là nó sẽ chỉ có thể thông báo sự kiện một phím nào đó được ấn.
Nếu có 2 phím trở lên được ấn đồng thời thì sự kiện này sẽ không
được phản ánh (Khi không có phím nào được ấn thì sẽ trả về gói
NAK thay vì một report).
Một cách hoàn toàn tương tự ta có thể giải thích phần còn lại của ví dụ
(trong phần còn lại của ví dụ có khai báo một Output report cho việc hiển thị
các đèn led trên bàn phím và một Input report khác để thông tin sự kiện một
phím không phải là phím đặc biệt được ấn (phím không đặc biệt trên bàn phím
được hiểu là các phím còn lại trên bàn phím sau khi đã loại trừ các phím Ctrl,
Alt, Shift, GUI).
5.6 Các yêu cầu mà host có thể gửi tới một thiết bị thuộc lớp
HID
Như đã trình bày ở mục 5.2.3 , đặc tả HID định nghĩa 6 yêu cầu mà Host
có thể gửi tới một thiết bị thuộc lớp HID. Tất cả các HID phải hỗ trợ
Get_Report, còn đối với các thiết bị hỗ trợ giao thức khởi động thì phải đáp
ứng được các yêu cầu Get_Protocol và Set_Protocol. Các yêu cầu còn lại gồm
Set_Report, Get_Idle và Set_Idle là tuỳ chọn, trừ trường hợp đối với một
keyboard sử dụng giao thức khởi động phải hỗ trợ Set_Idle. Nếu một HID
không có một điểm cuối ngắt ra (OUT) hoặc nếu HID đang giao tiếp với một
máy chủ chỉ hỗ trợ USB 1.0 như Windows 98 Gold chẳng hạn thì HID đó nếu
muốn nhận report từ host nó phải hỗ trợ Set_Report.
Các yêu cầu ở trên sẽ được Host gửi tới thiết bị trong giai đoạn setup
của truyền điều khiển. Giai đoạn setup của truyền điều khiển như đã được trình
bày trong mục 3.5.2 diễn ra như sau: ban đầu host phát ra gói thông báo setup,
theo sau đó là gói dữ liệu dành cho giao tác setup có kích thước của phần dữ
liệu là 8 byte, cuối cùng host chờ gói bắt tay ACK để biết rằng giao tác setup
có thành công hay không. Các yêu cầu của host được chứa trong 8 byte dữ liệu
của gói dữ liệu theo sau gói thông báo setup, nó có khuôn dạng như sau:
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
59
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
Hình 5.1: khuôn dạng gói dữ liệu của giai đoạn setup
trong kiểu truyền điều khiển
Có một số bit trong gói trên có giá trị giống nhau đối với cả 6 yêu cầu đó là:
- 5 bit Destination type =00000B để chỉ ra đích đến của yêu cầu là một
thiết bị. (00001B: đích là một giao diện cụ thể, 00010B: đích là một điểm cuối
trên thiết bị, 00011B: đích là một trong các thành phần khác trong thiết bị).
- 2 bit Request Type =01 để chỉ ra loại yêu cầu này là để dành cho một
lớp thiết bị cụ thể. (00: tức request là một trong các request chuẩn (có 11 loại
request chuẩn), 10: request được định nghĩa bởi nhà cung cấp thiết bị).
5.6.1 Get_Report
Host gửi yêu cầu này khi nó muốn nhận một Input report hoặc Feature
report từ HID sử dụng truyền điều khiển.
Bit Direction = 1 để chỉ ra rằng có một giai đoạn dữ liệu sau giai đoạn
setup và hướng truyền của dữ liệu là từ thiết bị về host.
bRequest = 01h cho biết yêu cầu mà host gửi tới thiết bị là Get_Report.
wValue: Byte cao chứa thông tin cho biết host muốn nhận loại report
nào từ thiết bị (1=Input, 3=Feature), byte thấp chứa report ID.
wIndex: chứa số lượng giao diện mà yêu cầu được hướng tới.
wlength: chứa chiều dài tối đa cho phép của report trong giai đoạn dữ
liệu tính theo byte.
Lưu ý: tất cả các HID nên hỗ trợ yêu cầu Get_Report.
5.6.2 Get_Idle
Host gửi yêu cầu này để đọc tốc độ rỗi từ thiết bị.
Bit Direction = 1.
bRequest = 02h.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
60
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
wValue: Byte cao = 00h, byte thấp chỉ ra report ID của report mà yêu
cầu tác động tới. Nếu byte = 00h thì có nghĩa là yêu cầu sẽ tác động tới tất cả
các Input report của HID.
wIndex chứa số lượng giao diện hỗ trợ yêu cầu này.
wlength = 1. 1 byte trường dữ liệu của gói dữ liệu trong giai đoạn dữ
liệu sẽ chứa tốc độ rỗi tính theo số nguyên lần của 4 ms.
Các HID không buộc phải hỗ trợ yêu cầu Get_Idle.
5.6.3 Get_Protocol
Mục đích của yêu cầu này là để host biết được HID có hỗ trợ giao thức
khởi động hay không.
Bit Direction = 1.
bRequest = 03h.
wValue = 0000h.
wIndex chứa số lượng giao diện hỗ trợ yêu cầu này.
wLength = 1. Nếu 1 byte trường dữ liệu của gói dữ liệu = 0 tức có hỗ trợ
giao thức khởi động còn nếu ≠ 0 tức là không hỗ trợ giao thức khởi động.
Các thiết bị có hỗ trợ giao thức khởi động thì phải đáp ứng lại yêu cầu
này.
5.6.4 Set_Report
Host gửi yêu cầu này để thông báo rằng nó muốn gửi một Output hoặc
Feature report tới thiết bị bằng cách sử dụng truyền điều khiển.
Bit Direction = 0 để chỉ ra rằng hướng của report trong giai đoạn dữ liệu
là từ host tới thiết bị.
bRequest = 09h.
wValue: Byte cao chứa thông tin về loại report sẽ được gửi trong giai
đoạn dữ liệu (2: Output report, 3: Feature report). Byte thấp chứa report ID.
wIndex chứa số lượng giao diện mà yêu cầu này được hướng tới.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
61
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
wLength: cho biết chính xác kích thước của report tính theo byte sẽ
được gửi trong giai đoạn dữ liệu.
Các HID có thể hỗ trợ hoặc không hỗ trợ yêu cầu Set_Report. Nếu một
HID không có điểm cuối ngắt ra (OUT) hoặc HID đang làm việc với một máy
chủ chỉ hỗ trợ phiên bản USB 1.0 mà lại muốn nhận dữ liệu từ Host thì việc
đáp ứng lại yêu cầu Set_Report là cách duy nhất để có thể nhận dữ liệu từ host.
5.6.5 Set_Idle
Host gửi yêu cầu này là để tiết kiệm băng thông bằng thông qua việc
giới hạn tần số gửi báo cáo của một điểm cuối ngắt vào (IN) khi dữ liệu chứa
trong báo cáo không có sự thay đổi so với báo cáo gần nhất.
Bit Direction = 0 để chỉ ra hướng của dữ liệu trong giai đoạn dữ liệu nếu
có thì sẽ là từ host tới thiết bị.
bRequest = 0Ah.
wValue: Byte cao thiết lập khoảng thời gian tối thiểu phải trôi qua giữa
hai Input report có dữ liệu giống nhau mà lại được gửi kế tiếp nhau, Byte thấp
chứa report ID của report mà yêu cầu này tác động tới. Nếu byte thấp là 00h thì
có nghĩa là yêu cầu này tác động tới tất cả các Input report của HID.
wIndex chứa số lượng giao diện hỗ trợ yêu cầu này.
wLength 0000h: Cho thấy không có giai đoạn dữ liệu theo sau giai đoạn
setup.
Chú thích: Khoảng thời gian giữa hai Input report là một số nguyên lần
của 4 ms, như vậy với 1 byte cao của wValue thì khoảng thời gian này sẽ nằm
trong phạm vi từ 4 tới 1020 ms. Nếu byte cao của wValue = 00h thì có nghĩa là
HID chỉ được gửi Input report khi dữ liệu của report đã có thay đổi so với lần
gửi ngay trước đó. Nếu dữ liệu của report có thay đổi so với lần gửi ngay trước
đó thì nó có thể được gửi ngay khi có một thông báo IN bất kể giá trị byte cao
của wValue là bao nhiêu. Trong trường hợp dữ liệu của report không hề có thay
đổi gì so với lần gửi ngay trước đó mặt khác khoảng thời gian được gán trong
byte cao của wValue chưa trôi qua kể từ lần gửi report ngay trước mà lại có
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
62
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
một thông báo IN từ host thì HID sẽ gửi gói bắt tay NAK. Còn nếu khoảng thời
gian được gán trong byte cao của wValue đã trôi qua kể từ lần gửi report ngay
trước thì HID sẽ gửi tới host report mặc dù dữ liệu của report không hề có thay
đổi so với lần gửi ngay trước. Nếu HID trả lời yêu cầu Set_Idle của host bằng
gói bắt tay STALL thì nó có thể gửi report bất cứ khi nào có thông báo IN từ
host kể cả khi dữ liệu của report không hề có sự thay đổi.
Các HID không bị bắt buộc phải hỗ trợ yêu cầu Set_Idle của host ngoại
trừ keyboard có sử dụng giao thức khởi động.
5.6.6 Set_Protocol
Host gửi yêu cầu này để chỉ định HID có nên sử dụng giao thức khởi
động hay không.
Bit Direction = 0 để chỉ ra hướng của dữ liệu trong giai đoạn dữ liệu nếu
có thì sẽ là từ host tới thiết bị.
bRequest = 0Bh.
wValue = 0000h: nên sử dụng giao thức khởi động; wValue ≠ 0000h:
không nên sử dụng giao thức khởi động.
wIndex chứa số lượng giao diện hỗ trợ yêu cầu này
wLength 0000h: Cho thấy không có giai đoạn dữ liệu theo sau giai đoạn
setup.
Thiết bị muốn thực hiện chức năng trong quá trình khởi động phải hỗ trợ
yêu cầu Set_Pr otocol.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
63
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
Chương 6: Quá trình tìm hiểu của máy
chủ đối với thiết bị
Trước khi ứng dụng có thể giao tiếp với thiết bị thì máy chủ cần tìm hiểu
về thiết bị và gán cho thiết bị một bộ điều khiển (driver). Những công việc cần
được xử lý của quá trình tìm hiểu gồm: Gán một địa chỉ cho thiết bị, đọc các bộ
mô tả từ thiết bị, gán và tải một bộ điều khiển cho thiết bị, chọn một cấu hình
phù hợp với những yêu cầu về công suất của thiết bị, những yêu cầu của điểm
cuối và một số đặc điểm khác.
6.1 Quá trình xử lý tổng quát
Một trong những nhiệm vụ của hub là phát hiện sự cắm vào hoặc tháo ra
của các thiết bị. Mỗi hub có một điểm cuối ngắt để báo cáo những sự kiện trên
cho máy chủ. Khi hệ thống khởi động, máy chủ thăm dò hub gốc của nó để biết
có hay không các thiết bị được gắn vào, các thiết bị đó có thể là các hub bổ
sung và các thiết bị khác gắn vào hub gốc hay các hub bổ sung. Sau khi khởi
động, máy chủ tiếp tục thăm dò định kỳ để biết có hay không một thiết bị mới
được gắn vào hoặc một thiết bị vừa
được tháo ra.
Để tìm hiểu về một thiết bị mới, máy chủ gửi một chuỗi các yêu cầu tới
hub của thiết bị để hub này thiết lập một đường truyền giữa máy chủ và thiết bị.
Sau đó máy chủ sẽ tìm hiểu về thiết bị bằng cách gửi các yêu cầu chuẩn của
USB tới điểm cuối 0 của thiết bị bằng kiểu truyền điều khiển. Tất cả các thiết bị
USB phải hỗ trợ truyền điều khiển, các yêu cầu chuẩn và điểm cuối 0.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
64
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
Đối với người sử dụng thì quá trình tìm hiểu của máy chủ là ẩn và hoàn
toàn tự động ngoại trừ một số thông báo cho biết có một thiết bị mới được gắn
vào và việc cài đặt thiết bị có thành công hay không. Đôi khi, trong lần đầu tiên
sử dụng, người sử dụng cần phải chọn bộ điều khiển (driver) thích hợp hoặc chỉ
cho máy chủ nơi mà nó có thể tìm thấy bộ điều khiển cho thiết bị.
Khi quá trình tìm hiểu được hoàn thành, Windows đưa thiết bị mới vào
mục Device Manager trong Control Panel. Còn khi người sử dụng gỡ thiết bị ra
khỏi hệ thống thì Windows cũng gỡ thiết bị ra khỏi danh sách trong Device
Manager.
Trong một thiết bị thông thường thì vi chương trình chứa các thông tin
mà máy chủ sẽ yêu cầu, vi chương trình này kết hợp với phần cứng để giải mã
và đáp ứng lại các yêu cầu của máy chủ. Có một vài bộ điều khiển USB ở phía
thiết bị có thể đáp ứng lại quá trình tìm hiểu của máy chủ một cách hoàn toàn
tự động bởi phần cứng mà không cần bất cứ một sự can thiệp nào của vi
chương trình. Về phía máy chủ thì nhờ có hệ điều hành Windown nên không
cần phải viết thêm bất cứ mã nguồn cho quá trình tìm hiểu.
6.2 Các bước của quá trình tìm hiểu
Đặc tả USB định nghĩa 6 trạng thái của thiết bị. Trong suốt quá trình
tìm hiểu thì thiết bị sẽ trải qua 4 trạng thái: Được cấp nguồn, mặc định, đã gán
địa chỉ, đã được cấu hình. 2 trạng thái còn lại là: vừa được gắn và treo. Trong
mỗi trạng thái thì thiết bị được chỉ định các khả năng và cách làm việc tương
ứng.
Các bước được liệt kê sau đây là chuỗi các sự kiện điển hình, thường
xuất hiện trong quá trình tìm hiểu dưới hệ điều hành Windows. Tuy nhiên vi
chương trình của thiết bị cần phải giả định rằng các yêu cầu và các bước trong
quá trình tìm hiểu có thể xuất hiện theo một thứ tự không xác định trước, một
thiết bị cần phải có khả năng phát hiện và đáp ứng tới bất kỳ yêu cầu điều khiển
nào cũng như bất kỳ sự kiện bus nào tại một thời điểm bất kỳ.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
65
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
6.2.1 Người sử dụng gắn thiết bị vào cổng USB
Khi người sử dụng gắn thiết bị vào cổng USB hoặc khi hệ thống khởi
động với thiết bị USB đã được gắn sẵn thì hub mà thiết bị gắn tới sẽ cấp nguồn
tới cổng có thiết bị và lúc này thiết bị ở vào trạng thái được cấp nguồn.
6.2.2 Hub phát hiện thiết bị vừa được gắn vào hệ thống
Hub giám sát điện áp trên các đường dây tín hiệu tại mỗi cổng của nó để
biết có hay không một thiết bị vừa được gắn vào. Hub có điện trở kéo lên với
giá trị nằm trong khoảng từ 14,25 đến 24,8 Kilô ôm cho mỗi đường tín hiệu của
nó (D+ và D-). Còn thiết bị cũng có điện trở kéo lên có giá trị nằm trong
khoảng 900 đến 1575 ôm trên D+ đối với thiết bị tốc độ cao hoặc thiết bị toàn
tốc, trên D- đối với thiết bị tốc độ thấp. Hub phát hiện thiết bị được gắn vào khi
nó nhận thấy điện áp chuyển từ mức thấp lên mức cao trên một trong hai đường
tín hiệu (D+ hoặc D-)
6.2.3 Máy chủ tìm hiểu về thiết bị mới
Mỗi hub sử dụng điểm cuối ngắt của nó để báo cáo các sự kiện xảy ra tại
hub với máy chủ. Để tìm hiểu một sự kiện diễn ra tại hub thì máy chủ gửi tới
hub một yêu cầu Get_Port_Status.
6.2.4 Hub xác định xem tốc độ của thiết bị là thấp hay toàn tốc
Hub xác định tốc độ của thiết bị bằng các kiểm tra điện áp trên hai
đường tín hiệu D+ và D- khi bus ở trạng thái rỗi. Nếu tại trạng thái bus rỗi mà
điện áp trên D- cao hơn D+ thì tốc độ của thiết bị là thấp còn ngược lại thì tốc
độ của thiết bị là toàn tốc. Hub 1.x thì xác định tốc độ của thiết bị sau khi reset
thiết bị còn hub 2.0 thì xác định tốc độ thiết bị (thấp hay toàn tốc) trước khi
reset thiết bị vì nếu thiết bị có tốc độ cao thì đòi hỏi hub phải tìm hiểu một lần
nữa trong lúc reset để phân biệt tốc độ của thiết bị là toàn tốc hay tốc độ cao.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
66
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
6.2.5 Hub reset thiết bị
Khi máy chủ tìm hiểu về một thiết bị mới thì bộ điều khiển của máy chủ
gửi tới hub một yêu cầu Set_Port_Feature để yêu cầu hub reset cổng có gắn
thiết bị mới. Hub reset thiết bị bằng cách đưa cả hai đường tín hiệu D+ và D-
về mức logic thấp trong khoảng thời gian tối thiểu là 10 ms (ở trạng thái bình
thường thì hai đường tín hiệu có mức logic trái ngược nhau).
6.2.6 Máy chủ tìm hiểu thêm nếu một thiết bị là thiết bị toàn tốc có hỗ
trợ tốc độ cao
Nếu một thiết bị có hỗ trợ tốc độ cao thì trong quá trình reset nó sẽ gửi
tới hub một chip K (tức làm cho đường D- có điện áp cao hơn đường D+) kéo
dài trong khoảng thời gian từ 1 tới 7 ms. Nếu hub mà thiết bị gắn vào là hub 1.x
thì hub này không có khả năng phát hiện ra chip K này vì thế sẽ không có sự trả
lời tới thiết bị, khi đó thiết bị hiểu rằng nó đang giao tiếp với một hub 1.x nên
không được hỗ trợ tốc độ cao và nó sẽ phải làm việc như một thiết bị toàn tốc.
Nếu hub mà thiết bị gắn vào là một hub 2.0 thì hub có khả năng phát hiện ra
chip K mà thiết bị gửi tới nó vì thế nó biết mình đang giao tiếp với một thiết bị
tốc độ cao đồng thời nó sẽ trả lời thiết bị bằng cách gửi một chuỗi chíp KJKJKJ
tới thiết bị (chip J có điện áp trên đường D+ cao hơn điện áp trên đường D-).
Thiết bị sau khi nhận được chuỗi chip trả lời KJKJKJ của hub thì sẽ hiểu rằng
nó được phép làm việc tại tốc độ cao. Để làm việc tại tốc độ cao thì thiết bị
phải vô hiệu hoá điện trở kéo lên tại đường D+ và cho phép bộ kết cuối tốc độ
cao làm việc.
6.2.7 Hub thiết lập một đường truyền tín hiệu giữa thiết bị và bus
Máy chủ kiểm tra xem thiết bị đã thoát khỏi trạng thái reset hay chưa
bằng cách gửi tới hub yêu cầu Get_Port_Status. Hub có nhiệm vụ trả lời lại yêu
cầu này. Nếu cần thiết thì máy chủ sẽ lặp lại yêu cầu trên cho tới khi thiết bị đã
ra khỏi trạng thái reset.
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
67
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
Khi hub gỡ bỏ trạng thái reset thì thiết bị được đưa vào trạng thái mặc
định (Default state). Ở trạng thái mặc định thì thiết bị đã sẵn sàng để đáp ứng
tới kiểu truyền điều khiển tại điểm cuối 0 với địa chỉ mặc định là 00h. Thiết bị
cũng có thể sử dụng nguồn cung cấp từ bus lên tới 500mA.
6.2.8 Máy chủ gửi một yêu cầu Get_Descriptor để tìm hiểu kích
thước lớn nhất của gói đối với đường truyền mặc định
Máy chủ gửi yêu cầu tới điểm cuối 0 của thiết bị có địa chỉ 0. Sẽ chỉ có
duy nhất một điểm cuối 0 ứng với duy nhất một thiết bị có địa chỉ 0 tại một thời
điểm nào đó kể cả khi có nhiều hơn một thiết bị được gắn vào cùng một lúc.
Trong 8 byte của bộ mô tả thiết bị (device descriptor) có chứa thông tin
về kích thước tối đa cho một gói tin mà điểm cuối 0 hỗ trợ. Một máy chủ với hệ
điều hành windows thường yêu cầu kích thước tối đa của một gói tin là 64 byte
tuy nhiên sau khi nhận chỉ một gói đầu tiên (dù gói này có đủ 64 byte hay
không) thì máy chủ cũng chuyển sang giai đoạn trạng thái của truyền điều
khiển. Sau khi hoàn tất giai đoạn trạng thái thì máy chủ có hệ điều hành
windows sẽ yêu cầu hub reset thiết bị giống như ở mục 6.2.5. Lần reset này có
thể có hoặc không đối với các máy chủ dùng các hệ điều hành không phải là
windows. Đối với máy chủ dùng hệ điều hành windows thì lần reset này chỉ là
để dự phòng (phòng trường hợp lần reset trước thất bại).
6.2.9 Máy chủ gán một địa chỉ cho thiết bị
Máy chủ gán một địa chỉ cụ thể không trùng lặp với địa chỉ của các thiết
bị khác cho thiết bị bằng cách gửi yêu cầu Set_Address tới thiết bị. Thiết bị sẽ
hoàn tất giai đoạn trạng thái của yêu cầu trên với địa chỉ mặc định là 0 và sau
đó sẽ sử dụng địa chỉ mới mà máy chủ vừa gán cho nó để thực các giao tác tiếp
theo. Cũng kể từ lúc này thiết bị đã ở vào trạng thái địa chỉ (address state). Địa
chỉ mà máy chủ vừa gắn cho thiết bị sẽ có hiệu lực cho tới khi thiết bị được
tháo ra, hoặc cổng mà thiết bị gắn vào reset hoặc hệ thống khởi động lại. Nếu
thiết bị lại gắn vào hoặc sau khi cổng hub reset hoặc hệ thống khởi động lại thì
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
68
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
trong lần tìm hiểu mới, máy chủ sẽ gán cho thiết bị một địa chỉ có thể vô tình
trùng với địa chỉ của lần tìm hiểu trước đó tuy nhiên thường thì địa chỉ sẽ thay
đổi.
6.2.10 Máy chủ tìm hiểu về các khả năng của thiết bị
Máy chủ gửi yêu cầu Get_Descriptor tới thiết bị theo địa chỉ mà nó đã
gán cho thiết bị. Trong lần gửi yêu cầu này thì máy chủ sẽ thu được toàn bộ nội
dung của bộ mô tả thiết bị chứ không phải là chỉ một gói như ở lần trước. Bộ
mô tả thiết bị có chứa các thông tin như kích thước tối đa của gói tin cho điểm
cuối 0, số lượng cấu hình mà thiết bị hỗ trợ và một số thông tin cơ bản khác.
Máy chủ sử dụng các thông tin này để giao tiếp với thiết bị trong các giao tác
sau này. Theo sau bộ mô tả thiết bị là một loạt các bộ mô tả khác mà máy chủ
sẽ nhận như bộ mô tả điểm cuối (endpoint descriptor), bộ mô tả chuỗi ký tự
(string descriptor), bộ mô tả giao diện (interface descriptor) ...và cuối cùng
thường là các bộ mô tả cấu hình (configuration descriptor). Số lượng các bộ mô
tả cấu hình mà máy chủ nhận có thể là 1 hoặc nhiều hơn, đó là tùy vào những
gì đã khai báo trong bộ mô tả thiết bị. Để thu nhận một bộ mô tả cấu hình thì
máy chủ sẽ gửi yêu cầu Get_Descriptor (với byte cao của trường wValue là 02h
để chỉ ra loại bộ mô tả mà host muốn nhận là bộ mô tả cấu hình) 2 lần. Lần đầu
nó chỉ nhận 9 byte của bộ mô tả cấu hình để biết được tổng kích thước của bộ
mô tả cấu hình và các bộ mô tả lớp con của bộ mô tả cấu hình. Ở lần sau nó sẽ
thu lấy đầy đủ nội dung của bộ mô tả cấu hình.
6.2.11 Máy chủ gán và tải một bộ điều khiển cho thiết bị
Sau khi tìm hiểu về thiết bị thông qua các bộ mô tả của nó, máy chủ tìm
kiếm bộ điều khiển thiết bị phù hợp nhất cho thiết bị để quản lý việc giao tiếp
với thiết bị. Windows cố gắng tìm kiếm sự phù hợp giữa các thông tin chứa
trong các file INF với các thông tin thu được từ thiết bị về số nhận dạng nhà
sản xuất (Vendor ID), số nhận dạng sản phẩm (Product ID) và có thể là cả
phiên bản của sản phẩm. Nếu Windows không tìm thấy một sự phù hợp nào thì
nó sẽ xem thiết bị có thuộc một lớp được định nghĩa hay không. Nếu thiết bị
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
69
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
cũng không thuộc một lớp được định nghĩa thì windows sẽ yêu cầu bạn chỉ ra
nơi mà nó có thể tìm thấy một bộ điều khiển phù hợp. Nếu như một thiết bị đã
từng được cài đặt thành công trước đó thì windows có thể sử dụng thông tin
trong phần đăng ký của hệ thống (system registry) thay vì tìm kiếm file INF
phù hợp. Sau khi hệ điều hành gán và tải một bộ điều khiển, bộ điều khiển có
thể yêu cầu thiết bị gửi lại các bộ mô tả của nó hoặc các bộ mô tả khác của một
lớp cụ thể.
Những gì vừa nêu trong mục 6.2.11 này sẽ diễn ra tại một thời điểm
khác đối với các thiết bị đa năng (các thiết bị mà có chứa nhiều hơn một chức
năng, tức là thiết bị mà cần tới hai địa chỉ thiết bị khi làm việc). Các thiết bị đa
năng có thể có các bộ điều khiển khác nhau được gán cho các giao diện khác
nhau trong cùng một cấu hình. Máy chủ chỉ có thể gán các bộ điều khiển sau
khi các giao diện đã được cho phép làm việc. Bước sau đây sẽ làm rõ hơn vấn
đề này.
6.2.12 Bộ điều khiển thiết bị của máy chủ lựa chọn một cấu hình
Sau khi tìm hiểu một thiết bị thông qua các bộ mô tả, bộ điều khiển thiết
bị yêu cầu một cấu hình nhờ việc gửi yêu cầu Set_Configuration với chỉ số cấu
hình tương ứng. Có một vài thiết bị chỉ hỗ trợ một cấu hình duy nhất. Còn nếu
thiết bị hỗ trợ nhiều cấu hình thì bộ điều khiển thiết bị có thể quyết định cấu
hình nào được yêu cầu dựa vào thông tin mà bộ điều khiển có về cách thức sử
dụng thiết bị hoặc bộ điều khiển có thể hỏi người sử dụng để chọn một cấu
hình thích hợp. Thiết bị đọc yêu cầu từ máy chủ và cho phép một cấu hình
tương ứng được tích cực (thiết bị sẽ làm việc với cấu hình đó), các cấu hình
còn lại của nó sẽ là không tích cực. Thiết bị lúc này đã được đưa tới trạng thái
được cấu hình (Configured state) và giao diện của thiết bị đã bắt đầu được phép
hoạt động.
Với các thiết bị đa chức năng, máy chủ gán các bộ điều khiển vào thời
điểm này. Cách thức cũng tương tự như các thiết bị khác đã được nêu ở mục
6.2.11. Chỉ có điều cần lưu ý là thiết bị đa năng sẽ có các bộ điều khiển khác
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
70
Đồ án tốt nghiệp
Sơ lược về chuẩn USB 2.0
nhau cho các giao diện khác nhau và tại một thời điểm thì chỉ có một bộ điều
khiển làm việc tương ứng với giao diện đang hoạt động trên thiết bị.
Như vậy đến lúc này thì thiết bị đã sẵn sàng cho việc sử dụng.
Ngoài 4 trạng thái đã trải qua trong quá trình tìm hiểu ở trên là: Được
cấp nguồn; mặc định; đã được gán địa chỉ và đã được cấu hình thì 2 trạng thái
còn lại của thiết bị là: được tháo ra và trạng thái treo.
Trạng thái đã tháo ra: Nếu hub không cấp nguồn tới các đường Vbus của
thiết bị thì thiết bị ở vào trạng thái đã tháo ra. Hiện tượng thiết bị không được
cấp nguồn mặc dù vẫn đang gắn vào hub xảy ra khi hub phát hiện thấy sự quá
tải về dòng từ phía thiết bị hoặc khi hub nhận được yêu cầu từ máy chủ buộc nó
cắt nguồn cấp cho thiết bị. Không được cấp nguồn trên các đường Vbus thì
thiết bị không thể giao tiếp với máy chủ do đó khi thiết bị vẫn gắn vào hub mà
không được cấp nguồn thì cũng giống như nó đã được tháo ra.
Trạng thái treo: Thiết bị sẽ ở vào trạng thái treo khi nó phát hiện thấy đã
3 ms trôi qua mà không thấy bất kỳ một tín hiệu nào trên bus (kể cả là gói SOF
(Start of Frame)). Các thiết bị đều phải hỗ trợ trạng thái này tức thiết bị phải có
khả năng phát hiện khoảng thời gian 3ms không tích cực của bus và đưa thiết bị
vào trạng thái treo. Khi ở vào trạng thái treo thì thiết bị nên giảm công suất tiêu
thụ từ bus (ví dụ như vi điều khiển của mạch sẽ vào trạng thái nguồn giảm).
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
71
Các file đính kèm theo tài liệu này:
- Do an tim hieu chuan usb 2.0.docx
- Do an tim hieu chuan usb 2.0.pdf