之前回顾了SES的基础知识以及几种在实际应用下的实现方式,最后说一下SGPIO,通用串行输入/输出总线。很多做硬件设计的同学对GPIO,通用输入/输出非常的了解,而SGPIO是把通用目的I/O信号来串行化的一种方法。SGPIO定义了Initiator初始端(比如一个主机适配器)Target目的端(比如放置磁盘的背板)之间的通信,通常情况下Target目的端可以把Initiator初始端的输出信号转换成多个并行的LED信号。
      其实SGPIO是和SES没有任何关系的标准,SES是通过SCSI的命令集来实现对磁盘状态灯、温度、风扇等元素的管理,而SGPIO相对于SES来说功能简单的很多,仅仅是对磁盘状态灯的管理。比如,RAID5组中的某个磁盘由于ECC错误导致“Failed”掉线,RAID5变成Degraded降级状态,而这个时候Initiator控制端比如卡或者控制器等,可以通过SGPIO来让那颗磁盘的状态灯变成红色,从而系统管理员可以发现并更换问题磁盘。
        SGPIO总线共有四个信号线,分别是SClockSLoadSDataOutSDataIn,如下图所示,其中前3个是从Initiator发送到Target的,而最后一个是从Target发送到InitiatorSClock是时钟信号,SLoad是一个位流传输的最后时钟,SDataOut是串行的数据输出位流,而SDataIn是串行的数据输入位流,SDataIn不是所有的SGPIO设备都支持的,是可选的。
 
          SGPIO总线通过以上4组信号就可以控制磁盘灯的状态,一般来说支持3种状态,ActivityLocateError。这是一个相对比较独立的标准,因为它独立的定义了物理层、协议层和应用层等等。在实际的应用中,目前最为流行的莫过于在SAS HBA或者RAID卡的X4宽接口中,如果卡端支持SGPIO的话,这种宽接口标准正好包含了除了数据通路之外的SGPIO信号接口,如下图所示,通过一个统一的包含数据、SGPIO信号的线缆就可以实现数据的传输以及磁盘信号灯的控制,实现方式比较简单。SES Over I2C是通过卡上面的I2C接口采用特殊的线缆来管理,所以可以称作带外管理;而对于SGPIO来说,可以称作带内管理。
        当然,除了卡支持SGPIO外,磁盘背板也需要支持SGPIO,而目前最为流行的是采用AMI公司的9071/9072芯片,这种芯片支持两种方式的机箱管理,一种是SES Over I2C,另外一种就是SGPIO。对于SGPIO标准的详细定义,可以参照SFF-8485的规格书,由SFF标准委员会制定,  [url]ftp://ftp.seagate.com/sff[/url]