企业网站建设需要准备资料,男生怎么找的小资源,多用户商城系统是什么,网站美工和平面设计PCIe Vendor ID
想了半天还是觉得从“ID是什么”这个问题开始比较好。那么ID是什么#xff1f;ID就是身份。那身份又是什么#xff1f;身份就是一个合理存在#xff0c;用于区分不同个体。为什么叫“合理存在”呢#xff1f;如果国家不给你发身份证#xff0c;你就是黑户…
PCIe Vendor ID
想了半天还是觉得从“ID是什么”这个问题开始比较好。那么ID是什么ID就是身份。那身份又是什么身份就是一个合理存在用于区分不同个体。为什么叫“合理存在”呢如果国家不给你发身份证你就是黑户很多事你都干不了。这意味着什么呢你合理存在大家才敢认识你了解你跟你一起玩一起做很多很多美好的事。这就是身份的现实意义PCIe的Vendor ID其实也是这个思想。
你想做PCIe产品必须得从PCI-SIG申请一个身份也就是Vendor ID即VID用它来标记你的公司。有了这个东西PCI-SIG的大家庭才带你一起做很多很多事这里可以列举几个事情的例子供大家一起理解。 比如你是个网卡或者显卡芯片的开发者有了Vendor ID你的卡才能合理的接入主机。 比如你要买别家的PCIe IP用来做SOC芯片有了Vendor ID人家才会跟你谈买卖谈技术支持。 比如你发现协议哪里定义的有问题有了Vendor ID才可以提出你的修改意见。 比如你要从PCI-SIG买测试夹具有了Vendor ID人家才卖给你。
还有很多很多事情没有“身份”是做不了的。那没有身份行不行呢这个问题就属于社会学问题了需要大家自己去悟。
我们回头继续思考第一个问题。为什么说有了Vendor ID你的网卡或者显卡才能合理的接入主机呢这是因为在工程上你做完设备之后还要为你的设备做驱动你的驱动要合入操作系统才能工作而操作系统就是根据Vendor ID来选择加载谁家的驱动。想想看为什么你的电脑插上NVIDIA的卡或者AMD的卡都能正常工作为什么换一张不同厂家的网卡机器也照常运转。这背后的逻辑就是用一个简单的Vendor ID来实现的。注意这么讲是有一些不准确的这么讲的目的是为了强调Vendor ID的重要性我们之后会逐步完善其中道理。
当然事情并没有那么简单Vendor ID只是开了个头驱动开发还是有蛮多事情要做的。
协议中的定义
在开始剩下的话题之前我把协议中定义这些ID的地方贴出来这样我们理解起来就有一个直观的感受。
下图是Type 0 Configuration Space Header中的定义。 下图是Type 1 Configuration Space Header中的定义。 我们都知道Type 0类型设备是EP而Type 1类型设备是RC或者Switch。Type 1设备没有Subsystem Vendor ID和Subsystem ID吗其实不是PCI-SIG专门定义了一个Subsystem ID and Sybsystem Vendor ID Capability 来为Type 1设备定义Subsystem Vendor ID和Subsystem ID如下图。 这就是PCIe强大扩展能力的一个表现如果你想扩展一个功能就增加一个Capability。想想看如果16-bit的Vendor ID和Device ID不够用了PCI-SIG会怎么办
从另一个侧面为什么PCI-SIG从一开始就不为Type 1设备在Type 1 Configuration Space Header中定义好Subsystem Vendor ID和Subsystem ID呢增加一个DW不行吗当时的背景我不知道哈反正从现在来看我觉得用一个Capability来扩展的方式增加了协议的理解难度不太好。
PCIe DID、SSID、SSVID
理解了Vendor ID的核心思想再来理解DID、SID、SVID就舒服多了他们都是“身份”只不过应用场景变了。
DID即Device ID。虽然PCI-SIG定义了Device ID的字段但这个字段的值确实由Vendor自行定义的它的目的是用来定义Vendor实现的不同类别的产品。NVIDIA每年都会发布一些产品每发布一个新的产品它的驱动都要随着变化。用Device ID来赋予每个产品不同的身份就可以为不同的产品加载对应的驱动。
SSVID即Subsystem Vendor ID协议上简写为SSVID实际上还有叫SVID的简称虽然我们以协议为准但是这个事情还是要知道的。PCI-SIG定义这个字段的目的是为了把板卡制造商管理起来。如果做芯片的和做板卡的不是同一家公司那么定义这个值就有意义了因为你同一型号的芯片可以卖给多个板卡厂商去做而不同的板卡厂商因为设计上的差异性会引入驱动上的差异性。而用SSVID就可以解决这个问题。
SSID即Subsystem ID同样也还有SID的叫法。借助对DID的理解大家可能已经能知道这个字段的意义了有些PCB厂家可能会用同一个芯片做不同的板卡所以用这个字段来解决这个问题。
顺便再聊一下配置空间中的Revision IDRID。玩家们都知道厂家在发布驱动的时候并不是一次就能发布最好的驱动厂家可能会因为修改BUG、优化性能等原因而修改驱动厂家管这个过程叫驱动升级。驱动每升级一次就要相应的改变一次Revision ID。当然驱动回退也是用这个字段实现的。
最后附一下Linux和Windows操作系统中查看这些ID的方法。大家直观感受一下。
Windows
设备管理器中右击PCI相关硬件 → 属性 → 详细信息 → 硬件ID Linux
使用lspci命令 做个总结
还记得我们前面聊Vendor ID时说过的描述不准确的问题吗PCI-SIG其实是通过VID、DID、SSVID、SSID和RID把整个PCIe设备开发过程中可能发生变化的地方都涵盖进去从而让操作系统总是能加载到正确的驱动的单一个Vendor ID是不够的。
不得不说PCI-SIG定义的ID思想真的是大智慧。这种思想其实现在已经渗透到了很多技术开发领域在我们的芯片开发过程中我们会定义CHIP ID来标识芯片的唯一性我们也会定义Foundary ID来标识芯片是由谁生产的定义TestVendor ID来标识芯片是由谁测试的。甚至在SOC芯片的设计过程中我们也会使用ID的概念来标识各个组件这使得我们在各组件的访问关系上可以做很多的事情比如访问保护等等。
好了这次就写到这里如果有不同见解还是请不吝赐教。