ข้อมูลจำเพาะ USB ที่อธิบายว่าต้องทำอย่างไรเมื่อเชื่อมต่อสายเคเบิลครั้งแรก


15

ดังนั้นผมจึงรู้เกี่ยวกับข้อมูลจำเพาะของ USB 2.0อยู่ที่เว็บไซต์ USB.org

ฉันขี้เกียจและใจร้อนนิดหน่อย ใครสามารถบอกฉันว่าจะไปที่ไหนเพื่อค้นหาสิ่งที่คาดหวังของอุปกรณ์ต่อพ่วงของฉันเมื่อเชื่อมต่อสาย USB?

ตัวอย่างเช่นหากอุปกรณ์ต่อพ่วงของฉันเป็นเครื่องพิมพ์ฉันจะบอกคอมพิวเตอร์ที่ปลายอีกด้านหนึ่งว่าเครื่องพิมพ์ (ที่มีคำอธิบายเฉพาะรุ่นฉันคิดว่า) เพิ่งจะเชื่อมต่อได้อย่างไร กว่าในคอมพิวเตอร์ไดรเวอร์เครื่องพิมพ์จะรู้ได้อย่างไรว่าพอร์ต USB ใดที่เชื่อมต่อกับเครื่องพิมพ์

แอปพลิเคชันของฉันคือ USB MIDI ฉันได้รับเอกสาร USB-MIDIนี้แล้วเช่นกัน แต่ฉันขาดโพรโตคอล USB พื้นฐานมากขึ้น

สำหรับข้อมูลของผู้คนชิป USB ที่ฉันใช้คือFTDI FT220xและติดอยู่กับ SPI ของ ADSP-21479 SHArC ตอนนี้เราใช้มันเพียงเพื่อการสื่อสารข้อความโดยใช้เครื่องคอมพิวเตอร์ (ทำงาน TeraTerm) เป็น"คอนโซล" ฉันมีสิทธิ์เข้าถึงรหัสที่ตั้งค่าพอร์ต SPI และเชื่อมต่อกับชิป FTDI แต่ไม่มีรหัสที่ใช้ในการสื่อสารเริ่มต้น ฉันไม่รู้ว่า FT220x ทำอะไรเมื่อเชื่อมต่อกับพีซีเป็นครั้งแรก

ฉันไม่พอใจที่จะอ่านและเรียนรู้ แต่ฉันอยากรู้ว่าจะเริ่มอ่านที่ไหนและสเปค USB ขนาด 100 MB นั้นใหญ่เกินไปสำหรับเป้าหมายในการถ่ายภาพ ขอขอบคุณทุกคนอย่างจริงใจสำหรับความช่วยเหลือที่สามารถดำเนินการได้


1
ดังนั้นคุณแค่อยากรู้ว่า FTDI FT220x กำลังทำอะไรอยู่เบื้องหลัง เนื่องจาก FTDI ดูแลสิ่งต่างๆมากมายสำหรับ USB คุณจึงมีข้อ จำกัด บางประการเกี่ยวกับสิ่งที่จะช่วยให้คุณทำ ผมเคยใช้ครอบครัว FT2232H สำหรับประเดี๋ยวจะพยายามที่จะอธิบายสิ่งที่ฉันรู้ ...
Marku

สิ่งที่ฉันพยายามทำในที่สุดคือใช้พอร์ต USB ที่ฉลาดพอที่จะส่งข้อความไปและกลับไปที่พีซีที่ใช้ TeraTerm สิ่งที่ฉันหวังว่าจะทำคือใช้ตัวเชื่อมต่อ USB ตัวเดียวกันเพื่อทำ USB MIDI ฉันต้องเข้าใจวิธีการ"จัดทำแพ็กเก็ต"ข้อมูลลงในแพ็คเก็ต 32 บิต แต่ฉันคิดว่า (และยังคงคิดว่า) ต้องมีโปรโตคอลบางตัวที่บอกส่วนอื่น ๆ ว่านี่คืออุปกรณ์ USB MIDI (จนถึงตอนนี้ฉันยังไม่มีความเข้าใจในข้อมูลสำคัญเกี่ยวกับ USB และคำตอบของคุณจะเป็นประโยชน์อย่างมากในการพาฉันไป)
robert bristow-johnson

คำตอบ:


21

