IPMIUARTPROTOCAL.docx
《IPMIUARTPROTOCAL.docx》由会员分享,可在线阅读,更多相关《IPMIUARTPROTOCAL.docx(13页珍藏版)》请在冰豆网上搜索。
![IPMIUARTPROTOCAL.docx](https://file1.bdocx.com/fileroot1/2022-12/13/45460eb3-b63e-4bb6-a5c3-785dc295f91c/45460eb3-b63e-4bb6-a5c3-785dc295f91c1.gif)
IPMIUARTPROTOCAL
IPMI串口通信设计
ReleaseHistory
Version
Comment
Author
Data
0.1
Initialrelease
gyl
2007-5-15
0.2
Addcommand:
E508,E509,E50AModifycommand:
E506
gyl
2007-8-3
0.3
Addeventcommand0x5EFEReadregcommandfunctionadjust
gyl
2007-8-31
0.4
Addmoreevent
gyl
2008-1-22
0.5
Logenabledataadjust
gyl
2008-4-7
0.6
ERRlogadd
gyl
2008-05-13
0.7
Addresetsys,Keepconnection,addeventforfpgaboot
gyl
2008-07-25
0.8
AddmutilDSPreseterrorissue(seemarkread)
Gyl
2008-07-26
0.9
Addnetportlinkingevent
Gyl
2008-07-31
1.0
Addboardinfohandle(replace0xE50B)
Gyl
2008-08-20
1.1
Gyl
2008-08-21
1.
串口通信数据报格式(SLIP)
下面的规则描述了SLIP协议定义的帧格式:
1) 数据报以一个称作END(0xc0)的特殊字符结束。
同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么END字符将结束这份错误的报文。
这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2) 如果报文中某个字符为END,那么就要连续传输两个字节0xdb和0xdc来取代它。
0xdb这个特殊字符被称作SLIP的ESC字符,但是它的值与ASCII码的ESC字符(0x1b)不同。
3) 如果报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节0xdb和0xdd来取代它。
图2-2中的例子就是含有一个END字符和一个ESC字符的IP报文。
在这个例子中,在串行线路上传输的总字节数是原报文长度再加4个字节。
2.
命令集索引
CMD
COMMENT
DATA
ACK
DATA
0xE500
FPGAimagedown
image
0x5E00
Ackstatus
0xE501
DSPbootloaderdown
image
0x5E01
Ackstatus
0xE502
FPGAboot
Boardnum
0x5E02
Ackstatus
0xE503
DSPboot
Board+dspnumber
0x5E03
Ackstatus
0xE504
Setserialportbaud
Port+Baudrate
0x5E04
Ackstatus
0xE505
Settargetlogenable
Enableport
0x5E05
Ackstatus
0xE506
UpdateEPROM
EPROMheadanddata
0x5E06
Ackstatus
0xE507
ResetDSP
Samewith0xE503
0x5E07
Ackstatus
0xE508
ReadRegister
Registertype
0x5E08
Registerdata
0xE509
WriteRegister
Registertypeanddata
0x5E09
Ackstatus
0xE50A
UpdateAMCfirmware
NOTSUPPORT
0x5E0A
Ackstatus
0xE50B
Getfirmwareversion
Boardnum
0x5E0B
Boardinfo
0xE50C
Geterrorlog
NULL
0x5E0C
Errorloginfo
0xE50D
ResetSYS
NULL
0x5E0D
Ackstatusornoresponse(doreset)
0xE50E
keepconnect
Connectiontimesetting
0x5E0E
Ackstatus
0x5EFE
Eventmsgupload
0x5EFF
Loginfoupload
3.
主机发送命令数据到目标机帧格式:
Cmd:
请求命令字,可以扩展。
0xE500:
FPGAfirmwaredownload.
Sn:
sequencenumber(0,1,2,3,….)
Payloadlength:
thelengthofpayloaddata。
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
FPGAfirmwareimage
0xE501:
dspfirmwaredownload.
Sn:
sequencenumber(0,1,2,3,….)
Payloadlength:
thelengthofpayloaddata。
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
DSPfirmwareimage.
0xE502:
FPGAboot.
Sn:
0
Payloadlength:
1。
Payloadcrc:
0.
Headcrc:
the16bitcrcchecksumofhearder
Data:
boardnumber(1byte)
0xE503:
dspboot
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
boardnumber(1byte),dspnumber(1byte)
Noteboardnumber0~2AMCBoard
0xE504:
setserialportbaud.
Sn:
0
Payloadlength:
N
Payloadcrc:
0.
Headcrc:
the16bitcrcchecksumofhearder
Data:
4byte(port),4byte(Baudrate)
0xE505:
settargetlogenable.
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x03(uart3octern),0x0(uart02468),0xFF(disable)
0xE506:
updateEPROM.
Sn:
sequencenumber(0,1,2,3,….)
Payloadlength:
2+thelengthofpayloaddata。
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1byte(epromtype),1byte(boardnum),Epromdata()
0xE507:
ResetDSP
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1byte(boardnumber),1byte(dspnumber)
0xE508:
ReadRegister
Sn:
0
Payloadlength:
5
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1byte(device:
0->switch;1->sensor,2->fan,3->power,4->hotswap),
4byte(switch->addr,sensor->(boardnumber:
2byte,sensornumber:
2byte),
fan->(fannumber:
4byte),power->(boardnumber:
4byte),
hotswap->(boardnumber:
4byte))
Byte0
Byte1
Byte2
Byte3
Byte4
Switch
0
Switchaddr
Sensor
1
boardnumber
Sensornum
fan
2
fannumber(0)
power
3
boardnumber
Hotswap
4
boardnumber
ResetOcten
5
Cable
6
Note:
boardnumber0:
MCH1~3AMC4PowerBoard
Sensornum:
thermal0~1
0xE509:
WriteRegister
Sn:
0
Payloadlength:
9
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1byte(device),4byte(addr),4byte(data)
0xE50A:
UpdateAMCfirmware(onlysupportbyMCH).
Sn:
0
Payloadlength:
2
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1bytes(boardnum(0xFF==ALLboard))
1bytes(Firmwaretype0x00==FPGA,0x01==DSP)
0xE50B:
Getfirmwareversion.
Sn:
0
Payloadlength:
2
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1bytes(boardnum(mch0123+powerboard4))
1bytes(researve)
0xE50C:
GetERRORLOG.
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1bytes(reserved)
0xE50D:
ResetSYS.
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1bytes(reserved)
0xE50E:
keepconnect.
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1bytes(0x**,after**secnotreceivedkeepingwillresetoctern,
0xFFstopkeep,0x00keeping)
//Note 即使没有启动KEEP,也会在约30min后重启octern
//everyticks=10sec*254~=42min;实际使用必须<30分钟
4.
目标机发送确认或者LOG到主机
Cmd:
应答命令字,和请求配对
0x5E00:
AcktheFPGAfirmwaredownload.
Sn:
equalthesequencenumberofthereceived
Payloadlength:
thelengthofpayloaddata。
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x00(failure)
0x5E01:
Ackthedspfirmwaredownload.
Sn:
equalthesequencenumberofthereceived
Payloadlength:
thelengthofpayloaddata。
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x00(failure)
0x5E02:
AcktheFPGAboot.
Sn:
0
Payloadlength:
thelengthofpayloaddata
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x00(failure)
0x5E03:
Ackthedspboot
Sn:
0
Payloadlength:
thelengthofpayloaddata
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x00(failure)
0x5E04:
Acksetserialportbaud.
Sn:
0
Payloadlength:
thelengthofpayloaddata
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x00(failure)
0x5E05:
settargetlogenable.
Sn:
0
Payloadlength:
thelengthofpayloaddata
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x0(failure)
0x5E06:
AcktheupdateEPROM.
Sn:
equalthesequencenumberofthereceived
Payloadlength:
thelengthofpayloaddata。
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x0(failure)
0x5E07:
AcktheresetDSPcommand
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
0x01(OK),0x0(failure)
0x5E08:
AcktheReadReg
Sn:
0
Payloadlength:
6
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
6byte(status:
1byte(OK),0(failure)),
device:
0->switch;1->sensor,2->fan,3->power,4->hotswap
4bytedata(switch->regdata,
Sensor->tmp(С),fan->rpm,
power->managerpower2byte(1OK,0failure),
payloadpower2byte(1OK,0failure),
Hotswap->(1,板子插入,0未插)))
Byte0
Byte1
Byte2
Byte3
Byte4
Byte5
Switch
status
0
registerdata
Sensor
status
1
tmp
fan
status
2
RPM
power
status
3
managerpw
payloadpw
Hotswap
status
4
Inseartion
ResetOcten
Status
5
Cable
Status
6
State
Note:
cablestate(bit0~3figurethecableport1-4connection)
0x5E09:
AcktheWriteReg
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1byte(status:
1(OK),0(failure))
0x5E0A:
AcktheUpdateAMCfirmware(onlysupportbyMCH).
Sn:
0
Payloadlength:
1
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1byte(status:
1(OK),0(failure))
0xE50B:
AckGetfirmwareversion.
Payloadlength:
N
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
Nbytesdataofstring
Format:
“AVONACO”+ProductName+HardwareVersion+SN+PartNum(forFirmwareversion)
0x5E0C:
GetERRORLOG.
Sn:
0
Payloadlength:
xx
Payloadcrc:
the16bitcrcchecksumofPayloaddata.
Headcrc:
the16bitcrcchecksumofhearder
Data:
1bytes(Newlognum)在get一次后将清零,有新的log累计,然后log依次后移,保证最前的都是最新的errlog
{//*5items
1bytes(errorlogtype)
1bytes(errorlognum)
1bytes(boardnum)//(0x10:
MCH0x727476AMC0xC2PowerBoard)
1bytes(reserved)
}
LOGTY