一种基于SPI总线实现KCS通信的方法与流程

文档序号:31875189发布日期:2022-10-21 21:19阅读:589来源:国知局
一种基于SPI总线实现KCS通信的方法与流程
一种基于spi总线实现kcs通信的方法
技术领域
1.本发明属于计算机固件技术领域,具体涉及一种基于spi总线实现kcs通信的方法。


背景技术:

2.bmc(baseboard management controller)与ipmi(intelligent platform management interface),即基板管理控制器与智能型平台管理接口,是服务器的基本核心功能子系统,负责服务器的硬件状态管理、操作系统管理、健康状态管理、功耗管理等核心功能。
3.bmc是独立于服务器系统之外的小型操作系统,是一个集成在主板上的芯片,也有产品是通过pcie等形式插在主板上,对外表现形式只是一个标准的rj45网口,拥有独立ip的固件系统。服务器集群一般使用bmc指令进行大规模无人值守操作,包括服务器的远程管理、监控、安装、重启等。
4.目前,很多cpu没有集成kcs(keyboard controller style)通信功能,而kcs作为一种用于bmc与bios之间通信的标准接口,在bmc的使用中却越来越重要。当前市面上已经集成了kcs接口的处理器,大多都是将kcs接口挂载在lpc(low pin count)总线上,而更多的处理器并不包含lpc总线,反而内置了多路spi总线,从而不能直接通过lpc进行kcs通信。


技术实现要素:

