ZYNQ Xilinx SDK经验分享一 启动篇

本文详细描述了作者在使用Xilinx SDK过程中遇到的问题,涉及程序固化后无法启动,经排查发现原因在于不能擦除DDR特定区域的数据,以及BSP设置限制。通过一步步排除和修改,揭示了核心问题并给出解决方案。
摘要由CSDN通过智能技术生成

一. 前言

        本文依据个人试验及工作经验总理而成,分享出来供大家参考,如有错误或更好的方法望与大家一起探讨。

二. 背景

        作者学习Xilinx SDK的时候,发现该平台使用起来遇到各种各样的问题和bug,网上解决方法都是零零散散的或者根本找不到,有时候遇到问题就要卡上几天甚至更久,特别浪费时间。

        所以在个人学习期间,就遇到的一些问题整理出来,不能说是很完整的教程,但是希望后来者少踩一些坑和少走一些弯路。

三. 主要内容

        Xilinx SDK软件固化后不能启动。

四. 现象

        将程序固化到板卡后断电重启板卡,程序不能启动。而在JTAG调试时程序能正常运行;

五. 问题起因

        Xilinx SDK提供了2个RS232串口,其中可用1个串口作为调试串口输出调试信息。因2个串口在项目中都需要用到,故调试信息输出时只好改为控制台(ps7_coresight_comp_0)的方式输出,便于查看调试信息定位问题。

六. 问题分析

        可能存在的问题如下:

  1. 程序固化失败,虽然固化软件提示成功,可能存在某些字节写入失败或文件被破坏;
  2. DDR没有正常工作;
  3. 启动模式错误,分别为SD卡启动、FLASH启动、JTAG三种模式;
  4. BSP配置错误;

 七. 排除步骤

  1. 先将程序固化到FLASH中,再在在JTAG调试模式下将FLASH文件读出来进行文件效验,即验证了FLASH正常工作,也验证了文件烧进FLASH后的正确性。确认FLASH读写无误且文件写入后正确。排除了FLASH问题和文件破坏的问题;
  2. 通过JTAG方式对DDR进行读写验证,分别按bit、字节、双字节和4字节对内存地址从0开始验证1M范围,读写均正常。排了DDR存在的问题;
  3. 硬件分析拨码开关连线正确性,并将拨码开关拨至FLASH启动经仔细检查确认无误,问题依旧出现不能启动。排除了因启动模式错误的问题。
  4. 使用Xilinx SDK自带的内存测试程序,不经任何更改固化到板卡,重启板卡后问题依旧出现;
  5. 将Xilinx SDK自带的内存测试程序,烧录到可正常启动的另一块板卡上,重启板卡后问题依旧出现;
  6. 修改Xilinx SDK自带的内存测试程序的内存测试起始地址,将测试起始地址改为内存最后1M空间,问题排除可正常启动;
  7. 修改BSP中stdin和stdout分别改为其中一个串口输出或改为none不输出,问题排除可正常启动;

 八. 故障产生原因

  1. Xilinx SDK程序固化到板卡后,不能擦除DDR中前一部份数据(lscript.ld中ps7_ddr_0基地址大小0x100000),否则程序加载后会将该内存中的数据擦除导致程序无法运行;
  2. BSP中stdin和stdout不能使用控制台(ps7_coresight_comp_0)输出,因为该方式只有在JTAG模式下才能用,而程序固化后因为没有连接JTAG输出地址为空设备导致程序启动时崩溃。

九.  结论

  1. 程序中不能对DDR地址0x0~0x100000(lscript.ld中ps7_ddr_0基地址大小0x100000)内存段进行读写,导致破坏程序地址;
  2. BSP中设置stdin和stdout不能设置为ps7_coresight_comp_0输出方式;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值