最近新做的MPSOC板子回來了,硬件測完上電一跑傻眼了,連最基本的fsbl跑起來都沒有任何打印,串口也量了硬件是通的。。。
好一通折騰發現可以在SDK下進行單步調試,但是到某個位置后就死循環了,而且默認是進入匯編的界面,更是看不懂了。Google+Xilinx官網搜索了半天后發現了不少有用的信息,參考如下鏈接,首先在SDK下設置好后可以進入C調試界面了,然后定位在了psu_ddr_phybringup_data這個函數中,之所以串口都沒有打印,是因為串口打印的初始化也在這個函數之后了。
最后發現還是在最容易出問題的DDR部分出問題了,MPSOC設計的是4片DDR4拼接成的64bit。於是降頻,降到DDR4最低的1600MHz,反復確認參數,終於可以初始化通過了,以為問題解決了,結果軟件拿到后在uboot階段莫名其妙的不固定位置的就打印異常了,還以為軟件那個地方沒搞好。后來還是懷疑DDR的穩定性,發現在SDK工具里有專門的Zynq MP DRAM tests工程,這個測試工程功能很強大,會比較全面的測試DDR訪問錯誤率。已測試發現確實是DDR不穩定。都已經降到最低頻率了不能再繼續降頻了。嘗試32bit模式,不進行硬件調整的情況下還是效果差不多。分析半天覺得拆掉兩片DDR4的顆粒會改善負載,拆掉后效果立竿見影,32位終於穩定了!!!
fsbl的調試方法詳見如下兩個鏈接吧。
測試工程中詳細打印了哪個lane出問題,lane0~lane7對應到具體byte,進一步對應到顆粒。
更新:
發現DDR4在設置界面里只能選擇1600T這些選項,但是實際上可以運行在低於1600M的速率,需要將始終頻率設置低后,根據頁面提示修改相應參數即可。
參考鏈接:
https://forums.xilinx.com/t5/%E5%B5%8C%E5%85%A5%E5%BC%8F-%E7%A1%AC%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/%E5%85%B3%E4%BA%8EMPSOC%E5%90%AF%E5%8A%A8%E6%97%B6%E5%8D%A1%E5%9C%A8fsbl%E7%9A%84%E9%97%AE%E9%A2%98/td-p/1144183
https://forums.xilinx.com/t5/%E5%B5%8C%E5%85%A5%E5%BC%8F-%E5%B7%A5%E5%85%B7-%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/MPSoC%E5%90%AF%E5%8A%A8%E5%8D%A1%E5%9C%A8psu-ddr-phybringup-data/td-p/1143754