USB มีหลายชั้นซึ่งมีการอธิบายไว้ในUSB 2.0 คุณสมบัติ หากคุณคุ้นเคยกับโมเดลเครือข่ายชั้น OSI คุณสามารถคิดแบบนี้:

  • Session layer = บทที่ 10 ฮาร์ดแวร์และซอฟต์แวร์โฮสต์ USB (ไดรเวอร์อุปกรณ์)
  • Transport layer = บทที่ 9 อุปกรณ์ USB Framework
  • Network layer = บทที่ 8 ชั้นโปรโตคอล (bitstream)
  • Data Link layer = บทที่ 7 ไฟฟ้า (วงจร)
  • ชั้นกายภาพ = บทที่ 6 เครื่องกล (สายเคเบิลและขั้วต่อ)

แนวคิด USB ขึ้นอยู่กับกระแสข้อมูลที่เรียกว่า Endpointsซึ่งสามารถเป็น IN (ไปยังโฮสต์) หรือ OUT (จากโฮสต์) อุปกรณ์ทุกชิ้นมี Endpoint 0 ซึ่งใช้สำหรับการควบคุมและสถานะ อุปกรณ์อาจมีจุดปลายเพิ่มเติมสำหรับข้อมูลแอปพลิเคชัน จุดปลายแต่ละอันจะทำงานเหมือนบัฟเฟอร์ FIFO

ข้อมูลจะถูกถ่ายโอนบนปลายทางทั้งแบบBulk (เช่น TCP / IP รับประกันว่าทุกไบต์มาถึงและในลำดับที่ถูกต้อง) หรือIsochronous (เช่น UDP / IP รับประกันว่าจะสด แต่อาจวางแพ็กเก็ต) มีชื่อที่ทำให้เข้าใจผิด "ประเภทการโอน " ขัดจังหวะ " ที่ซึ่งเป็นเพียงการสำรวจโดยโฮสต์

USB 2.0 ใช้คู่ที่แตกต่างกันสำหรับดาต้าลิงค์ ฉันจะไม่ลงรายละเอียดมากนักเนื่องจากข้อมูลนี้ครอบคลุมโดยบทจำเพาะของ USB 2.0 บทที่ 7 โดยทั่วไปแล้วในโครงร่าง PCB เราถือว่านี่เป็นคู่ที่มีความยาวจับคู่แตกต่างและใส่ตัวต้านทานอนุกรมที่ต้องการโดย USB PHY ใด ๆ อินเทอร์เฟซ) กำลังถูกใช้งาน อุปกรณ์ต่อพ่วง USB ใช้ตัวต้านทานที่มีมูลค่าสูงในหนึ่งในสาย D + หรือ D- เพื่อแจ้งโฮสต์ว่าเป็นอุปกรณ์ต่อพ่วงความเร็วสูงหรือความเร็วต่ำ

ไม่นานหลังจากที่โฮสต์ USB พบว่ามีอุปกรณ์อยู่โฮสต์จะขอตัวอธิบายจากอุปกรณ์ สิ่งนี้ได้รับการดูแลโดย FTDI chip descriptos อธิบายไว้ในบทที่ 9.5 สิ่งเหล่านี้รวมถึงDevice Descriptor , Configuration Descriptor , Interface Descriptors , Endpoint Descriptors , String Descriptors , หรือแม้แต่HID Report Descriptorsอธิบาย

อุปกรณ์อธิบายรวมถึง USB VID (ประจำตัวประชาชนของผู้ขาย) และPID (บัตรประจำตัวสินค้า) หมายเลข ระบบปฏิบัติการใช้หมายเลขคู่นี้ VID_PID เพื่อกำหนดไดรเวอร์อุปกรณ์ที่จะใช้สำหรับอุปกรณ์นี้ โปรดทราบว่าหมายเลข VID นั้นออกให้โดยการเป็นสมาชิกในฟอรัม Implementors USB ดังนั้นจึงเป็นปัญหาหากคุณเป็นนักประดิษฐ์รายบุคคล

นอกจากนี้ยังมีไดร์เวอร์คลาส HID (Human Interface Device) ซึ่งให้การป้อนข้อมูลทั่วไปสำหรับแป้นพิมพ์ / เมาส์ / ฯลฯ รวมถึงอินพุต / เอาต์พุตทั่วไป ข้อดีอย่างหนึ่งของ HID คือไม่ต้องใช้ไดรเวอร์อุปกรณ์ที่กำหนดเอง แต่ปริมาณงานของมันค่อนข้าง จำกัด เมื่อเทียบกับไดรเวอร์จำนวนมากที่กำหนดเอง มีเอกสารข้อกำหนดอื่น ๆเกี่ยวกับตัวบอก HID และเอกสารตารางการใช้งานของ HID ที่ให้รายละเอียดหมายเลขรหัสทั้งหมดที่อธิบายคุณสมบัติต่าง ๆ ที่มีอยู่ในอุปกรณ์ที่เชื่อมต่อโดยมนุษย์

