当前位置:   article > 正文

ZYNQ SDK开发调试踩坑指南_error: [labtools 27-3165] end of startup status: l

error: [labtools 27-3165] end of startup status: low

关注+星标公众,及时获取更多技术分享~ 

 作者 | 冰茶奥利奥

微信公众号 | 嵌入式电子创客街

 

目录

坑1:裸机Ps串口收数问题

坑2:多个中断不能同时使用问题

坑3:block design中DDR3的选择

坑4:新板子能够检测到芯片,但是没法烧录。


坑1:裸机Ps串口收数问题

这个坑蹲了一整天,配置PS端的串口只能发数,不能收数,代码翻来覆去折腾一天,最后查到问题原来是bank1的电压选择的不对,我选择的是3.3V,其实硬件接的是1.8V。我也是无语了啊。。原来BANK电压选择这么重要。

坑2:多个中断不能同时使用问题

串口和定时器中断单独使用都能使用,但是只能响应后配置的中断。分析是有什么应该全局配置的寄存器被重配置了。原来是GIC中断寄存器“只能被初始化一次,一旦初始化后映射地址不可更改,否则会出现不可预料的结果”(库函数的注释里说的)。然后把gic初始化拎出来作为全局的传递给各个初始化配置函数用就可以了。其实从xparameter.h提供的INT_ID就能看出来,所有的例程中的外设中断ID都是0,这也就意味着全局可能只有一个GIC中断源,查看ZYNQ的硬件设计也印证了这一点。

  1. /*
  2. * gic_init.c
  3. *
  4. * Created on: 2022年3月29日
  5. * Author: Lisboa
  6. */
  7. #include "gic_init.h"
  8. #define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID
  9. XScuGic GobalInterruptController; /* Instance of the Interrupt Controller */
  10. int gic_init()
  11. {
  12. int Status;
  13. XScuGic_Config *IntcConfig; /* Config for interrupt controller */
  14. /* Initialize the interrupt controller driver */
  15. IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
  16. if (NULL == IntcConfig)
  17. {
  18. return XST_FAILURE;
  19. }
  20. Status = XScuGic_CfgInitialize(&GobalInterruptController, IntcConfig,
  21. IntcConfig->CpuBaseAddress);
  22. if (Status != XST_SUCCESS)
  23. {
  24. return XST_FAILURE;
  25. }
  26. return XST_SUCCESS;
  27. }

坑3:block design中DDR3的选择

新画的板子PL能单独跑起来,但是PS根本跑不起来,进不了主程序,我猜测是DDR3的问题。

板子上买的是MT41K256的DDR3,K和之前的J系列的区别其实就是K是低压版本,1.35V,但是在电路和试用上是兼容1.5V的老版本的。所以我设计电路时候都是按照MT41J设计的,软件BlockDesign里面选择的也是DDR3,MT41J。

后来把BlockDesign中配置zynq这部分的DDR3选成了DDR3 Low Voltage,这样就能正常工作了。

我找遍了中外网站,翻了好几个Xilinx的官方文档,都没有找到关于这部分的说明,所以也不知道硬件上到底有啥区别让他不能兼容低压版的。

坑4:新板子能够检测到芯片,但是没法烧录

新板子做回来,SDK里面没法烧程序,vivado里面也没法烧程序。SDK里面报错的界面我忘记截图,但是vivado里面报错:

ERROR: [Labtools 27-3165] End of startup status: LOW。

有人说是芯片虚焊或者有短路怎么样,我就拆了Zynq重新焊接,不行。又把芯片换了一个,也不行。

后来对照原理图看发现有个电阻焊的不对。这是我的原理图。

这个SPI_D0是拉高了。这个引脚同时是MIO2,MIO2的功能如下:

 这个cascaded JTAG就是JTAG的级联模式,因为我们JTAG是连接到了Ps端,所以必须选择级联模式,而不是独立模式。

坑5:添加了math.h头文件,一些数学函数却不能使用

比如我这次使用了log( )函数,也添加了头文件,查看该函数引用也能转到math.h头文件里面,但是编译会报错。这种情况下,需要在编译选型里添加编译指令,如图所示,在项目的设置选项里添加-lm,这种方式就和linux比较像了。

如果您觉得这篇文章帮到了你,请点赞或者留下您的评论,您的鼓励是我前进的动力~

关注博主公众号 “嵌入式电子创客街” 获取更多及时技术分享~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/470683
推荐阅读
相关标签
  

闽ICP备14008679号