ZYNQ SDK开发调试踩坑指南

article/2025/9/24 18:42:25

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

 作者 | 冰茶奥利奥

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

 

目录

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

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

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


http://chatgpt.dhexx.cn/article/sECbN03w.shtml

相关文章

万变不离其宗之ZYNQ启动介绍

1、概述 ZYNQ 的详细介绍参考 XILINX 官方文档 UG585,在了解了 ZYNQ 的基本架构组成和丰富的资源后,下一步便是分析他的启动流程,以便更好的认识 ZYNQ 并开始开发工作; 关于 ZYNQ 启动方面的描述,这里我觉得涉及到几个…

ZYNQ入门

目录 一、ZYNQ简介 二、vivado工程 ①创建工程 ②添加设计文件 ③生产顶层HDL模块 ④生成 Bitstream 文件并导 三、vitis工程 ①启动vitis ②创建工程 ③编译与下载 一、ZYNQ简介 ZYNQ 是赛灵思公司(Xilinx)推出的新一代全可编程片上系统&#x…

ZYNQ架构

ZYNQ 首先,我们来了解传统的SOC架构,一般使用 ARM 作为主控,通过 ARM 的外设并行 RAM 类总线外挂 FPGA ,使用 FPGA 来做高速的数据采集或者运算,因为FPGA 有灵活性好,资源丰富,可反复编程&#…

zynqmp soc 移植vxWorks 7

1.使用worksbench4创建vsb工程; 2.使用worksbench4创建vip工程; 3.修改设备树文件,根据硬件电路选择对应的UART; 4.tftp引导启动;

ZYNQ开发系列——ZYNQ系统的搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——ZYNQ系统的搭建 DDR设置FLASH设置UART设置网口设置当我们有一个要用ZYNQ做的项目时,首先当然是把其最小系统搭建起来。这个最小系统可以交付给开发PS的同事开发裸机程序/RTOS实时操作系统/…

ZYNQ之高速AD/DA验证实验

文章目录 前言一、ADDA模块介绍二、添加ROM IP核三、添加ILA IP核四、编写测试程序五、管脚分配六、连接开发板测试总结 前言 本实验是高速AD/DA验证实验,将使用高速DA芯片实现数模转换,产生正弦波模拟电压信号,并通过高速AD芯片将模拟信号转…

ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析

FSBL启动准备工作 在静态情况下,Boot.BIN启动文件存放在SD卡或QSPI等存储介质中,然后Boot.BIN文件中已经包含了FSBL代码,也就是说FSBL代码已经集成在了Boot.BIN文件中,所以FSBL代码也是存放在Boot .BIN文件中。 如果要启动FSBL代…

初识ZYNQ结构

本文介绍了zynq的结构,简述了PS中的APU。 处理器系统 所有的 Zynq 芯片都有相同的基本架构。作为处理器系统的基础,所有的芯片都包含了一颗双核 ARM Cortex-A9 处理器。这是一颗 “ 硬 ” 处理器 —— 它是芯片上专用而且优化过的硅片元件。 作为比较…

zynq中断

在zynq中选择中断信号后: 只能看到一个[0:0]的向量,完全无法对应中断号: 且属性栏目没有配置选项,一般可以看到有些连接图如下: 如果看成最低位的话就是61,那么其它中断号怎么使用呢:查到的资料如下&#x…

ZYNQ基础知识

1.ZYNQ介绍 全称为Zynq-7000 All Programmable Soc 1.Zynq是赛灵思(Xilinx)推出的新一代全可编程片上系统,将处理器的软件可编程性和FPGA的硬件可编程性完美结合。具有较强的系统性能、灵活性与可扩展性。 2.旨在为视频监控、汽车驾驶员辅助…

一、ZYNQ简介

1 ZYNQ简介 (1)ZYNQ简介 ​ ZYNQ全称Zynq-7000 All Programmable SoC,是赛灵思公司(Xilinx)推出的新一代全可编程片上系统((APSoC)(全可编程指的是硬件和软件都可以编程…

ZYNQ简介

目录 1.ZYNQ简介 2.片上系统,板上系统,可编程片上系统,全可编程上系统 (1)板上系统 (2)片上系统(SOC) (3)可编程片上系统(SOPC&a…

【ZYNQ】从入门到秃头01 初识ZYNQ(PS和PL之间连接)

文章目录 从嵌入式Linux到ZYNQZYNQ简介PL简介常用的可编程逻辑器件:PL结构 PS简介AXIAXI4 StreamAXI4 ZYNQ芯片开发流程的简介学习ZYNQ要具备哪些技能 从嵌入式Linux到ZYNQ 之前的学习领域一直是ARM,从STM32到NXP iMX6, 从裸机开发到Linux操…

css-输入框和文本域样式调整

输入框去掉选中后的边框变化效果 选中后边框变化: 去掉变化效果方法:添加css属性- - - outline: none; 文本域去掉右下角拖拽图样 默认文本域右下角有个拖拽的图样,将鼠标移动到右下角可以进行拖拽实现放大缩小: 代码示例&#x…

HTML5-列表框、文本域和文件域

<!--下拉框&#xff0c;列表框selected 默认选择--><p>国家&#xff1a;<select name"列表名称" ><option value"china">中国</option><option value"us">美国</option><option value"eth&qu…

【多行文本输入框--文本域】(html,css)

<style>textarea{width: 300px;height: 300px;resize: none;/* resize:重新设置大小&#xff0c;vertical,horizontal,both,none */} </style> <body><div>多行文本输入框--文本域</div><div><!-- placeholder--提示文字 --><!--…

JTextArea:文本域组件

文本域与文本框的最大区别就是文本域允许用户输入多行文本信息。在 Swing 中使用 JTextArea 类实现一个文本域&#xff0c;其常用构造方法如下。 JTextArea()&#xff1a;创建一个默认的文本域。JTextArea(int rows,int columns)&#xff1a;创建一个具有指定行数和列数的文本…

html文本域

<!DOCTYPE <!DOCTYPE html><html><head><meta charset"utf-8"/><title>文本域</title></head><body>用户留言:<br/><form action"mailto:minriqq.com" name"invest" method"p…

文本域textarea

文本域 CreateTime--2017年5月23日15:12:08Author:Marydon 二、文本域 &#xff08;一&#xff09;语法 <textarea></textarea> &#xff08;二&#xff09;用法介绍 2.2.1 页面展示 内容一定要写在标签体内&#xff0c;即&#xff1a; <textarea>页面要展示…

textarea文本域,多行文本输入

当用户需要在表单中输入大段文字时&#xff0c;需要用到文本输入域。 语法&#xff1a; <textarea rows"行数" cols"列数">默认出现文本</textarea> 注意&#xff1a; rows,cols这两个属性可用css样式的width和height来代替&#xff1a;co…