标签 调试 下的文章

记录一次非常神奇的调试经历

最近真的是有些忙,好就好及都没有更新了,可能也是因为最近调试都比较顺利,没有碰到什么特别值得记录的bug,哈哈。不过这次真的是有bug还有闲,所以就记录一下。问题描述首先我们还是按照惯例对问题进行一个简单的说明,这次问题出现在对一个CM0+的芯片调试上,程序采用gcc编译,调试是使用的Ozone,这个应该算是一个非常不典型的工具链了,但是我对这个还是比较偏爱的,因为这套工具链是全平台的,并且...

继续阅读 »

芯片调试端口不稳定情况调试

最近又回来一批新的芯片,作为测试攻城狮,又要忙活一阵子了,因为这是原来项目基础上出来的新版本的芯片,所以测试电路板还是可以继续用的。新芯片换上之后上电,下载调试一波走起。。。。哎,为啥找不到CORE呀,什么情况,芯片变砖了?不会吧,我还是很相信公司的研发水平的,但是,啥情况呀,测试电路板应该没啥问题呀,上一版芯片跑的欢快的很。艰难排查第一步没啥办法,好好找找原因吧,芯片找不到core,这个玩...

继续阅读 »

ARM SWD协议简介

SWD全称Serial Wire Debug,是ARM为嵌入式设备推出的一种简单的调试接口,这种接口通过一条双向数据线和一条时钟线实现对于ARM核心的调试。在SWD协议中,总线上主要有以下三个阶段:Packet Request,这个阶段表示外部调试器向Debug Port(DP)发送请求。Acknowledge Response,这个阶段是设备向调试器返回应答信号。Data Transfer...

继续阅读 »

通过DAP下载运行程序

前一篇文章我们介绍了DAP的基本原理,并介绍了通过DAP访问系统内存的方式,这篇文章着重介绍一下怎么通过DAP控制ARM CORE的运行状态,以及如何读取和更改CORE的通用寄存器。对于一般程序调试,获取通用寄存器的状态是比较重要的一种调试手段,读取这些通用寄存器的状态的前提是CORE必须处于HALT状态,否则这个寄存器的值是一直变化的,我们也就无法获取一个比较准确的值。另外对这些寄存器的值...

继续阅读 »

ARM调试端口简介

ARM的调试是基于DAP实现的,ARM的调试端口一般要实现以下一些功能:更改处理器的状态读取处理器状态设定调试事件,比如搞个断点什么的强制处理器进入或者离开Debug状态查看当前处理器是不是在Debug状态追踪程序执行状态DAP的基本结构一般DAP的结构如下图所示:Debug Port(DP)是直接和外部接口的,可以通过JTAG和SWD两种形式实现。Access Port(AP)是位于DP和...

继续阅读 »