วันอาทิตย์ที่ 16 พฤศจิกายน พ.ศ. 2551

windows driver development note # 4

วันนี้มาว่ากันที่ USB บ้าง ตัว device จะถูกเรียกว่า client และเครื่องคอมพิวเตอร์ของเราที่มี USB port จะเรียกว่า host
ตัว client มันก็จะรัน firmware สำหรับติดต่อพูดคุยกับ host และเพื่อบ่งบอกตัวเองว่าเป็นใคร (vendor id, product id, version id) ถูกคอนฟิกมาเพื่อติดต่อกับ host ในลักษณะใด โดยจะมีรูปแบบของคอนฟิกเป็นดังตัวอย่างข้างล่างนี้

configuration 1

  • - interface 0
    • - endpoint (หรือเรียกว่า pipe) 0 ชนิด interrupt ทิศทาง IN (from device to host)
      - endpoint 1 ชนิด Bulk ทิศทาง OUT (from host to device)
      - ...
    - interface 1
    - ...
คอนฟิกอาจมีมากกว่าหนึ่งได้ แต่ active ใช้งานได้ทีละคอนฟิกเดียวเท่านั้น นอกจากนี้ device จะต้องมี default pipe เพื่อให้ host สามารถขอ descriptor ของ configuration ของ device นั้นๆ เมื่อเวลาที่มัน ถูก plug-in เข้าไป

packet คือ บล็อกของ data ทีส่งระหว่าง device กับ host ในหนึ่ง packet ประกอบด้วย synchronization signals, packet id (pid), data และ CRC check bytes

pid มี 10 ค่า แบ่งได้เป็น 4 ชนิด คือ

  • token คือ OUT, IN , SETUP, SOF
    data คือ DATA0, DATA1
    handshake คือ ACK, NAK, STALL
    special คือ PRE
การทำ transaction ระหว่าง device กับ host นั้นจะเริ่มด้วย การส่ง token ตามด้วย data และ handshake ซึ่งจะมีทิศทางตรงกันช้ามกับการส่ง data

ชนิดของการ transfer หรือการทำ transaction นั้น มี 4 ชนิดด้วยกันคือ control, interrupt, bulk และ isochronous

ใน packet แบบ token นั้นจะมี address และ endpoint เพื่อบ่งชี้ device และ endpoint ที่ต้องการจะติดต่อด้วย