Khi một máy tính được cấp nguồn, nó sẽ truy vấn tất cả thiết bị được kết nối vào đường truyền và gán mỗi thiết bị một địa chỉ. Quy trình này được gọi là liệt kê – những thiết bị được liệt kê khi kết nối vào đường truyền. Máy tính cũng tìm ra từ mỗi thiết bị cách truyền dữ liệu nào mà nó cần để hoạt động:
Ngắt - Một thiết bị như chuột hoặc bàn phím, gửi một lượng nhỏ dữ liệu, sẽ chọn chế độ ngắt.
Hàng loạt - Một thiết bị như một chiếc máy in, nhận dữ liệu trong một gói lớn, sử dụng chế độ truyền hàng loạt. Một khối dữ liệu được gửi đến máy in (một khối 64 byte) và được kiểm tra để chắc chắn nó chính xác.
Đẳng thời - Một thiết bị truyền dữ liệu theo chuỗi (lấy ví dụ như loa) sử dụng chế độ đẳng thời - kết nối liên tục. Những dòng dữ liệu giữa thiết bị và máy trong thời gian thực, và không có sự sửa lỗi ở đây.
Máy tính có thể gửi lệnh hay truy vấn tham số với điều khiển những gói tin. Khi những thiết bị được liệt kê, máy tính sẽ giữ sự kiểm tra đối với tổng băng thông mà tất cả những thiết bị đẳng thời và ngắt yêu cầu. Chúng có thể tiêu hao tới 90% của băng thông 480 Mbps cho phép.
Sau khi 90% được sử dụng, máy tính sẽ từ chối mọi truy cập của những thiết bị đẳng thời và ngắt khác. Điều khiển gói tin và gói tin cho truyền tải hàng loạt sử dụng phần băng thông còn lại (ít nhất 10%).
USB chia băng thông cho phép thành những khung, và máy tính điều khiển những khung đó. Khung chứa 1.500 byte, và một khung mới bắt đầu mỗi mili giây. Thông qua 1 khung, những thiết bị đẳng thời và ngắt lấy được một vị trí do đó chúng được đảm bảo băng thông mà chúng cần. Truyền tải hàng loạt và điều khiển truyền tải sử dụng phần còn lại.
1. Giaothức USB
- Máy chủ USB sẽ giữ bus hoạt động liên tục bằng cách truyền một gói (packet) khởi đầu khung SOF (start of frame) trong chu kỳ 1ms này (1KHz). Một lần truyền tin USB cần đến 3 gói:
+ Gói khung (token packet). + Gói dữ liệu (data packet). + Gói bắt tay (handshack packet).
8 bit 11 bit 5 bit
PID Số khung CRC5 Khởi đầu khung
8 bit 0-1023 byte 16 bit
PID DATA CRC16 Dữ liệu
8 bit
PID Bắt tay
Hình 3.17 Cấu trúc giao thức USB
Nhận dạng gói PID (packet identification) theo ngay sau trường đồng bộ của các gói. Một PID cho biết kiểu gói, định dạng của gói và kiểu phát hiện lỗi áp dụng cho gói chứa nó. Mỗi gói đều có một khả năng 8 bit nhận dạng gói. Một cuộc truyền bắt đầu khi bộ điều khiển chủ gửi một gói khung (token) gồm địa chỉ thiết bị ADDR, số hiệu điểm cuối ENP và hướng của cuộc truyền. Thiết bị có địa chỉ tương ứng sẽ tự chọn bằng cách giải mã địa chỉ của nó từ gói khung. Trường ghi hướng cuộc truyền gói khung về máy chủ yêu cầu thiết bị ngoại vi phát dữ liệu. Thiết bị ngoại vi sẽ trả lời
bằng gói dữ liệu (data packet), nếu máy chủ không nhận được nó sẽ tiếp tục bằng việc truyền lại dữ liệu. Sau khi nhận được dữ liệu, nơi nhận (chủ hoặc ngoại vi) sẽ gửi lại một gói bắt tay. Gói nàycó thể có nghĩa: chấp nhận dữ liệu ACK (acknowledge), không chấp nhận dữ liệu NACK (non-acknowledge) hay tắc STALL.
2. Kết nối ngoại vi USB
- Chủ USB nhận ra thiết bị được nối vào một trong các Hub USB của nó. Nó nhận thấy điều này nhờ một bộ phân áp đơn giản được nối tới đôi day dữ liêu vi sai trên Bus USB. Các điện trở này ở bên trong Hub USB và thiết bị.
- Chủ USB gửi yêu cầu Get Port Status tới Hub để tìm hiểu thêm về thiết bị được lắp vào. Nó có thể là một Hub khác hoặc một thiết bị được kết nối trực tiếp tới Hub gốc của chủ USB hoặc một thiết bị được nối vào Hub thuận chiều.
- Sau khi nhận được trả lời từ Hub thì chủ USB định lệnh Get Port Feature lên Hub mà phát ra lệnh Reset trên đôi đây dữ liệu nhưng chỉ với thiết bị mới được kết nối với Bus USB.
- Chủ USB sau đó kiểm tra để biết được nếu thiết bị đã hết trạng thái Reset nhờ phát lệnh kiểm tra trạng thái cổng (Get Port Status tới Hub). Sau khi reset, thiết bị ở trạng thái mặc định và chỉ chấp nhận dòng lớn nhất là 100mA. Trong chế độ mặc định thiết bị có thể truyền thông tới USB thông qua điểm cuối 0.
- Hub sẽ dò tốc độ của thiết bị bằng cách sử dụng bộ phân áp được nối tới Bus USB. Hub gửi tốc độ của thiết bị trở lại chủ USB.
- Máy chủ đưa ra lệnh Get_Descriptor đến địa chỉ mặc định qua một đường điều khiển. Thiết bị ngoại vi sẽ truyền lại máy chủ thông tin của nó như: loại thiết bị, hãng sản xuất, kích thước gói tối đa của điểm cuối ...
- Máy chủ gán cho thiết bị một địa chỉ bằng lệnh Set-Address. Thiết bị (hay vi xử lý 8x930) sẽ nhận địa chỉ này tại điểm cuối số 0 và lưu trữ vào một thanh ghi tương ứng.
- Máy chủ yêu cầu và đọc cấu hình của thiết bị ngoại vi bằng lệnh Get_Configuration. Thiết bị sẽ trả lời với một số giao diện, số điểm cuối, loại truyền điểm cuối, kích thước gói, hướng truyền, nhu cầu điện, nguồn điện v.v.
- Bước cuối cùng của quá trình liệt kê là việc gán cấu hình cho thiết bị qua lệnh Set_Configuration.
Sau quá trình liệt kê được hoàn thành, thiết bị ngoại vi sẵn 77ang thu và phát dữ liệu trên USB. Trong quá trình liệt kê, thông tin về thiết bị ngoại vi được truyền về phần mềm hệ thống. Phần mềm hệ thống sẽ nạp driver thích hợp để điều khiển chức năng của thiết bị ngoại vi cho đến khi nó được ngắt ra khỏi mạng USB.
3. Gỡ thiết bị ngoại vi USB
Ngay sau khi thiết bị ngoại vi được gỡ khỏi cổng USB, thay đổi về hiệu điện thế trên D+ và D- sẽ báo cho máy chủ biết về sự kiện này. Máy chủ sẽ cấm cổng tương ứng qua bộ điều khiển USB. Phần mềm hệ thống USB (là một phần của hệ điều hành)
sẽ phát hiện ra thiết bị đã được gỡ và giải phóng tài nguyên cứng mà thiết bị đã giành lấy. Nếu thiết bị dùng điện của bus, nguồn điện sẽ bị ngắt để dành cho thiết bị khác. Thiết bị được gỡ sẽ làm việc tiếp trong chế độ đơn (Stand-Alone), chẳng hạn điện thoại USB sẽ tiếp tục được sử dụng như một điện thoại thường. Nếu thiết bị được gỡ là một hub thì mọi thiết bị được cắm vào hub này được coi như gỡ ra khỏi mạng, hệ điều hành sẽ giải phóng tài nguyên của các thiết bị này.