1.smbusԴ??
2.系统自带的驱动好不好?
3.UEFI与硬件初始化
4.SeaBIOS(2) - 硬件架构
smbusԴ??
PCA是一种主要用作I2C转路PWM的集成电路,适用于舵机控制、LED颜色控制等。其控制精度在Hz的控制频率下,脉宽为0.5ms~2.5ms,具备位分辨率(级),碧芭宝贝溯源码在哪具体精度计算需参考相关资料。
PCA有两种封装形式:TSSOP与HVQFN,各有相应的引脚排列。每个引脚的功能描述如下图所示。引脚A0-A5共同决定器件地址,由于有6个引脚参与,因此可有个不同的器件地址。除了LED All Call address (E0h)和Software Reset address (h)外,实际可用地址为个,理论上,1个I2C接口可控制多达路PWM。器件地址的设置示意图如下图所示。默认情况下,若A0-A5全部接地,则器件地址为0x。
默认状态下,上电复位后,寄存器地址默认值为0,具体寄存器地址及其用途见下图。重点关注以下寄存器:模式设置寄存器、PWM通道寄存器与占空比设置、PWM周期(频率)寄存器与周期(频率)设置。
在使用模式设置寄存器时,需注意以下事项:首先介绍MODE1寄存器,其功能如下图所示。在配置模式时,特别关注MODE2寄存器的各位功能,如图所示。
PWM通道寄存器的设置如下图所示,每个通道有4个寄存器,每个寄存器图解如图所示。在设置PWM占空比时,源码区分首先配置舵机,例如ON < OFF情况。特殊情况下,PWM周期大于定时器一次计数时,配置ON>OFF情况。
配置PWM频率时,一般采用内置晶振,频率为MHz。通过配置PRE_SCALE寄存器来调整频率,其与PWM频率的关系见下图。若使用内置晶振,取osc_clock=,update_rate=(舵机控制频率Hz)。
推荐硬件设计时,确保OE引脚接低电平以确保IC使能。若连接LED灯,则推荐连接方式如下图所示。
软件设计部分,Micro:bit平台采用TypeScript(JavaScript的超类)进行底层开发,提供基本操作方法及其思路。日后再更新C、C++及其它平台(STM、Linux树莓派、Arduino等)的操作方法。Micro:bit驱动PCA的源代码提供,注意源代码中的时间为us,与教程中的ms不同。
树莓派平台采用Python驱动PCA,首先安装Python和smbus库。Python代码如下所示,保存文件名为pca.py,命令行进入该文件所在的路径,运行该Python脚本。执行命令后,即可控制舵机从0度转到度,再从度转到0度。
系统自带的源码组装驱动好不好?
操作系统自带的驱动并不一定是最好的驱动
相信我们身边有许多这样的“高手”,当同学或别人找不到某款硬件的驱动或不知安装什么操作系统好时,他们往往干脆地回答:“当然是装Vista了,什么驱动都不用装,系统自己就会认出来了!” 如果你愿意深入想一下的话你就会明白这句话是错误的,照那样说的话十年之后的硬件Vista也都能支持了?这显然没有辩证地看问题,操作系统自带的驱动仅仅是那些在操作系统推出之前就存在的硬件,那些后于操作系统推出的硬件自然就不在支持之列了。即便如此对于在系统支持之内的硬件而言系统自带驱动也存在两点先天的缺陷:
缺陷1:硬件性能无法得到充分发挥
系统支持的硬件在安装驱动时确实很方便,方便到了连安装程序都不用,打开你的资源管理器就可以看到具体的型号,但是除此之外和正常安装的驱动相比是不是缺了些什么呢?最显著的是少了许多对硬件工作状态的详细设置界面,例如你的显卡可能除了设置颜色质量、分辩率、刷新率外就什么都没有了,猫虽然可以使用了,但是却找不到诊断和通讯的接口等等,归根结底是因为系统更多是从稳定性和兼容性出发,仅仅驱动了硬件最基本的的工作能力。
况且系统很多时候并没能识别所有的硬件,目前最新的Win7 RC就没能识别笔者年的老主板中的协处理器,必须安装主板芯片组驱动才能识别。
缺陷2:对软件的“兼容性”会越来越差。
为什么要说是硬件对软件也有“兼容性”呢?我们知道,一款硬件在推出之后,技术仍然会继续向前发展,当更先进的技术出现并应用于新产品中后,对应的软件运行环境也会发生相应的变化,旧产品如果得不到驱动程序的支持不能工作于新的软件环境下,将面临着被市场淘汰。相反的,新产品如果得不到驱动的有效支持也是无妨发挥最大性能的,严重的甚至无法工作。
具体到操作系统,有些经验的用户都知道,如果不是进行大规模的Sever Park升级,操作系统中集成的qboot源码驱动是不会更新的。也就是说在相当长的一段时间内你都只能依靠老旧的驱动程序支持硬件工作,让这样一款驱动在几年内应付纷繁复杂的软硬件环境显然是不合适的。
这些与软件“不兼容”现象仅仅靠通过安装系统自带驱动程序是远远不能够解决的,解决的办法一般而言,就是升级最新的驱动程序,那么自然又有人要疑问,这样说来,最新的驱动程序一定就是最好的了?
最新的驱动程序并不一定就是最合适的驱动程序
升级最新的驱动程序几乎可以肯定地说能只会提高硬件的兼容性,至少不会降低硬件的兼容性,但是对于性能来说,就不就这么简单了。拿显卡来说一款硬件在发布之后,初期的驱动程序肯定不可能全部发挥硬件的性能,因此厂家会在后期不停改善算法优化结构从而将硬件的性能充分提炼出来,升级驱动对硬件性能提升总体上是呈现上升趋势的,但是性能的提升不是无限度的,愈到最后提升就会越少,更为重要的是,当产品线不断拉长,新旧显卡在技术上存在较大差异,导致驱动难以采取一致的性能增益标准,最终新版驱动只能放弃那些“前朝遗民”,而且新版本驱动有时还会增加一些早期硬件不能支持的功能,导致早期硬件在安装最新的驱动程序后性能不升反降的现象。
如ATi最新发布的催化剂9.4版驱动,首次放弃了对DX9显卡的支持。这样做看似慢待了老用户,实际上驱动两极分化的好处是显而易见的。老硬件用老版本驱动,兼容性稳定性兼顾。新硬件安装新驱动,最大限度榨取硬件性能。而且两极分化后更方便驱动的编写,文件体积也大大减小,实在是一举两得。
至于NVIDIA,虽然没像ATI这么正式的傲慢源码宣布放弃对老硬件的支持,但是放弃老硬件的意图也比较明显了。经常更新N卡驱动的用户肯定注意到了,最近发布的GeForce驱动大都集成了PhysX物理加速驱动, NVIDIA PhysX物理驱动只适用于显存容量不少于MB的GeForce 8/9/系列显卡,支持Windows XP和Windows Vista /-bit操作系统。这样就排除了相当一部分使用低端显卡的用户。
并不是所有的第三方驱动都是最好的
所谓的第三方驱动,通常指那些不满足官方驱动而动手能力比较强的玩家,在官方驱动的基础上进行一系列的破解改造从而将屏蔽的功能或保守的设置强行打开后生成的驱动,如ATi除了Catalyst驱动之外的DNA和Omega驱动,nVIDA除了ForceWare之外的Omega驱动,将nForce2不同版本主板驱动中的AudioDrv、AudioUtl、Ethernet、GART、IDE、MemCtl、SMBus进行自由组合后生成的混合型驱动,再有就是创新声卡中威望甚高的KX、YouP-PAX系列驱动,这些驱动甚至为许多玩家视苦珍宝,的确一些修改较完美的第三方驱动,如声卡驱动,音质提高的快感实在是非外人所感觉到的。但是这些第三方驱动大部分也都存在这样的缺点,没有安装程序,安装复杂,多需要手动设置,同时因为过分追求性能在兼容性上必然有所降低。ATi Catalyst制作人Terry Makedon曾表达过这样的观点:“其他两种驱动(DNA和Omega)都是在ATI开发和测试驱动的基础上的改造,ATi有上百名软件工程师,上千台测试机器,还有一个称为源代码的小东西。如果出于某些原因人们不想用Catalyst,那么我推荐的修改驱动应该是Omega,他一直和ATI合作,并且是Catalyst Beta程序成员,我个人认为他非常专业。因此作为一个终端用户,我感觉Oemga更有可信性。不过我要再说一次,没有一个驱动象Catalyst经过上百种配置测试,并完全由我们支持。”显而易见,对于大多数玩家而言,使用公版驱动得到的是有充分保证的兼容性和稳定性,而第三方驱动并不能保证这一点,如果稳定性和兼容性都无法保证,过分追求性能很容易得不偿失。
选择驱动程序的三个标准
说了这么多,具体于一款硬件究竟该如何选择适合它的驱动程序版本呢?
我们在长期的驱动评测过程中,从大量的实例中总结出了驱动程序版本选择的三条建议,希望能做为大家在驱动版本选择上带来一些启示,从而指导你找到适合自己硬件的最佳驱动版本。
1、 通过官方和微软WHQL认证的
正如ATi Catalyst制作人Terry Makedon所言,任何一家负责的硬件厂商在推出新产品之前必须进行大量的不同平台下的兼容性稳定性测试,如果硬件在某一使用环境中存在问题,厂家就会在驱动内对硬件在该环境下的性能参数进行调低或者更改设置,通过大部分硬件和软件环境测试之后,厂商就会推出一款所谓的官方正式版驱动,当然官方试验室并不能模拟出所有的硬件和软件使用环境,因此如果后续使用中发现新的兼容性问题,厂商就会在适当的时候推出更高版本的官方正式版。驱动程序在通过了厂商测试这一关之后,并不能意味在兼容性上完全没有问题了,在硬件在操作系统使用过程中是否百分之百兼容还需要Windows的掌门人微软出来说话。
WHQL认证的全称为Windows Hardware Quality Labs—Windows硬件质量实验室,它的主要作用是负责创建管理用于测试Windows操作系统及外围设备的兼容性测试工具包,并利用这个工具包以及各种方法对硬件和驱动进行兼容性测试,来保证各种设备和驱动在Windows中的稳定运行。WHQL认证对于用户来说无疑是为驱动买了一份保险,因为微软自己的操作系统由他来做这个认证自然有着令人不容置疑的权威地位,但对于厂商来说却不是一件轻松的事情,它意味着驱动要经过更为严厉更为全面的的软硬件测试流程,通过检测的驱动微软会在驱动中加入数字签名,系统便会自动加载这些驱动程序,反之会在安装时出现如下提示窗口:
没有经过微软WHQL认证的驱动在安装时的提示
经过数字签名的ATI WHQL版驱动
未经数字签名的驱动
从上面的驱动认证过程我们可以看出一款经过WHQL认证的官方正式版驱动无疑在兼容性和稳定性上有着强有力的保证,因此这将是我们进行驱动选择时应第一位考虑的因素。
2、 在硬件推出之后退出市场之前发布的驱动程序
nVIDIA软件工程部副总Dwight Diercks曾向外界阐述了厂家在不同时期的驱动开发侧重点:每当nVIDIA伴随新显卡推出新驱动,新驱动的重点是解决新卡的稳定性和兼容性,而性能则放在了其次的地位。之后随着时间的推移和技术的进展,就会出现一款对这个新卡来说性能得到充分优化,同时兼容性也不错的驱动。
Dwight Diercks的话和我们的观点不谋而合,一款硬件在发布最初稳定性和兼容性是驱动首要解决的问题,硬件的性能往往不能得到百分之百的发挥,但是随着产品上市时间的拉长,程序员有更充足的时间来对驱动进行深度开发,同时根据在使用过程中反馈的情况对驱动进行改进提高,因此在新品发布后期推出的驱动程序往往会在性能上有较大的提升。这一点在ATi和nVIDIA历次新品发布后都有力地得到证明,最为明显的一个例子是NVIDIA发布GeForce .和PhysX 8..驱动后,GeForce8/9/GT系列显卡被赋予了物理加速功能,性能得到极大的提升。
GeForce GTX《虚幻竞技场3》开、关物理加速的测试结果
近一年以来由于经济危机的影响,NVIDIA减缓了新产品的研发,转而充分发掘现有产品的潜力,不断推出新版驱动尽可能的榨取现有产品的剩余性能。短短几个月就发布了数十款显卡驱动。测试版、泄露版、官方正式版交替发布,同一系列显卡短时间内数目如此众多的驱动让谁看都头晕眼花,但是如果按照上面两条原则就可以很快找到你所要的驱动了,排除掉非WHQL官方正式版外,再从剩余中选择版本最高的那一款即是最理想的驱动了。
对于主流硬件而言,上面两个步骤就基本上能找到理想的驱动版本,但是对于那些业已退出市场不再销售的显卡而言,在驱动的选择上还要加上这个条件:
3.驱动是在硬件退出市场之前推出的。
关于这一点我们在第一部分已经做过相关解释,对于那些已经退出市场而且与主流硬件隔代很远的硬件来说,最适合的驱动程序主要是看在它退出市场之前所推出的驱动程序,因为只有那些驱动才是专门为这些硬件量身定做的,而最新的驱动程序即使也能支持它,但是在在兼容性和性能上已经不会有什么大的能量可挖了。
概括起来硬件在驱动选择上需要三步:WHQL官方认证+产品推出之后发布的+产品退出市场之前发布的。
除此之外还有一种驱动选择方法,那就是通过互联网或其它各种途径来选择那些大部分人试用之后反映较好的版本,对首次采用新技术的驱动要谨慎使用。同时我们应该知道:兼容性在不同平台上表现是不一样的,因此要想选择出适合自己硬件的版本,需要使用者多少拥有一点动手能力,通过实际测试从可用的版本中挑选出兼容性和性能真正适合自己的一款驱动。
UEFI与硬件初始化
UEFI论坛的PI规范通过模块化方法支持芯片和硬件平台的初始化,涉及系统初始化、引导和引导前的特殊配置。BIOS领域采用UEFI后,其影响力显著,现已成为固件、操作系统和其他行业标准不可或缺的组件。在Intel架构的PC生态系统中,UEFI规范或其后续的PI规范成为硬件初始化的核心基础。
本文将探讨如何利用UEFI平台初始化(PI)规范来构建和配置芯片和硬件。我们会深入理解规范的构建模块,涉及平台启动流程、特殊模式和常见应用场景,还会关注处理器、内存和图形控制器等硬件的驱动程序。PI规范的普及得益于其二进制兼容性、源代码实现、开源工具支持以及广泛接受的测试标准。
PI规范的出现标志着BIOS角色的转变。它允许芯片供应商提供一次开发、多处使用的初始化代码,解决了过去不同公司基于芯片文档自行开发初始化代码的问题。同时,PI规范使得硬件和固件的部署更加无缝,促进了BIOS生态系统中各参与者角色的整合和责任划分,提高了可测试性和驱动程序的互操作性。
举例来说,PI规范支持像SMBus这样的系统管理总线,提供了标准化的API接口,使得开发者无需深入硬件细节即可使用。这不仅提高了效率,也确保了跨平台的兼容性。UEFI PI规范就像一个模块化菜单,允许开发者按需组合,提升硬件和固件的开发灵活性。
尽管UEFI PI提供了基础框架,但特定小型组件的开发仍需单独处理。总的来说,PI规范为构建高质量固件奠定了基础,使得BIOS工程师的工作更加系统化和高效。
SeaBIOS(2) - 硬件架构
每个BIOS设计时都会针对一套特定的硬件架构,考虑其需求与操作,因硬件资源的多样性,BIOS难以涵盖所有情况。SeaBIOS也不例外,它基于奔腾时代的PC架构,以Intel FX PMC和PIIX芯片组为支撑。
FX PMC作为北桥芯片,连接主板的高速设备,提供处理器的Host总线接口,连接内存DRAM,以及PCI总线接口,构建PCI设备树,涵盖PIIX南桥芯片。
PIIX4南桥芯片连接低速设备,如IDE控制器、DMA控制器、硬盘、USB控制器、SMBus总线控制器,以及ISA总线,用于连接其他低速设备。
由于支持的硬件平台iFX + PIIX过于老旧,已无法满足Intel不断推出的新型芯片组和功能,如PCIe、AHCI。后来,SeaBIOS引入Intel Q芯片组,支持PCIe,以Q MCH作为北桥芯片,ICH 9作为南桥芯片。此平台是Intel在年推出的。
即便QMCH + ICH9的架构已有十多年历史,PMC + PIIX架构更为老旧,但许多虚拟机仍在使用。原因是更新硬件架构的必要性不大,Hypervisor模拟硬件功能而非其内部机制、架构和物理特性。硬件功能与接口保持稳定多年,如PCI接口,模拟时无需大幅改动代码。
理解SeaBIOS的硬件架构对于深入理解其源码至关重要,因为其中包含配置和操作特定芯片组的代码。不理解目标硬件架构,很难解释代码功能。