ZYNQ SDK开发调试踩坑指南

3 篇文章 0 订阅

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

 作者 | 冰茶奥利奥

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

 

目录

坑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的硬件设计也印证了这一点。

/*
 * gic_init.c
 *
 *  Created on: 2022年3月29日
 *      Author: Lisboa
 */

#include "gic_init.h"

#define INTC_DEVICE_ID      XPAR_SCUGIC_SINGLE_DEVICE_ID

XScuGic GobalInterruptController;    /* Instance of the Interrupt Controller */
int gic_init()
{
    int Status;
    XScuGic_Config *IntcConfig; /* Config for interrupt controller */
    /* Initialize the interrupt controller driver */
    IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
    if (NULL == IntcConfig)
    {
        return XST_FAILURE;
    }
    Status = XScuGic_CfgInitialize(&GobalInterruptController, IntcConfig,
                                  IntcConfig->CpuBaseAddress);
    if (Status != XST_SUCCESS)
    {
        return XST_FAILURE;
    }
    return XST_SUCCESS;
}

坑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比较像了。

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

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

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值