本发明涉及计算机系统的硬件检测方法,具体涉及能检测出晶振频率漂移异常的rtc晶振的检测方法。
背景技术:
rtc(realtimeclock)晶振(32768hz)的主要功能是给rtc模块提供起振频率。如果没有此晶振,rtc的时间就不可能保持,服务器每次启动时,操作系统就没有一个时间基准去校准。当然如果rtc晶振工作不正常的时候,rtc的时间就不准确了,这样就意味着操作系统的时间也不准确了。
时间不准确对服务器而言,是不可容忍的,因为这会造成系列重大问题,比如说这台服务器用在股票交易上,就会使“价高优先,时间优先”的规则变成泡影,使客户造成巨额损失。
现有的服务器在组装过程中,对晶振质量的控制,一般都只是简单测测,看看时间在短时间内是否正常,没有有效的检测和识别方法。因而不能从根本上解决晶振频率漂移出范围的问题,不利于企业控制物料管控成本,也会影响客户的满意率。
如中国专利(申请公布号cn103634121a)公开了“一种提高动态令牌时间可靠性的系统和方法”,该系统包括动态令牌、晶振测试仪、电脑和密码服务器,动态令牌具有显示器,晶振测试仪具有晶振感应探头,晶振测试仪通过第一串口与电脑连接,电脑通过第二串口与动态令牌连接,密钥服务器与电脑连接,晶振测试仪通过晶振感应探头与动态令牌连接,其中,将晶振感应探头检测到的动态令牌的晶振偏差和密钥服务器发送的令牌时间和令牌密钥一起生成令牌种子,发送给动态令牌以生成动态口令。通过本发明,能够保证在正确时间启动动态令牌生成动态口令,从而提高了动态令牌时间的可靠性和稳定性。该发明主要基于晶振感应探头上对动态令牌的晶振偏差进行测量,从而动态令牌端可以在准确的时间内生成动态口令,保证了动态口令对用户身份的有效验证;但仍无法有效检测和识别出晶振频率漂移出范围的问题。
技术实现要素:
本发明的提供一种rtc晶振的检测方法,用于解决现有技术中,对服务器中安装的rtc晶振工作性能、晶振频率漂移出范围的问题没有有效的检测和识别方法,因而不能从根本上杜绝带有瑕疵的服务器产品被提供给市场用户。
本发明通过以下技术方案予以实现:
一种rtc晶振的检测方法,包括以下步骤:
s1:通过i/oport(0*70)读取cmosram状态寄存器a、b、c的设置,并将读取到的数据保存;
s2:设置寄存器a,实现测试过程中的中断能够发出和时钟连续更新;
s3:设置寄存器b中的中断标志位,使闹钟中断有效;
s4:读取当前的cmos时间,记为start_time;
s5:将cmos时间调快;
s6:检查闹钟中断标志位在寄存器c中是否有效;
s7:设定闹钟中断发出;
s8:检查闹钟中断是否发出,如果发出,读取cmos时间,记为end_time;如果end_time减去start_time不等于步骤s5中cmos的调快时间,则表示rtc晶振震荡有问题;反之,则表示rtc晶振震荡合格。
如上所述的一种rtc晶振的检测方法,所述步骤s8中,在rtc晶振震荡经过检测合格时,将步骤s1保存的cmosram的状态寄存器a、b、c的数据,恢复到相应的寄存器中去。
如上所述的一种rtc晶振的检测方法,所述步骤s5中,cmos时间调快1~5秒。
本发明的优点是:
1、能够有效检测和识别出晶振频率漂移出范围的问题,从而减少了我们物料管控的成本,提高了测试覆盖率。
2、通过本方法的使用,能够有效避免将rtc晶振不亮的服务器流到客户手中,导致客诉,以提高客户满意度和减少售后环节、成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍。
图1为本发明的流程图;
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
如图1所示,本发明一种rtc晶振的检测方法,包括以下步骤:
s1:通过i/oport(0*70)读取cmosram状态寄存器a、b、c的设置,并将读取到的数据保存;
nativereadcmos(0x0a,&m_rega);
nativereadcmos(0x0b,&m_regb);
nativereadcmos(0x0c,&m_regc);
s2:设置寄存器a,实现测试过程中的中断能够发出和时钟连续更新;
nativereadcmos(0x0a,&tmp);
nativewritecmos(0x0a,tmp|0x0f);
s3:设置寄存器b中的中断标志位,使闹钟中断有效;
nativereadcmos(0x0b,&tmp);
nativewritecmos(0x0b,tmp&0x02)
s4:读取当前的cmos时间,记为start_time;
readrtctime(&starttime)
s5:将cmos时间调快1秒;
addsecondtotime(&starttime,&m_alarmtimecur,1)
s6:检查闹钟中断标志位在寄存器c中是否有效;
checkinterrupt(oprtcfunc)
s7:设定闹钟中断发出;
s8:检查闹钟中断是否发出,如果发出,读取cmos时间,记为end_time;如果end_time减去start_time不等于1秒,则表示rtc晶振震荡有问题;反之,则表示rtc晶振震荡合格。
readrtctime(&endtime)
进一步的,本实施例将步骤s8中,在rtc晶振震荡经过检测合格时,将步骤s1保存的cmosram的状态寄存器a、b、c的数据,恢复到相应的寄存器中去。
nativewritecmos(0x0a,m_rega);
nativewritecmos(0x0b,m_regb);
nativewritecmos(0x0c,m_regc);
本发明未详尽描述的技术内容均为公知技术。