ARM调试器只能偶尔连接成功问题
这里分析一个ARM板子JTAG调试器经常连接失败,只能偶尔连上目标板问题。
背景
这是原先另一个部门的板子,在部门合并之后,最近要对这个板子的代码体系进行转移,在过问开发进度时,工程师反映这个板子调试很难连接,所以错误不好定位。这个问题前段时间反映过,但是当时比较忙,没有过问。现在看起来这个问题影响问题定位了,所以看起来这个问题需要彻底看一下了。听原先负责这个板子的工程师,这些年也都是这样,这个芯片很难连接,以前如果不行就换板子。这个芯片是LPC2136,我们部门原先并不使用,但是LPC2132和LPC2134则是使用过的,并不存在问题。简单测试了一下这个板子,确实是连接非常困难。
接线查看
首先找了对比板子LPC2132,连接非常顺利。对比两个板子的图,分析JTAG接口连接,从原理图上看,JTAG接口连接并没有什么不妥,和对比板子一致,量硬件连接,也没有问题。连接总是提示“Failed to connect”。看来只能对JTAG进行分析了。
JTAG信号分析
把所有的JTAG信号线飞出来,接上逻辑分析仪,采集JTAG信号。首先采集正常的板卡的信号,如下:

从上到下,顺序为TRST,TDI,TMS,TCK,RTCK,TDO,从图中看,有来有回,一切正常。只是中间有一个异常,我最初设定为用TRST下降沿触发,却没有抓到,从波形看,TRST确实一直为高,这个当时也没有在意,不影响抓信号。
再抓一个不正常板卡的信号,如下:

