[原创] 边界扫描(Boundary Scan) 初次研究

Boundary Scan 初次研究

1 本文用简单直白的方式介绍了边界扫描的原理,用途,实现方法。

2 使用STM32做了一个简单的JTAG时序模拟器。

3 能够测试BYPASS指令,读出ID,以及IO状态。

4 上位机目前空白,有时间在写吧,串口发送实在痛苦。

      想必玩过FPGA的都知道FPGA有一个调试的接口叫JTAG,玩过单片机的都知道有个东西叫JLINK,这两个又有啥关系呢   JLink 是个在线仿真器,平时用来烧个程序,在线调试个程序啥的,这其中用的接口协议叫JTAG,(STM有个专用接口叫SWD),现在觉得这个接口调试程序还挺方便的,不过最初设计这个接口的目的可不是这个,有点无心插柳柳成荫的感觉。早年随着大规模集成电路的出现,PCB板制造工艺向小,微方向发展,传统的ICT测试已经没有办法满足这类产品的测试要求。由于芯片的引脚多,元器件体积小,板的密度特别大,根本没有办法用探针进行测试。一种新的测试技术产生了,联合测试行为组织(Joint Test Action Group)简称JTAG, 定义这种新的测试方法即边界扫描测试。就是我们今天要讲的Boundary scan。

借用网上的图来说明

如上图,如果一个芯片的引脚很多,用的还是BGA封装,那么传统方法将无法扎针测量,于是测试人员就想起来了,在芯片内部设计一个移位电路,将所有引脚的状态通过移位方式读出来。那么这样就可以用很小的成本实现可测性。只需两个引脚TDI TDO.

由于移位电路的特性,即使多个芯片也只需将TDI和TDO串联在一起即可,多发几个时钟而已。

于是科研人员就专门制定了标准和接口,所有的IC都按照这个标准执行,接口叫JTAG。 IEEE1149.1标准就是由JTAG这个组织最初提出的,最终由IEEE批准并且标准化的。而实现Boundary Scan 是通过TJAG接口由IC内部的TAP 控制器来实现各种操作。

JTAG接口由四根线组成:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线,(还有可选引脚TRST——测试复位,输入引脚,低电平有效)

TAP Controller 是一个有限状态机,扫描测试的每个环节都由它来控制。TAP Controller 由TMS在时钟上升沿触发,主要有以下三方面的功能:

1 加载Instruction 指令

2 产生控制信号,移入和移出数据

3 执行测试操作,如捕获,转移,更新

BYPASS

IDCODE

EXTEST

SAMPLE/PRELOAD

首先介绍

BYPASS指令

   所有的芯片都必须支持这个指令,因为在测试系统中,通常会出现多个芯片,如果仅仅只是想与一个芯片通信,根据移位原理,需要移所有个脚数量的时钟,显然是比较浪费的,通过跳过不测试的芯片用于节省时钟,提高速度,这就是Bypass的功能,但是你会发现这个基于硬件的最小回路(短接)是由移位寄存器实现的,因此不同于直连,需要消耗一个时钟才能将数据移入或移出,这点在后续的数据处理中尤其重要。我也在此处花了很长时间才搞明白。这里留个问题,是否可以通过移入数据和移出数据对比来判断回路中连个多少个IC呢?

IDCODE 指令

    顾名思义,这个指令是用来获取被链接芯片的唯一序列号的。注意他是32位的,包含

内容包括IC的生产厂商,芯片类型,版本等,并且在执行这个指令时,并不会影响CPU的正常执行。这里也留一个问题,是否可以通过读出的这个唯一值来判断电路中接的IC是那个型号以及链路中的位置呢?

SAMPLE 指令

 这个就是Boundary scan关键的指令用来监控当前引脚的状态。注意执行他的时候并不会影响CPU的正常运行

EXTEST 指令c

这个也是Boundary scan关键的指令用来控制指定引脚的状态。注意执行它的时候会影响CPU的运行,也就是说CPU这时无法控制输出了,而是由发送的命令来控制,当然有点“危险”需要谨慎操作。如外部电路接到了地,本来是输入脚,误被命令配置成了输出拉高,将造成不可逆的损伤,当然这部分会有上位机软件严格来配置执行。

接下来将重点说说TAP ,先来展示一张经典的TAP状态图

先别看这么复杂,其实这里面的 0和1 指的是TMS引脚的状态,在每次TCLK的上升沿通过改变TMS的高低来切换不同状态。而DR指的是数据寄存器,IR指的是指令寄存器。

这里面有个重点就是数据的位宽并不是我们通常C里面的8位 16位这些,而是在BSDL文件中定义的。这个在后续写程序中也尤其重要。

那什么是BSDL文件呢,这个是每一个IC的身份文件,用来描述引脚的位置,数量,排列以及支持哪些命令等等信息,可以在官网免费下载的到。我们以STM32为例,可以在如下网址下载

Search - STMicroelectronics

打开后有没有点似曾相识,他其实就是一份VHDL写的硬件描述信息,最开始定义引脚信息,往后看到了

这个就是

这个就是它所支持的命令,看到了吧。位宽只有5位。用单片机发这玩意就是折腾。

本人熟悉单片机想着先用单片机试试写个简单的时序来玩玩。于是找来了两个STM32F103的核心板。简单的用杜邦线搭起来。写个时序。

顺便把逻辑分析仪也加上,初次验证似乎不太顺利。

发了命令怎么回的乱七八糟的,一堆0101的看不懂。仔细翻看协议,原来是要先发送LSB.

先试下读ID吧

完全没看懂,不过似乎读出的值没变,但解析出来的值,怎么看着都不对

根据手册中的值,应该是0x16410041呀。难道命令发错了。于是又试了下BYPASS指令

随便发了点数据,总算发现规律了原来,数据发生了移位。但为啥移了两位不是以为吗?

再仔细看手册,原来STM32内部可不是一个TAP控制器,还有个SWD的,要两个时钟才能移出原数据,这下对上了。

在回去看下读ID的命令,

将数据左移移位,然后在高低bit反转,果然解析出来的数据就是0x16410041。

命令找到了,数据位也对上了。接下来就是正常的发命令读写就是了。

不过这玩意最好还是搞个上位机,数据量太大了。

本文所用到的源工程, 源文件,参考PDF和BSDL文件,上传CSDN,供大家学习参考。共同交流。

下载网址  https://download.csdn.net/download/snail_dongbin/87695314

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值