本文基于Vivado软件调试PCIe板卡,讨论PCIe上电后PC机无法识的问题。同时PCIe开发板的flash芯片为:28f00ap30t-bpi-x16,且基于RIFFA2.0框架开发PCIe接口。
一、问题现象
当PCIe开发板供电由外部电源供电更改为PC主板供电时,将PCIe板卡插入到电脑主板中,电脑开机后,PC无法在设备管理器中识别到PCIe设备。
二、问题分析
经过查阅资料发现,主板会在上电的一段时间内与插在主板上的各个设备进行协商,从而得到外接设备的设备号,最终识别该设备。然而不同PC机的主板在启动速度不同,从而导致用于识别设备的时间各不相同。而PCIe开发板在上电时需要一段时间进行初始化,包括:读取FLASH存储器中固化的PCIe程序、配置PCIe设备产生设备号等。当主板启动过快,PCIe还未初始化完成,PC主板与PCIe协商就已经结束,自然便无法识别到PCIe设备。这就解释了为什么在外部电源供电时,PCIe先上电,PC主板后供电的时候PC便能正常识别到PCIe设备。以及为什么在开发板由PC主板供电时老主机能够识别到PCIe,而新几代的主机无法识别到PCIe板卡。
丢一张形象的电脑识别外设的流程图:
三、解决思路与结果
法1
在修改为主板供电后,最先想到的解决思路是人工打断PC启动,等PCIe初始化完成后再继续启动PC,操作方式为:
1、开机并按住键盘的break键不放
2、按住5~10s等PCIe初始化完成,随后松开break键以继续启动PC
3、最终PC正常识别PCIe设备。
法2
但容易发现如果经常开关机电脑,以上方法显得过于繁琐。于是从减少PCIe初始化时间的角度根治问题,经过多次实验发现PCIe读取型号为28f00ap30t-bpi-x16的FLASH存储器速率可修改,其可修改约束文件语句进行改变:
注意:这里只针对bpi的flash能使用此方法。spi的flash程序加载很快一般不会存在这种问题
set_property BITSTREAM.CONFIG.CONFIGRATE XX [current_design]
该芯片XX处支持3、6、9、12四个速率。若板未通过该语句设置速率,默认速率为3,而当将其修改为12,速率提高4倍后,PCIe上电初始化加快并能通过PC机识别到该设备。
对于spi与bpi的flash固化方法,在我上传的资源中有讲解,大家有兴趣可以去查看。
最后,觉得有用的博友点个赞吧!