从信号看,没有RTCK,也没有TDO输出。测量RTCK信号,并没有和地短路等异常发生。
这时想起来了最初看到的异常板卡的复位电路,是一个简单的RC复位。当时一打眼的时候,觉得这个电路取值有点问题,其中R=10k,C=100nF,稍有RC复位电路设计经验的,都可以看出这个取值不太合理,但是这个板子上电工作一直是正常的,也就没在意。对比对照板卡,其RC取值为100k,1uF。使用镊子强制复位异常板卡,果然可以JTAG连接成功。更换RC取值,板卡JTAG连接正常。
分析
这个板子原因是很清楚的了,复位电路复位时间过短,造成芯片没有很好复位。但是还有一个奇怪的问题,这个板子上电运行从来没有出过问题。猜测是CPU内核在复位链里面复位比较早,而JTAG口复位比较晚?还有一个问题,这个芯片手册有写明这个芯片有内部POR,为什么没有起作用?
ARM调试器只能偶尔连接成功问题的更多相关文章
- 安装ARM调试器
一.概述 1.调试ARM应用程序的软硬件组成 硬件JTAG/SWD仿真器 Eclipse调试插件 GDB调试客户端 GDB服务器端 JTAG/SWD需要的硬件驱动 2.GNU ARM Eclipse推 ...
- 《python灰帽子》学习笔记:写一个windos 调试器(一)
一.开发内容介绍 为了对一个进程进行调试,你首先必须用一些方法把调试器和进程连接起来.所以, 我们的调试器要不然就是装载一个可执行程序然后运行它, 要不然就是动态的附加到一个运行的进程.Windows ...
- Flash Builder 调试器无法连接到正在运行的应用程序(57%)
Flash Builder 调试器无法连接到正在运行的应用程序(57%),可能原因: 1,flashplayer不是debug版. 2,调试器(用debug版flashplayer随便 ...
- 【转】WinDbg调试器:启动程序时自动连接调试器方法
当我们调试服务进程或子进程时,无法直接用调试加载进程的方式启动,此时需要在启动程序时自动连接调试器方法: 第一步:注册表展开到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft ...
- zend stuido 12.5的插件安装和xdebug调试器的配置和和配置注意
参考: zend stuido 12.5的插件安装 zend 12.5 安装插件是按类别进行分类了的, 而且是在欢迎 界面就可以直接安装, 安装后,要重启zend才能生效 版式设计的一个基本点就是: ...
- 32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用
32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用 一丶32位(x86也称为80386)与8086(16位)汇编的区别 1.寄存器的改变 AX 变为 EAX 可以这样想,16位通 ...
- 通过printf从目标板到调试器的输出
最近在SEGGER的博客上看到Johannes Lask写的一篇关于在调试时使用printf函数从目标MCU输出信息到调试器的文章,自我感觉很有启发,特此翻译此文并推荐给各位同仁.当然限于个人水平,有 ...
- ABP框架 - 介绍 VS2017调试器无法附加到IIS进程(w3wp.exe) c# 动态实例化一个泛型类
ABP框架 - 介绍 在14,15年间带领几个不同的团队,交付了几个项目,在这个过程中,虽然几个项目的业务不一样,但是很多应用程序架构基础性的功能却是大同小异,例如认证.授权.请求验证.异常处理. ...
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(2.1)- 玩转板载OpenSDA,Freelink调试器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列EVK上板载调试器的用法. 本文是i.MXRT硬件那些事系列第二篇,第一篇痞子衡给大家整体介绍了i.M ...
随机推荐
- 全面解读PHP-数据库缓存
一.什么是数据库缓存? 1.定义 mysql等一些常见的关系型数据库的数据都存储在磁盘当中,在高并发场景下,业务应用对mysql产生的增删改查的操作会造成巨大的IO开销和查询压力,这无疑对数据库和服务 ...
- ListView 如何提高其效率?
① 复用 ConvertView② 自定义静态类 ViewHolder③ 使用分页加载 ④ 使用 WeakRefrence 引用 ImageView 对象 ViewHolder 为什么要声明为静态类? ...
- java下载文件时文件名出现乱码的解决办法
转: java下载文件时文件名出现乱码的解决办法 2018年01月12日 15:43:32 橙子橙 阅读数:6249 java下载文件时文件名出现乱码的解决办法: String userAgent ...
- OpenStack 虚拟机的磁盘文件类型与存储方式
目录 文章目录 目录 虚拟机的磁盘文件类型 虚拟机磁盘文件的存放方式 QCOW2 镜像格式与 qemu-img 指令 参考文章 虚拟机的磁盘文件类型 Nova 虚拟机的虚拟磁盘主要包含有 Root D ...
- 四十八:数据库之alembic常用命令和经典错误的解决办法
常用命令:1.init:创建一个alembic仓库2.reversion:创建一个新的版本3.--autogenerate:自动将当前模型的修改,生成迁移脚本4.-m:message,可以记录本次迁移 ...
- mingw32环境上静态编译 dav1d 0.4.0
2019-08-05 发布 dav1d 0.4.0 dav1d 'Cheetah', the fast and small AV1 decoder This is the fourth major r ...
- Oracle自动性能统计
Oracle自动性能统计 高效诊断性能问题,需要提供完整可用的统计信息,好比医生给病人看病的望闻问切,才能够正确的确诊,然后再开出相应的药方.Oracle数据库为系统.会话以及单独的sql语句生成 ...
- 学习Go语言(一)环境安装及HelloWorld
自己开发的时候,一般用Java和C#居多,偶尔也用Python做点东东. 想体验一下比较“现代”语言,思来想去就来体验一下Go语言. 闲话少叙,言归正传,首先就是环境安装,这个轻车熟路: (1)到官网 ...
- python 迭代器(第二次总结)
迭代器 1.先明白迭代器是什么意思 迭代:不断的取值的(器)工具 迭代器:就是一个重复的过程,每一次重复都是基于上一次的结果而来的. (单纯的重复不是迭代) 2.为什么要有迭代器 不依赖索引取值的方法 ...
- python 并发编程 协程 协程介绍
协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的 需要强调的是: 1. python的线程属于内 ...