ชิป FTDI เช่นแผ่นข้อมูล FT220Xให้ USB "เครื่องมืออินเตอร์เฟสแบบอนุกรม" (เพื่อไม่ให้สับสนกับ SPI อนุกรมหรืออนุกรม RS232) สิ่งนี้จะดูแลสิ่งของระดับต่ำส่วนใหญ่ที่อธิบายไว้ในบทที่ 6, 7 และ 8

FTDI ใช้ EEPROM (offchip บน FT2232H, on-chip ของ FT220X) เพื่อเก็บข้อมูลเล็กน้อยที่จะเข้าสู่ descriptors คุณสามารถปรับแต่งค่า VID / PID และกำหนดสตริงคำอธิบายที่กำหนดเองได้


6
ฉันชอบบทสรุป ฉันต้องอ่านข้อมูลจำเพาะทั้งหมดของ ENTIRE 2.0 (มากกว่า 1,000 หน้าตามที่ฉันจำได้) ในช่วงเวลาหลายสัปดาห์เพราะฉันต้องคิดอึทั้งหมดนี้ด้วยตัวเอง มันไม่ได้เป็นประสบการณ์ที่น่ารื่นรมย์ฉันต้องพูด (ไม่สามารถใช้ HID ในกรณีของฉัน) ไม่มีหนังสือที่ดีในหัวข้อเช่นกัน ฉันเกลียดหนังสือของแจน Axelson บน USB และพิจารณาหนังสือของเธอว่า "ไร้ประโยชน์เกือบทั้งหมด" สำหรับใครบางคนที่พยายามจะทำงานเป็นไมโครฝังตัวตั้งแต่แรก อันที่จริงแล้วมันไร้ค่าส่วนใหญ่ หากคุณรู้จักหนังสือดี ๆ สำหรับผู้พัฒนา (ฮาร์ดแวร์ที่กำหนดเอง) ฉันยินดีที่จะได้ยินชื่อ !! +1
jonk

1
VID / PID ขึ้นอยู่กับตลาดที่มีศักยภาพของ Op เป็นความท้าทายที่ใหญ่ที่สุด การใช้วิธีการของ Axelsons นั้นใช้งานได้ในแง่ที่ว่าคุณสามารถใช้ VID ของเธอ (ซึ่งมีราคา $ 3.5k สำหรับตัวคุณเอง) และขอ PID ของเธอหนึ่งรายการขึ้นไปฟรี คุณสามารถขอ PID จากองค์กรต่างๆเช่น Microchip / Atmel, FTDI และ TI (อ้างอิงจาก VID ของพวกเขา) IMO หนังสือที่ดีที่สุดคือ Intels "การออกแบบ USB ตามตัวอย่าง" มันค่อนข้างยาว แต่เหมาะสำหรับ USB 2.x น่าเสียดายที่ตัวอย่างรหัสจำนวนมากแตกเนื่องจากการเปลี่ยนแปลงใน Visual Studio ผ่านการแก้ไข
Jack Creasey

1
วิธีที่ดีที่สุดในการเข้าถึง VID / PID สำหรับมือสมัครเล่นคือใช้ LUFA (ซึ่งฟรี): fourwalledcubicle.com/files/LUFA/Doc/130303/html/ ...... ..... สิ่งเหล่านี้ไม่สามารถใช้ในผลิตภัณฑ์เชิงพาณิชย์ได้ เหมาะสำหรับใช้ในบ้าน / สาธิตซึ่งคุณสามารถควบคุมการชนในระดับใหญ่
Jack Creasey

1
PS การแนะนำที่ดีคือการใช้ "การออกแบบ USB ฝังตัวตามตัวอย่าง: FTDI ที่เผยแพร่: ftdichip.com/Support/Documents/TechnicalPublications/ ...... ... นี่เป็นตัวอย่างที่มีประโยชน์มากมาย (ขึ้นอยู่กับอุปกรณ์ FTDI ของหลักสูตร) ​​และสิ่งที่เกี่ยวข้องทั้งหมด ไฟล์งานรวมถึงการใช้งานคอนโทรลเลอร์ PSOC
Jack Creasey

1
โปรดทราบว่าหากอุปกรณ์ USB ขับเคลื่อนด้วยตนเองจะต้องรอจนกว่าจะตรวจพบแรงดัน VBUS ก่อนที่จะใช้ตัวต้านทาน D + หรือ D-pull-up ฉันไม่ผ่านการรับรองเรื่องนี้
Adam Haun

4

