มีการกำหนดอุปกรณ์ในการแจงนับ PCI อย่างไร (รถบัส / อุปกรณ์ / ฟังก์ชั่น)


8

ฉันสับสนเกี่ยวกับการแจงนับ PCI Bus / อุปกรณ์ / ฟังก์ชั่น เมื่อดูที่หน้า Wikipedia สำหรับการกำหนดค่า PCIฉันเห็นว่าสำหรับบัสที่กำหนดไว้ต้นแบบจะขอ ID ผู้ขายและ ID อุปกรณ์สำหรับอุปกรณ์ทั้งหมดที่ใช้ฟังก์ชัน 0 หากมีการส่งคืน 0xFF ทั้งหมดแสดงว่าไม่มีอุปกรณ์อยู่ในนั้น หากพบ ID อุปกรณ์และ ID ผู้จำหน่ายที่ถูกต้องจะมีหน่วย PCI อยู่ที่นั่นและจะมีการระบุ ฉันไม่แน่ใจว่ากำหนดอุปกรณ์ใน bus.device.function ได้อย่างไร

ตัวอย่างเช่นสมมติว่าฉันมี CPU ที่มีบัส PCI หนึ่งบัสและอุปกรณ์ต่อพ่วง PCI หนึ่งอันติดอยู่กับมัน ฉันเข้าใจว่า CPU จะดูบนบัส 0 (โดยค่าเริ่มต้น) และจะตรวจสอบหมายเลขอุปกรณ์ทั้งหมดที่ดูที่ฟังก์ชัน 0 หมายเลขอุปกรณ์ต่อพ่วงได้รับการพิจารณาอย่างไร

คำตอบ:


6

ในเฟรมเวิร์ก PCI ดั้งเดิม ("Conventional PCI") และใน PCI-X เช่นกันอุปกรณ์ที่ตรงกับ "สล็อต" แต่ละตัวเชื่อมต่อของตัวเองที่เชื่อมต่อกับบัสขนานเดียวกัน แต่ละช่องมีพิน ID ที่ไม่ซ้ำกันซึ่งถูกยืนยันในระหว่างการแจงนับ การแจงนับเป็นสิ่งสำคัญที่ถาม (สำหรับแต่ละช่อง): "เฮ้มีอะไรในช่องนี้บ้างไหม" อุปกรณ์ตอบสนองโดยการขับขี่ข้อมูลไปยังรถบัสเพื่อตอบสนองต่อสัญญาณนี้ การขาดการตอบสนองหมายถึงไม่มีอุปกรณ์

อุปกรณ์อาจเป็น "สะพาน" ซึ่งหมายความว่ามันจะกลายเป็นรถเมล์รอง รถบัสนั้นจะมี ID แยกต่างหาก (ที่ได้รับมอบหมายจากอัปสตรีม) และจะมีชุดของช่องของตัวเองที่ระบุอย่างอิสระ

PCI-Express (PCIe) นั้นแตกต่างกันโดยสิ้นเชิง PCIe ไม่ใช่รถบัสจริงๆ - เหมือนในทรัพยากรที่ใช้ร่วมกันระหว่างอุปกรณ์ อุปกรณ์แต่ละตัวจะมีการเชื่อมต่อแบบอนุกรมจากจุดต่อจุดไปยังอุปกรณ์ต้นน้ำของตัวเอง (และอุปกรณ์ดาวน์สตรีมอื่น ๆ - และหากมีอุปกรณ์ดาวน์สตรีมนั่นหมายความว่ามันทำหน้าที่เป็นบริดจ์ด้วย) คิดถึง PCIe เหมือน LAN บริดจ์แต่ละอันนั้นคล้ายกับสวิตช์ที่มีพอร์ตเชื่อมต่อกับอุปกรณ์อื่น ๆ อุปกรณ์อื่นอาจเป็นอุปกรณ์เทอร์มินัลหรืออาจเป็นสวิตช์อื่น ๆ (เช่นบริดจ์ PCIe)

PCIe ได้รับการออกแบบในลักษณะที่กรอบแนวคิดและที่อยู่ (และพฤติกรรมที่ให้กับซอฟต์แวร์) เข้ากันได้กับ PCI และ PCI-X การใช้งานนั้นแตกต่างอย่างสิ้นเชิง ในการแจกแจงอุปกรณ์ตัวอย่างเช่นเนื่องจากเป็นแบบจุดต่อจุดคำถามเดียวที่ต้องพิจารณาในแต่ละจุดในการแจงนับคือ "มีอะไรบ้าง" เนื่องจากอุปกรณ์แต่ละเครื่องมีชุดสายอิสระของตัวเอง ID อุปกรณ์จึงเป็นรหัสฮาร์ดโค้ดทั้งหมด (ดังนั้นแต่ละบริดจ์รวมถึง "รูทคอมเพล็กซ์รูท" ระดับบนสุดจะบอกอุปกรณ์แต่ละรายการว่า ID อุปกรณ์ของอุปกรณ์นั้นคืออะไร)

ในทุกกรณีส่วน "ฟังก์ชั่น" ของบัส / อุปกรณ์ / ฟังก์ชั่นจะถูกจัดการอย่างเคร่งครัดภายในอุปกรณ์ต่อพ่วง ตัวอย่างเช่นคอนโทรลเลอร์สองพอร์ต NIC มักจะมีสองฟังก์ชันหนึ่งฟังก์ชันสำหรับแต่ละพอร์ต สามารถกำหนดค่าและใช้งานได้อย่างอิสระ แต่เส้นทางข้อมูลจาก CPU ไปยังฟังก์ชั่นนั้นเหมือนกันสำหรับทั้งคู่


1
คำตอบนั้นค่อนข้างสับสน: 1) ใน PCI "หมายเลขอุปกรณ์" จริงๆแล้วหมายถึง "หมายเลขสล็อต" (และมันสมเหตุสมผล) 2) คุณพูดว่า "PCIe แตกต่างอย่างสิ้นเชิง" และ "เนื่องจากแต่ละอุปกรณ์มีชุดสายไฟแยกต่างหาก รหัสอุปกรณ์นั้นเป็นรหัสฮาร์ดโค้ดทั้งหมด "ซึ่งหมายความว่าชุดสายไฟ (= ช่องเสียบ) มีรหัสฮาร์ดโค้ดอยู่ดังนั้นจึงเป็นเช่นเดียวกับใน PCI ตอนนี้คำถามคือเมื่อ "การเข้ารหัส" เกิดขึ้น? สวิตช์ / บริดจ์กำหนด ID อีกครั้งเมื่อรีเซ็ตหรือไม่
xealits

2
ใช่. นั่นอาจเป็นคำพูดที่ดีกว่า ประเด็นก็คือใน PCI การ์ดนั้นอยู่บนบัสที่ใช้ร่วมกัน แต่ "รู้" ว่ามีสล็อตอะไรและตอบสนองเมื่อพินเฉพาะสล็อตถูกยืนยัน ใน PCIe บริดจ์มี N "ชุดสายไฟ" ที่แตกต่างกัน ดังนั้นอุปกรณ์บริดจ์จึงมีหมายเลขสล็อตแบบแยกสำหรับสายไฟทุกชุด จากมุมมองของบริดจ์สล็อตนั้นมีจำนวนแน่นอน มีเพียงการพิจารณาว่ามีบางสิ่งที่นั่น ตัวการ์ดเองไม่ทราบว่ามีช่องอะไรเมื่อสะพานกำหนดว่ามีบางอย่างที่นั่นก็จะบอกอุปกรณ์นั้นว่าหมายเลขช่องคืออะไร
Gil Hamilton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.