Các gói bắt tay (handshake packets) chỉ có một trường PID. Các gói bắt tay này được dùng để báo tình trạng của một giao tác dữ liệu và có thể trả về những giá trị để cho biết quá trình tiếp nhận dữ liệu thành cơng, chấp nhận lệnh hoặc từ chối lệnh, điều khiển luồng và dừng hoạt động. Các tín hiệu bắt tay
thường được trả về trong các pha bắt tay của một giao tác hoặc có thể được trả về ngay trong pha dữ liệu bằng cách gửi thơng tin bắt tay thay vì gửi dữ liệu. Các gói bắt tay được phân định bởi một EOP theo ngay sau chỉ một byte. Nếu việc giải mã PID bắt tay đem lại giá trị hợp lệ cho một gói bắt tay song lại khơng kết thúc bởi một EOP thì phía thu coi như gói khơng hợp lệ và bỏ qua.
Hình 3.9: Gói bắt tay [1] Có tất cả là 5 loại gói bắt tay:
• ACK: Tín hiệu bắt tay này báo rằng gói dữ liệu nhận được mà khơng có lỗi nhồi bit hoặc các lỗi CRC ở trường dữ liệu và PID của gói nhận được là
đúng đắn. ACK có thể được phát ra khi chuỗi bit phù hợp và bên nhận có thể
nhận dữ liệu, cũng như khi chuỗi bit không phù hợp và bên phát và bên thu phải đồng bộ lại lẫn nhau. Một gói ACK chỉ được ứng dụng trong các giao tác mà dữ liệu đã được truyền đi và đang mong chờ tín hiệu bắt tay trả lời. ACK có
thể được trả về bởi host trong giao tác IN và được trả về bởi chức năng cho các giao tác OUT, SETUP hoặc PING.
• NAK: Tín hiệu bắt tay này chỉ ra rằng một chức năng chưa cho phép nhận dữ liệu từ host trong giao tác OUT hoặc một chức năng khơng có dữ liệu
để gửi tới Host trong giao tác IN. NAK có thể chỉ được trả về bởi chức năng
trong pha dữ liệu của giao tác IN hoặc pha bắt tay của giao tác OUT hoặc PING. Host có thể khơng bao giờ phát NAK. Ngồi ra, tín hiệu bắt tay NAK cịn được sử dụng cho những mục đích điều khiển luồng để báo rằng một chức năng tạm thời không thể truyền hoặc nhận dữ liệu, nhưng chức năng đó sẽ dần dần có khả năng để truyền hoặc nhận dữ liệu mà khơng cần sự can thiệp của host.
• STALL: tín hiệu bắt tay này được trả về bởi một chức năng trong đáp
ứng một thông báo IN hoặc sau pha dữ liệu của một giao tác OUT hoặc trong đáp ứng một giao tác PING. STALL chỉ ra rằng chức năng chưa cho phép
truyền hay nhận dữ liệu hoặc một nhu cầu ống điều khiển không được hỗ trợ. Trạng thái của một chức năng sau khi trả về một gói STALL khơng được định nghĩa (đối với bất kỳ một điểm cuối nào trừ điểm cuối mặc định). Host không được phép trả lại một gói STALL trong bất kỳ tình huống nào.
Gói bắt tay STALL được sử dụng bởi một thiết bị do một trong hai nguyên nhân sau:
- Nguyên nhân thứ nhất được gọi là “Functional Stall”, đặc tính dừng này liên quan đến việc thiết lập điểm cuối của cuộc truyền. Một
trường hợp đặc biệt của function stall là “Commanded stall”, nó xảy ra khi mà host dứt khốt thiết lập đặc tính dừng trên điểm cuối. Một
điểm cuối của chức năng mà bị dừng thì nó liên tục trả về gói bắt tay
STALL cho đến khi tình trạng đó chấm dứt nhờ sự can thiệp của host. - Nguyên nhân thứ hai được gọi là “Protocol Stall”. Protocol stall chỉ
liên quan tới các ống điều khiển. Một protocol STALL được trả về trong giai đoạn dữ liệu hoặc giai đoạn trạng thái của truyền điều
khiển và trạng thái STALL kết thúc tại thời điểm bắt đầu của truyền điều khiển tiếp theo (trong giao tác SETUP).
• NYET: Đây chỉ là gói bắt tay cho truyền tốc độ cao và được trả về trong hai trường hợp. Nó được trả về bởi một điểm cuối tốc độ cao như một
phần của giao thức PING. NYET cũng có thể được trả về bởi một hub trong đáp ứng giao tác phân chia khi giao tác tốc độ thấp hoặc toàn tốc chưa hồn
thành hay khi hub khơng có khả năng điều khiển giao tác phân chia.
• ERR: Đây cũng là một gói bắt tay tốc độ cao được trả về để cho phép một hub tốc độ cao thơng báo một lỗi trên bus tồn tốc hoặc tốc độ thấp.