能帮看看这个NCSI over MCTP over SMBus**_OEM**的报文内容是不是有错么? 第1个报文就超时了,在app.log中这个时间内页没找到mctpd或者smbus的相关ERROR信息。搞不清哪个字段有问题
BMC SMBus slave address:0x10 (7bits), EID: 0x08
网卡SMbus slave address:0x32 (7bits), EID 0x1E
**BMC发送的请求报文:**64 1f 1e 21 01 1e 08 c8 02 00 01 00 01 01 1f 00 04 00 00 00 00 00 00 00 00 00 00 00 01 ff ff fe da 7b — 这个在app.log的第1347行,我字节加的i2c.cpp打印。
**网卡响应BMC读应答的内容:**1e 65 01 08 1e c0 02 00 01 00 01 81 1f 00 04 00 00 00 00 00 00 00 00 00 00 00 00 ff ff 7e db b0 — 这个在app.log的第1359行,不含最前面的64 1f。 最后的0xb0是按照最前面是0x20 1f …计算的
这个报文是component_drivers里pcie_nic_card下网卡驱动xxx_card.cpp中start_ncsi_protocol()函数里执行的disable_hardware_arbittration(id, 0x1F), 发送NC-SI的“select package”命令。
最终这个mctp超时在25秒后,app.log的第1960行。(不知道为啥不是component_driver的mctp.cpp中函数mctp::request()里设置的15秒 )
有2个想不通的疑点:
- 如果是SMBus层CRC计算不对,按理说最前面的响应BMC的Set EID不应该通过、成功创建网卡的Endpoint设备树。 app.log第1315行 mctpd在收到Set EID的响应报文后创建Endpoint。
- 《南向适配网迅网卡经验分享》中有一个“SMBus_OEM capture [RECV]”截图,我对里面的报文验算最后的CRC,不管怎么换第1个字节的值(0x20、0x21、0x92、0x93),都没算到0x3E。使用的在线CRC计算器(链接),查看“CRC8/SMBUS”的计算值,第一次用需要往下拉、或者网页内ctrl+F搜索一下SMBUS。
附件和说明:
20260409.zip (84.5 KB)
《COM3-MYIR(2026-4-9 14_48_43).txt》 是MYIR3093的串口LOG,现在tracemctp可以抓到应答报文了。不过里面没有上面的报文,上面报文出现得比较早,没来得及进命令行开启trace。
《COM5-网卡(2026-4-9 14_50_20).txt》是我们网卡MCU在SMBus的上被写Request、被读Response的内容。
期望您的帮助,谢谢