2023年12月10日发(作者:)

SPI协议分析仪的使用介绍及flash无法启动两种案例分析

二、案例分析

针对国产CPU的BIOS出现的问题,带外刷新BIOS,重启OS无法再次进入系统,BIOS无法启动

三、分析过程

1、在产品关机状态下,带外刷新BIOS FW,刷新完成后,通过BMC串口发开机指令,BIOS不启动;

2、在上述情况下,对BIOS flash的 reset PIN,手动拉低后,再次发开机指令,BIOS 启动;

3、在设备开机状态下,带外刷新BIOS FW后,系统下reboot后,BIOS不启动;手动对reset PIN拉低后,再次按reset button后,BIOS

可以启动;

初步结论:在BMC刷新flash后,需要对flash进行复位后,BIOS才能正常加载。

4、产品上flash型号:MX25L25645GM2I-08G,CPU通过BMC的SPI Pass through连接至flash;Flash除SPI信号连接至BMC外,

另外的RESET和WP信号10K上拉;与公司一款intel CPU产品架构相同;

5、对MX25L25645GM2I-08G和MX25L25635FMI-10G(intel CPU上用的flash芯片)的指令进行比对,无差别,基本功能都是一致

的,芯片ID都是一值的,45是35的升级换代产品。

初步结论: 硬件上与intel产品选料及设计无区别。

6、在BMC刷新BIOS之后,reset CPU后,CPU与flash交互的波形,如左图;在产品断电重启之后,CPU与flash交互的波形,如右图。

7、CPU启动后会通过发送0x03指令从flash内部读取数据,在第一次无返回数据后,会再次发送,连续发送5次,若无数据,不再发送。

正常启动时,会在第二次flash的SO返回数据,如右图,异常现象如左图,一直无数据返回。

初步结论:在CPU启动时,从flash内部读取数据指令相同,区别是flash有没有返回,排除CPU端的影响。

8、抓取Intel的CPU、国产CPU产品启动时读取flash的指令与MOC2.0 Intel CPU启动时读取flash的指令进行对比;

(1)intel CPU在读取时会先读取flash的 JEDEC Flash Parameter信息,其中包括flash支持ADDRESS mode,然后用0X03指令读数

据,ADDRESS MODE 为3字节;

(2)国产产品不会读取flash的 JEDEC Flash Parameter ,直接用0X03指令读数据,ADDRESS MODE为3字节。

9、intel CPU产品的烧写过程

国产产品的BIOS Fflash烧写过程:

初步结论:flash address mode默认是3字节,intel 产品在烧写及启动时,均是3字节;国产产品在烧写时切成4字节,直接开机时,国产

CPU端默认要求是3字节,从而出现无法启动的情况。

四、结论及解决措施

问题根因: BMC烧录过程中,将ADDRESS mode设置为4 byte;CPU端只支持3 byte。

解决措施:在BMC烧录后将addrese mode还原成3 byte,通过soft reset或者发exit 4 byte mode指令。

五、另一flash无法启动的案例FPGA芯片 可以匹配的flash清单中包括Macronix 的MX66U1G4芯片;

对芯片通过烧录器离线烧录FPGA FW .bin文件后,焊接在板子上,开机后FPGA FW没有正常加载,通过vivado 软件JTAG 烧录.mcs

后,才能正常工作。

但在使用MICRON芯片MT25QU01时,无上述问题。

1、MICRON芯片MT25QU01GBBB8 离线烧录后贴片,开机FPGA正常加载无问题,已批量验证;

2、Macronix 的MX66U1G4芯片作为替代料进行验证,两种方式更新FW后,FPGA FW均无法正常加载, 一种是使用烧录工具离线烧

录,另一种是在线通过BMC更新;

3、选用3张MX66U1G4芯片FPGA无法加载的卡子,用Vivado软件通过JTAG更新FPGA FW后,重启后,FPGA FW可以正常加载;

4、对此量测正常板卡与异常板卡,开机启动时的SPI波形差异点,总结如下:

(1)正常板卡,起始时CLK频率为2.5MHz,600us后频率改为5MHz;但异常板卡,CLK频率始终为2.5MHz;

(2)正常板卡,FLASH_SPI_D1

FLASH_SPI_D3开机时有数据;异常板卡,FLASH_SPI_D1

FLASH_SPI_D3开机时没有数据;3)正常板卡与异常板卡,FLASH_SPI_CLK、FLASH_SPI_D0启动时140us的数据是相同的;

分析结论:在FPGA启动时,通过Single SPI从flash读取信息,然后通过Quad SPI从flash中读取信息,异常板卡的flash不支持Quad SPI

模式,从而导致无法读出数据;

系统上电后要使用4byte Quad I/O read,需要在板厂烧录时,在烧录软件中将flash QE bit提前置位;

Flash的配置位支持软件设置,在BMC更新flash FW时,也可以设置,设置后即使断电也不会消失。

总结:上述讲述两种flash无法启动案例,一种是address mode不匹配,另一种为QE未使能。