5.有鉴于此,本发明提供了一种基于spi总线实现kcs通信的方法,能够合理利用服务器硬件主板已有的硬件功能,增加bmc与bios之间的通信通道,提升了服务器系统的可靠性、降低了服务器硬件平台的复杂度、节约了计算机底层硬件成本。
6.一种基于spi总线实现kcs通信的方法,该方法使用了bmc端和bmc对端;其中,bmc端是服务器bmc芯片中运行的软件,用于完成服务器远程带外管理的数据接收和返回,并处理相应的指令;bmc对端是与bmc端进行通信的软件或固件;在服务器不具备通过lpc直接进行kcs通信的情况下,bmc端和bmc对端通过kcs状态寄存器进行通信状态同步,将ipmi协议的数据进行封装,通过既有的spi总线,使bmc端和bmc对端交替作为主设备和从设备,完成多次的信息交互。
7.进一步地,所述bmc端作为主设备时发送信息,bmc对端作为从设备时接收信息。
8.进一步地,所述bmc端包括ipmi命令接口模块、主从模式设置模块、bmc端响应监听模块、kcs状态寄存器、kcs数据封装解封模块、spi数据封装解封模块和数据发送模块;
9.所述ipmi命令接口模块用于bmc端发送和解析ipmi命令;
10.所述主从模式设置模块用于kcs通信时的主设备和从设备;
11.所述bmc端响应监听模块用于监听bmc对端发送的连接请求;
12.所述kcs状态寄存器用于同步kcs通信的信令和状态;
13.所述kcs数据封装解封模块用于对传输数据按照ipmi协议进行封装和解封;
14.所述spi数据封装解封模块用于按照spi协议进行封装和解封;
15.所述数据发送模块用于bmc端,通过spi总线发送数据。
16.进一步地,所述bmc对端包括ipmi命令接口模块、主从模式设置模块、bmc端响应监听模块、kcs状态寄存器、kcs数据封装解封模块、spi数据封装解封模块和数据发送模块;
17.所述ipmi命令接口模块用于bmc对端发送和解析ipmi命令;
18.所述主从模式设置模块用于设置kcs通信时的主设备和从设备;
19.所述bmc端响应监听模块用于监听bmc端发送的连接请求;
20.所述kcs状态寄存器用于存储kcs通信的信令和状态;
21.所述kcs数据封装解封模块用于对传输数据按照ipmi协议进行封装和解封;
22.spi数据封装解封模块用于按照spi协议进行封装和解封;
23.所述数据发送模块用于bmc对端,通过spi总线发送数据;
24.进一步地,所述基于spi总线实现kcs通信的方法实现的步骤如下:
25.步骤一、bmc端完成初始化,并建立模拟的kcs状态寄存器;
26.步骤二、bmc对端完成初始化(bmc对端包括bios或宿主机操作系统),bmc对端模拟建立kcs状态寄存器;bmc端做好数据传输准备,设置kcs状态寄存器为bmc端数据发送状态,并通过主从模式设置模块,将bmc端(自身)设为主设备;
27.步骤三、bmc对端通过查询方式,获取到bmc端的kcs状态寄存器,根据自身状态更新bmc端的kcs寄存器,而后通过主从模式设置模块,将bmc对端(自身)设为从设备,做好发起数据传输请求的准备;
28.步骤四、bmc端收到bmc对端通过kcs寄存器设置的kcs数据接收请求,将调用kcs数据封装和解封装模块,将待发送的数据包按照所述协议转换方式,将ipmi数据逐层封装为kcs数据包;
29.步骤五、bmc端通过spi数据封装和解封装模块,将kcs数据封装为spi数据包,准备好需要返回的数据,并通过gpio发送响应信号;
30.步骤六、bmc对端监测到bmc端设置的gpio响应信号后,将通过spi总线,获取到bmc端准备好的数据,而后调用spi数据封装和解封装模块,将spi数据解封为kcs数据包;
31.步骤七、bmc对端通过调用kcs数据封装和解封装模块,将kcs数据包解封为impi命令,并调用ipmi命令接口,解析并执行bmc端发送的ipmi命令,从而完成一次kcs通信;若bmc对端向bmc端发送数据,其kcs通信过程与上述流程一致。
32.有益效果:
33.1、本发明使用了bmc端和bmc对端;其中,bmc端是服务器bmc芯片中运行的软件,用于完成服务器远程带外管理的数据接收和返回,并处理相应的指令;bmc对端是与bmc端进行通信的软件或固件;通过主板上既有的spi通信硬件机制,通过bmc端和bmc对端通过spi总线传输kcs数据,并根据ipmi协议封装和解封装ipmi数据,增加了新的bmc通信信道,降低了服务器硬件平台的复杂度。
34.2、本发明通过新扩展的基于spi总线的kcs通信机制,能够在bmc的lpc通信出现问题的情况下,切换到spi总线进行ipmi数据通信,提升了服务器系统的可靠性。
35.3、本发明通过既有的bmc、bios及spi的协议支持,实现了基于主板上通用既有的spi总线传输ipmi指令,不需要配置专用的硬件通信模块,节约了计算机底层硬件成本。
附图说明
36.图1为cpu采用lpc总线通信的硬件连接框图;
37.图2为cpu采用spi总线通信的硬件连接框图;
38.图3为spi总线实现kcs通信的数据交互框图;
39.图4为kcs通信的流程图;
40.图5为spi总线连接图。
具体实施方式
41.下面结合附图并举实施例,对本发明进行详细描述。
42.本发明提供了一种基于spi总线实现kcs通信的方法,该方法适应两种硬件连接方式。一种硬件连接方式如图1所示,os端cpu采用lpc总线通信,那么bmc与os之间就需要一个转换芯片(fpga/cpld)将lcp总线数据转换成spi数据,转换芯片以spi总线和bmc通信。另一种如硬件连接方式图2所示,os端cpu直接以spi总线与bmc相连接。不管是哪种硬件连接,本发明的通信方法只限于基于spi总线的通信双方,与bmc连接的另一端统称为bmc对端,也主要阐述bmc端的处理以及bmc对端需要做的逻辑处理。
43.本发明的方法主要实现:kcs数据的传输,以及通过kcs命令所维护的kcs状态寄存器。如附图3所示,本发明的实现包括以下步骤:
44.步骤一、bmc端完成初始化,并建立模拟的kcs状态寄存器;通信双方都需要模拟一个kcs的状态寄存器。bmc对端通过查询的方式,获取bmc端的kcs状态寄存器。并根据自身的状态,更新bmc端的状态寄存器。kcs的通信流程图参考kcs协议,这里不做多的描述。模拟kcs状态寄存器的内容如下表:
[0045][0046]
步骤二、bmc对端完成初始化(bmc对端包括bios或宿主机操作系统),bmc对端模拟建立kcs状态寄存器;bmc端做好数据传输准备,设置kcs状态寄存器为bmc端数据发送状态,并通过主从模式设置模块,将bmc端(自身)设为主设备。
[0047]
其中,spi总线主从模式连接如附图5所示,spi总线主模式端通过控制引脚拉低先选通从模式端设备,在引脚输出低电平期间交互的数据有效。同时,spi总线主模式端通过sclk引脚输出串行时钟,spi总线从模式端该sclk引脚作为输入采样时钟。spi总线主
模式端通过mosi引脚将数据按照sclk时钟周期,将数据发送到从模式端。spi总线主模式端通过miso引脚按照sclk时钟周期接收从模式的数据。
[0048]
步骤四、bmc对端通过查询方式,获取到bmc端的kcs状态寄存器,根据自身状态更新bmc端的kcs寄存器,而后通过主从模式设置模块,将bmc对端(自身)设为从设备,做好发起数据传输请求的准备;
[0049]
步骤四、bmc端收到bmc对端通过kcs寄存器设置的kcs数据接收请求,将调用kcs数据封装和解封装模块,将待发送的数据包按照所述协议转换方式,将ipmi数据逐层封装为kcs数据包;其中kcs的数据封装方法如下:
[0050]
kcs数据分为数据和状态2种数据,并以不同的格式进行封装。lpc总线上挂载的kcs数据就是用不同的地址来区分数据与状态2种。这里,通过传递多个spi数据封装一个kcs数据,并通过不同标识来区分。
[0051]
比如:设定3个spi数据中携带1个kcs数据,其中,前2个作为固定标识,第3个才是实际的kcs数据。
[0052]
spi数据(十六进制)代表的kcs数据(十六进制)0c a3 xx命令xx0c a2 xx数据xx
[0053]
bmc端接收到的spi数据,需要剥离标识后,再处理。bmc端发送数据是,同样也需要将标识添加上之后才发送。bmc的对端也需要做如此封装。
[0054]
步骤五、bmc端通过spi数据封装和解封装模块,将kcs数据封装为spi数据包,准备好需要返回的数据,并通过gpio发送响应信号;
[0055]
步骤六、bmc对端监测到bmc端设置的gpio响应信号后,将通过spi总线,获取到bmc端准备好的数据,而后调用spi数据封装和解封装模块,将spi数据解封为kcs数据包;
[0056]
步骤七、bmc对端通过调用kcs数据封装和解封装模块,将kcs数据包解封为impi命令,并调用ipmi命令接口,解析并执行bmc端发送的ipmi命令,从而完成一次kcs通信。
[0057]
若bmc对端向bmc端发送数据,其kcs通信过程与上述流程一致。
[0058]
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1