1) Điểm danh
Khả năng tựđộng nhận ra và cài đặt phần mền điều khiển cho các thiết bị USB là do hệ thống thường xuyên kiểm tra thông tin thiết bị trên cổng. Việc điểm danh được thực
hiện độc lập bởi hệđiều hành, không cần một chương trình người sử dụng phải thực hiện công việc này. Khi một thiết bị USB được kết nối vào mạng, hub nhận ra nó thông qua mức điện áp trên đường dữ liệu. Vì trong mỗi thiết bị USB đường dữ liệu được nối nguồn thông qua điện trở, do đó khi kết nối vào bus điện áp đường dữ liệu trên hub được đưa lên mức cao báo cho hub biết một thiết bịđã kết nối vào cổng tương ứng.
Khi hệđiều hành nhận biết một thiết bị mới được kết nối, nó yêu cầu thiết bị kết nối cung cấp thông tin về thiết bị. Thiết bị có nhiệm vụđưa ra bảng cung cấp thông tin về mình dưới dạng một bảng mô tả (Description). Bảng mô tả là một cấu trúc dữ liệu được qui định chính xác về nội dung, cách sắp xếp dữ liệu và chiều dài của nó. Hệ điều hành dựa vào thông tin cung cấp từ bảng mô tả thiết bị mà gọi các phần mềm điều khiển tương ứng. Quá trình điểm danh và cài đặt các thiết bị USB diễn ra gồm các bước như sau:
Hub thông báo cho máy chủ biết là có một thiết bị mới được nối vào.
Máy chủ hỏi lại Hub xem thiết bịđược nối vào cổng nào.
Máy chủ bây giờđã biết được thiết bị mới được nối vào cổng nào. Nó đưa ra một lệnh nối sang cổng đó và thực hiện một thao tác đặt tại bus.
Hub tạo ra một tín hiệu reset với độ dài 10ms và cấp dòng điện với cường độ 100mA
cho thiết bị. Bây giờ thiết bịđã sẵn sàng hoạt động và trả lời qua địa chỉ mặc định 0.
Trước khi thiết bị USB nhận được địa chỉ bus riêng, nó vẫn có thểđược trao đổi qua địa chỉ mặc định 0. Máy chủđọc 8 byte đầu tiên của bảng tóm lược thiết bị để khẳng định các gói dữ liệu có thể có chiều dài bằng bao nhiêu.
Máy chủ gán cho thiết bị một địa chỉ bus riêng.
Qua địa chỉ mới máy chủđọc tất cả các thông tin, cấu hình có từ thiết bị.
Máy chủ gán cho thiết bị một trong các cấu hình có thể. Bây giờ thiết bị sẽđược phép lấy ra dòng điện tiêu thụ như trong bảng tóm lược cấu hình của nó đã định. Như vậy, tất cảđã sẵn sàng và được đưa vào sử dụng.
Hình 3.22 Kết nối chủ USB với các thiết bị chức năng thành các đường ống
Mỗi yêu cầu từ máy chủ được bộ vi xử lý trên thiết bị USB nhận ra và trả lời. Tại mỗi điểm cuối (Endpoint) trên thiết bị được bố trí một một bộ nhớ FIFO (First In, First Out) làm bộ đệm vào/ra cho điểm cuối. Khi nhận được dữ liệu, bộ vi xử lý phân tích lệnh, đọc dữ liệu cài đặt trong ROM và ghi lên bộđệm ra. Thông tin đầu tiên thiết bị gửi là bảng mô tả thiết bị (Device Descriptor) có độ dài 18 byte. Máy chủ đọc 8 byte đầu tiên trong bảng này để xác định lớp thiết bị sau đó toàn bộ bảng mô tảđược đọc. Từ các thông tin có được, trong một vài trường hợp mã lớp (bDeviceClass) chỉ cho ta thấy là thiết bị thuộc về một lớp xác định, qua đó hệđiều hành có thể chỉ định phần mềm điều khiển dùng cho thiết bị. Như vậy, chẳng hạn đối với một chuột USB người dùng không cần có thêm phần mềm riêng. Nhờ các thông tin này thiết bị được đưa vào làm việc và được ghi vào bộ quản lý thiết bị. Khi thiết bị thuộc về một lớp, thông tin về thiết bị có thể được viết chi tiết trong
bDeviceClass và bDeviceProtocol.
bDescriptorType: loại bảng mô tả (01h: mô tả thiết bị).
bcdUSB: là số BCD chỉ rõ phiên bản của USB:
Version 1.0: là 0100h.
Version 1.1: là 0110h.
Version 2.0: là 0200h.
Bảng 3.5 Sự sắp xếp nội dung của bảng mô tả thiết bị
Tên trường Số byte Mô tả
bLength 1 Chiều dài của bảng tóm lược tính bằng byte
bDescriptorType 1 Kiểu Descriptor (01h = Device Descriptor)
bcdUSB 2 Phiên bản USB
bDeviceClass 1 Mã lớp (Class)
bDeviceSubClass 1 Mã lớp con (SubClass)
bDeviceProtocol 1 Mã giao thức
bMaxPacketSize 1 Độ lớn của EPO-FIFO
idVendor 2 ID nhà cung cấp
idProduct 2 ID sản phẩm
bcdDevice 2 Số hiệu nhà sản xuất
iProduct 1 Chỉ số xâu dùng cho sản phẩm
iSerialNumber 1 Chỉ số xâu dùng cho số hiệu sản phẩm
bNumConfigurations 1 Số lượng cấu hình cuối cùng.
bDeviceClass: chứa mã lớp thiết bị, chỉ cho biết nó thuộc lớp thiết bị nào.
bDeviceSubclass: trường này sử dụng nhận biết lớp con trong một lớp xác định. Nếu giá trị bDevice là 0 thì giá trị này cũng là 0.
bMaxPacketSize: kích thước lớn nhất cho bộ đệm điểm cuối zero (Endpoint-O- FIFO).
idVendor và idProduct: số hiệu nhà sản xuất và số hiệu sàn phẩm, được hệ thống sử dụng để tìm Device Driver tương ứng cho thiết bị.
bcdDevice: sử dụng để cung cấp version của thiết bị.
Ba chỉ số chuỗi (iManufacturer, iProduct và iSerialNumber): cung cấp tên nhà sản xuất, tên thiết bị và số serial của sản phẩm.
bNumConfigurations: chỉ ra số cấu hình thiết bị ứng với tốc độ hiện tại.
Các bảng mô tả cấu hình có dạng cấu trúc phân lớp, cho phép mô tả các thông số thiết lập và các tính chất khác nhau. Đối với từng thiết bị cụ thể:
Mỗi thiết bị có một bảng tóm lược thiết bị duy nhất.
Có thể có nhiều cấu hình.
Trong mỗi cấu hình có thể cho ra nhiều giao diện.
Mỗi giao diện có thể có nhiều cách thiết lập để lựa chọn.
Trong một cấu hình có thể tồn tại nhiều giao diện, các giao diện chức năng được chia ra theo các điểm cuối đang có. Mỗi giao diện có thể có nhiều cách thiết lập, các cách này khác nhau liên quan đến dải thông bị chiếm dụng.
Hình 3.23 Cấu trúc hình cây của bảng mô tả thiết bị USB
Ngoài bảng tóm lược thiết bị còn có bảng tóm lược cấu hình, một hay nhiều bảng tóm lược giao diện, các bảng tóm lược điểm cuối. Hệ thống càng phức tạp thì thông số tin phải quản lý càng nhiều, chẳng hạn thiết bị có bao nhiêu điểm cuối với độ lớn FIFO đệm thế nào, liệu thiết bị có hỗ trợ nhiều cấu hình, nhiều giao diện và bao nhiêu cách thiết lập
để lựa chọn đối với mỗi giao diện. Như vậy có thể nói bảng mô tả thiết bị là một dạng hình cây (hình 3.23).
Bảng liệt kê cấu hình mô tả số lượng giao diện và cấu hình hiện thời cũng như bảng tóm lược xâu cuối cùng đang tồn tại. Trong bmAttributes có thểđược chỉ dẫn liệu thiết bị được cung cấp điện áp nguồn từ bus và liệu chức năng RemoteWakeup được hỗ trợ cũng nhưđược đánh thức từ bus. Hàm Maxpower chỉ dẫn nhu cầu về dòng điện lấy từ bus, đơn vị tính là 2mA. Cường độ dòng điện này cũng có thểđược cung cấp từ một Hub trong chế độ tự cấp điện.
Bảng 3.6 Bảng mô tả cấu hình
Tên trường Số byte Mô tả
bLength 1 Chiều dài của Descriptor tính theo byte
bPescriptorType 1 Kiểu Descriptor (02h = Descriptor cấu hình)
wTotalLength 1 Chiều dài của Descriptor cũ của cấu hình này
bNumInterfaces 1 Số lượng giao diện
bConfigurationValue 1 Số hiệu của cấu hình này
bConfiguration 1 Chỉ số xâu
bmAttributes 1 Thuộc tính của cấu hình
Maxpower 1 Dòng tiêu thụ, đơn vị tính x2mA
Nhiều bảng tóm lược ghép nối có thể được qui định nội dung bằng việc đặt các thông số lựa chọn. Thông tin quan trọng nhất về từng cách thiết lập là số lượng điểm cuối trong đó một bảng liệt kê Endpoint thuộc về mỗi điểm Endpoint. Nếu như thiết bị thuộc về một lớp thiết bị đã được chỉ định trong Device - Descriptor thì các thông tin tương ứng có thểđược cho ởđây một lần nữa.
Bảng 3.7 Sự sắp xếp nội dung của bảng tóm lược giao diện
Tên trường Số byte Mô tả
bLength 1 Chiều dài của kiểu Descriptor tính ra byte
bPescriptorType 1 1 (04h = Interface Descriptor)
bInterfaceNumber 1 Số giao diện.
bAlternateSettiny 1 Đặt thông số theo cách lựa chọn.
bNumEndpoint 1 Số lượng điểm cuối không có EPO
bInterfaceClass 1 Giao diện lớp cuối cùng.
bInterfaceSubClass 1 Giao diện lớp con cuối cùng.
bInterfaceProtocol 1 Mã giao thức cuối cùng.
iInterface 1 Chỉ số xâu (String-Index) Bảng 3.8 Bảng tóm lược điểm cuối
Tên trường Số byte Mô tả
bLength 1 Chiều dài của bảng liệt kê tính ra byte.
bPescriptorType 1 1 kiểu liệt kê (05h = liệt kê điểm cuối).
bEndpointAddress 1 Địa chỉ Endpoint (ED2, OUT).
bmAttributes 1 Kiểu truyền (2 = truyền khối).
bMaxPacketSize 1 Dung lượng bộ nhớ FIFO.
bMaxPacketSize 1 Khoảng hỏi cuối cùng.
Khi hệ thống điểm danh tất cả các thông tin quan trọng của thiết bị đều được kiểm tra. Khi đó hệ điều hành kiểm tra xem liệu tài nguyên được yêu cầu như: phần mềm điều
khiển, dòng tiêu thụ, dải thông bus đã có mặt. Sau khi hoàn thành khâu điểm danh, ta có thể sử dụng ngay các yêu cầu điều khiển (Control-Request) qua Endpoint 0. Các Endpoint
và các hoạt động khác cần phải được cho phép hoạt động bằng việc gán thông số thiết lập lớn hơn 0.
2) Phần mềm điều khiển
Chức năng của phần mềm điều khiển (driver) thiết bị nói chung, có thể mô tả như một mắt xích liên kết giữa phần cứng và phần mềm của một hệ thống. Trong môi trường từ Window 98 không có một chương trình ứng dụng nào có thể truy cập trực tiếp lên phần cứng. Cách tốt nhất là gọi ra một phần mềm điều khiển thiết bị, phần mềm này trao đổi trực tiếp với phần cứng hoặc qua lớp đệm nằm sâu hơn trong hệ thống. Phần mềm điều khiển được các nhà sản xuất thiết bị cung cấp kèm theo và được viết trong khuôn khổđầu tư cho thiết bị của một công ty. Phần mềm làm việc trong chếđộ lõi với quyền ưu tiên cao hơn. Một phần mềm điều khiển được xem xét giống như một thiết bị ảo, nghĩa là một chương trình người dùng sử dụng một phần mềm điều khiển giống như chính một thiết bị.
Tất cả các phần mềm điều khiển USB đều dựa trên Win32-Driver-Model (WDM), mô hình này đã được sử dụng trong Window NT và được tương thích trong Window 98. Tất cả các lệnh gọi phần mềm điều khiển đều chạy qua phềm mềm quản lý vào/ra (I/O Manager). Các chương trình người dùng khác nhau gửi gói yêu cầu tới phần mềm quản lý vào/ra, phần mềm này sau đó phân phối tới phần mềm điều khiển cụ thể.
Với mức độ người dùng chỉ cần quan tân đến 5 hàm truy cập trong Windows:
Mở một thiết bị bằng hàm CreateFile( ).
Truy nhập để ghi sử dụng hàm WriteFile( ).
Truy nhập đểđọc sử dụng hàm ReadFile( ).
Kết thúc quá trình truy nhập sử dụng CloseHadre( ).
Đối với các trường hợp không theo khuân mẫu ở trên, ta có thể thực hiện hàm truy cập bằng hàm DeviceloControl( ).
Trong giới hạn giáo trình này, không đi sâu vào cách tạo ra các Driver cho thiết bị điều khiển vì chúng khá phức tạp.