พฤติกรรมและการโต้ตอบของ USB "คู่ค้า" (โฮสต์และอุปกรณ์) กระจัดกระจายไปตามข้อกำหนด USB วิธีที่ดีที่สุดในการหาสาเหตุคือดูที่ "Device Framework" บทที่ 9 ซึ่งอธิบายสถานะอุปกรณ์ที่เป็นไปได้ (ซึ่งได้รับคำสั่ง) (รูปที่ 9-1) และเฟรมเวิร์ก Host (และ Hub) ในบทที่ 10 และ 11 รายละเอียดโพรโทคอล (ไพพ์ / ประเภทธุรกรรม / เลเยอร์โพรโทคอล OSI ที่เป็นนามธรรม, โครงร่าง PCB, ฯลฯ ), การยึดเกาะที่ดีกว่าในการโต้ตอบครั้งแรกสามารถทำได้โดยการศึกษาแผนภาพสถานะพอร์ต (รูปที่ 11-10)

โดยพื้นฐานแล้วหากไม่ได้เชื่อมต่อสายเคเบิลระหว่างโฮสต์และอุปกรณ์พอร์ตโฮสต์จะอยู่ใน "Powered State" (VBUS เปิดอยู่) แต่เป็น "Disconnected" สาย D + และ D- จัดขึ้นต่ำพร้อมกับดึงลงได้ 15k

เมื่อเชื่อมต่อสายเคเบิลแล้ว VBUS จะเข้าสู่อุปกรณ์ อุปกรณ์รับรู้ว่ากำลังเชื่อมต่ออยู่และส่งสัญญาณเหตุการณ์ "เชื่อมต่อ" โดยการดึงสายสูงหนึ่งใน D, D + ถ้าเป็นอุปกรณ์ FS / HS และ D- ถ้าเป็นอุปกรณ์ LS

ดึงสาย D +/- ที่พอร์ตหนึ่งเพื่อให้ซอฟต์แวร์โฮสต์ขัดจังหวะการรายงาน "การเปลี่ยนสถานะพอร์ต" ซอฟแวร์โฮสต์ (ปกติ ehci.sys) จากนั้นประทับจิต "ตั้งค่า" พอร์ตลำดับว่าโดยเฉพาะอย่างยิ่งพอร์ต เมื่อเสร็จสิ้นการ "รีเซ็ตพอร์ต USB" สำเร็จพอร์ตโฮสต์จะเปิดใช้งานสำหรับการสื่อสาร USB พอร์ตเริ่มทำงาน (แพ็คเก็ตเฟรมเริ่มไหลออกมา)

การใช้โปรโตคอล USB โฮสต์จะกำหนดที่อยู่เฉพาะให้กับอุปกรณ์นี้และอ่าน "ตัวบอกอุปกรณ์" สิ่งนี้จะเริ่มต้นกระบวนการ "แจงนับอุปกรณ์" ตัวอธิบายอุปกรณ์มีข้อมูลเกี่ยวกับคลาสอุปกรณ์ที่เป็นของ (HID, COM, MIDI, เครื่องพิมพ์ ฯลฯ ) และ VID / PID ของอุปกรณ์นั้นรวมทั้งข้อมูลอื่น ๆ อีกมากมายดูตารางที่ 9-8

หลังจากรับคลาสอุปกรณ์และ VID / PID ซอฟต์แวร์โฮสต์จะพยายามจับคู่ข้อมูลนี้ในการลงทะเบียนอุปกรณ์และโหลดไดรเวอร์อุปกรณ์ที่เกี่ยวข้องไม่ว่าจะเป็นอุปกรณ์ทั่วไปหรือเฉพาะผู้จำหน่าย (ถ้ามี) ไดรเวอร์อุปกรณ์เสร็จสิ้นกระบวนการแจงนับโดยเลือกอินเตอร์เฟสอุปกรณ์ที่ลงท้ายด้วยการตั้งค่า "การกำหนดค่าอุปกรณ์" เห็นได้ชัดว่าการสื่อสาร USB ทั้งหมดได้รับการยอมรับด้านหลังพอร์ตนี้โดยเฉพาะเท่านั้น

ข้างต้นเป็นกรอบทั่วไปของโปรโตคอลเชื่อมต่อ USB การจัดทำข้อมูลสำหรับวัตถุประสงค์เฉพาะใด ๆ (เช่น MIDI) เป็นเรื่องที่แตกต่างกันและมันถูกจัดการทั้งในระดับแอปพลิเคชันหรือระดับไดรเวอร์อุปกรณ์หากระบบได้รับคลาสอุปกรณ์ที่เหมาะสม ที่จะได้รับการสื่อสาร MIDI พื้นเมืองของอุปกรณ์ที่ต้องมีชั้นนี้ในบ่งและปฏิบัติตามนิยามคลาส MIDI

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.