Một gói dữ liệu bao gồm một trường PID 8 bit, tiếp là trường dữ liệu (có
thể từ 0 byte tới 1024 byte) và cuối cùng là trường CRC 16 bit. Trường CRC
chỉ được tạo từ trường dữ liệu mà không tính cả trường PID. Kích thước tải tin
tối đa cho phép đối với thiết bị tốc độ thấp là 8 byte, với thiết bị toàn tốc là
Đồ án tốt nghiệp Sơ lược về chuẩn USB 2.0
1023 byte và với thiết bị tốc độ cao là 1024 byte. Kích thước của phần tải tin (DATA) phải là một số nguyên lần của một byte. H ì n h 3 . 8 : K h u ô n d ạ n g g ó i d ữ li ệ u [ 1 ] 3.4.5 Các loại gói bắt tay
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ó
Đồ án tốt nghiệp Sơ lược về chuẩn USB 2.0
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. Ngoà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
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 khoá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
Lê Ngọc Du - Lớp ĐT7 - K46 - ĐHBKHN
Đồ án tốt nghiệp Sơ lược về chuẩn USB 2.0 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 hoàn
thành hay khi hub không có khả năng điều khiển giao tác phân chia.
hoặc tốc độ thấp.