面向嵌入式硬件与测试测量工程师。本文系统梳理两线 JTAG 的定义、原理、指令体系、TAP 状态机与收发切换机制,并澄清与 SBW、SWD 的边界。
文档性质:技术综述 + 协议机制讲解,非替代 IEEE 1149.7 标准原文。
1. 术语界定
工程语境里被称作"两线 JTAG"的通常有三者,协议层面差异很大,先给出判定表。
| 名称 | 标准 | 两线信号 | 协议归属 | 边界扫描(BSCAN) | 星型寻址 | 通用性 |
|---|---|---|---|---|---|---|
| cJTAG | IEEE 1149.7 | TCKC + TMSC | 正统 JTAG 家族 | ✅ 支持 | ✅ 支持(Star-2) | 通用,需 1149.7 仿真器 |
| SBW | TI 私有(Spy-Bi-Wire) | SBWTCK + SBWTDIO | 厂商私有,内部转 JTAG | 受限于内部实现 | ❌ | 仅 TI MSP430 |
| SWD | ARM CoreSight | SWCLK + SWDIO | 不是 JTAG | ❌ 无 BSCAN | --- | ARM 内核调试通用 |
关键结论:只有 cJTAG 是协议上"正统的两线 JTAG"。SWD 常被口语称作两线 JTAG,但它是独立调试协议、没有边界扫描能力。
2. 两线到底指哪两根线(以 cJTAG 为例)
| 信号 | 方向 | 作用 |
|---|---|---|
| TCKC | 输入(单向) | Test Clock,全局同步时钟,所有位采样与方向切换均对齐其边沿 |
| TMSC | 双向 | Test Serial Data,时分复用 TMS / TDI / TDO 三路角色 |
对应 TI SBW:SBWTCK(时钟) + SBWTDIO(双向数据,复用 RST);对应 ARM SWD:SWCLK + SWDIO。
3. 优缺点
3.1 cJTAG(IEEE 1149.7,对比 4 线 1149.1)
优点
- 引脚极少,只占 2 个 IO,适配 BGA/SiP/高密度封装,可只留测试点不留排针;
- 协议兼容 1149.1,保留完整边界扫描与 TAP 链功能,既能下载调试也能做板级互连测试(SWD 没有);
- 支持星型(Star)拓扑而非菊花链,单颗故障不拖垮整链,多 TAP/多 die 友好;
- 支持热插拔、独立电源域控制、后台仪器数据传输;高级模式吞吐可高于四线 JTAG。
缺点
- TMSC 双向复用,协议时序复杂,芯片内 TAP.7 硬核成本更高,非所有芯片支持;
- 普通廉价 JTAG 适配器大多不支持 cJTAG,需专用 1149.7 仿真器(如 XDS110);
- 双向信号对信号完整性敏感,方向切换、走线过长/电容偏大易采样错误,PCB 约束比四线严格;
- 含 escape 序列、包封装逻辑,软件驱动与测试工具门槛更高。
3.2 SBW 与 SWD(要点)
- SBW:仅 2 引脚、不额外占 GPIO,内部转标准 JTAG;但吞吐明显慢于四线,双向线时序严苛、复位引脚电容不能做大,且仅限 TI MSP430。
- SWD :两线、仿真器普及、性价比高、速度不错;但无边界扫描,仅 CoreSight 内核调试。
3.3 选型一句话
- 需要边界扫描 / 多芯片星型测试 / 高密度封装 → cJTAG;
- 只做 ARM 内核调试、不需要板级测试 → SWD;
- MSP430 小容量省引脚 → SBW。
4. 工作原理
核心一句话:
cJTAG = 1149.1 原生 TAP 状态机 + TAP.7 协议层 + 单根双向线(TMSC)时分复用 TMS/TDI/TDO + 星型寻址总线,用 ZBS 零扫描命令做模式切换与 TAP 选择。
4.1 信号分工
- TCKC:单向全局时钟;
- TMSC :双向开漏/带 KEEPER 保持逻辑,分时扮演 TMS(状态跳转)、TDI(移入)、TDO(移出);芯片内部必须有 KEEPER 保持逻辑,TCKC 上升沿时目标释放 TMSC,由保持单元锁存上周期电平防止浮空------这是 cJTAG 时序成立的关键。
4.2 核心机制:ZBS(Zero Bit Scan,零位扫描)
标准 1149.1 在 Shift-DR/Shift-IR 必须移位 N bit;ZBS 移位 0 bit,只利用 Shift-DR 状态下 TCK 脉冲个数来传递 1149.7 命令,用于进入两线模式、选择星型拓扑中的某颗 TAP、配置参数。
工作流:
- 上电默认可为传统四线模式;发 ZBS 命令切入 Star-2(两线)模式;
- 进入两线后,所有 TAP 动作打包成 cJTAG 包在 TMSC 上串行传输;
- 内部 TAP.7 硬核解包,还原成原生 1149.1 的 TMS/TDI 送给原有 TAP 控制器;TDO 再打包回 TMSC 送回仿真器。
4.3 拓扑:星型(Star),非菊花链
- 四线 1149.1:菊花链,一颗挂掉整条链卡死;
- cJTAG Star-2:所有 TAP.7 并联挂同一组 TCKC/TMSC 总线,每 TAP 有独立地址,通信前先寻址,未选中 TAP 保持静默,单颗失效不影响其他芯片,还支持独立电源域访问。
5. 指令体系与 TAP 状态机
5.1 两个层级
- 下层:1149.1 原生 TAP 状态机(16 态),由 TAP.7 从 TMSC 包中解析出的"虚拟 TMS"驱动,IR/DR 与标准 JTAG 完全一致;
- 上层 :1149.7 ZBS 控制指令(Star-2 独有,不进 IR/DR 移位,靠 TCKC 脉冲数编码)。
5.2 ZBS 基础指令集(Star-2 常用)
ZBS 命令在 TAP 处于 Shift-DR 状态下发送,TMSC 保持固定电平,只数 TCKC 脉冲:
| 脉冲数 | 命令 | 作用 |
|---|---|---|
| 1 | ZBS Idle | 空操作,保持当前选中状态 |
| 2 | Enter Star-2 Mode | 从四线兼容模式切入两线 Star-2 总线模式 |
| 3 | Exit Star Mode | 退出星型模式,切回普通 1149.1 四线行为 |
| 4 | Select TAP(短寻址) | 选择总线上指定地址的 TAP,其余静默 |
| 5 | Deselect TAP | 取消选中,所有 TAP 回到监听 |
| 6 | Broadcast | 广播命令,所有 TAP 同时接收 |
重点区分:ZBS 命令不是移入 IR 的指令 ,它是 TAP.7 子层命令,不走 IR 寄存器;而 SAMPLE/PRELOAD、EXTEST、BYPASS、IDCODE 仍是 1149.1 的 IR 指令,需正常 Shift-IR 移入。
5.3 1149.1 原生 IR 基础指令(cJTAG Star-2 下同样可用)
| IR 指令 | 功能 |
|---|---|
| BYPASS | 旁路寄存器,DR 为 1 bit,快速穿过 TAP 链 |
| IDCODE | 读出芯片 JTAG ID |
| SAMPLE/PRELOAD | 采样 IO 引脚、预加载边界寄存器 |
| EXTEST | 外部测试,驱动 IO、互连测试(边界扫描核心) |
| INTEST | 内部测试 |
5.4 状态机(两层)
层级 A:1149.1 标准 TAP 状态机(虚拟 TMS 驱动)
16 态跳转与四线 JTAG 完全一致,由虚拟 TMS bit 流驱动(详见 6 节图示)。
层级 B:TAP.7 总线模式状态机(叠加在 TAP 外)
1149.1 Compatible Mode(四线兼容)
│ ZBS 2 脉冲(Enter Star2)
▼
Star-2 Bus Mode(两线星型)
│ ZBS 3 脉冲(Exit Star)
▼
回到兼容模式
进入 Star-2 后还需维护寻址选中态:
Unselected(监听) ↔ Selected(可正常 TAP 操作)
仅被 Select 选中的 TAP 响应后续虚拟 TMS/TDI 并把 TDO 放回 TMSC;其他 TAP 保持 TMSC 高阻 + KEEPER,不驱动总线。
5.5 完整流程示例:四线 → 进入 Star-2 → 读 IDCODE
- 上电默认 1149.1 兼容模式,TAP 复位到 Run-Test/Idle;
- 发 TMS 序列推进到
Shift-DR; - 发 2 个 TCKC 脉冲(ZBS Enter Star2) → 进入两线;
- 发 ZBS Select TAP(4 脉冲)选中目标 TAP;
- 虚拟 TMS 驱动进入
Shift-IR,在 TMSC 分时移入IDCODE; - 虚拟 TMS 切到
Shift-DR,TMSC 分时:探针发 TDI,每 bit 后换向,芯片回 TDO(ID 码); - 读完发 ZBS Deselect(5 脉冲)释放 TAP,或 ZBS Exit Star 切回四线。
6. TMSC 收发切换机制(方向切换)
核心一句话:
以 TCKC 边沿做仲裁,每个扫描 bit 周期内分两个相位:前半周期探针(DTS)驱动,后半周期目标(TS)驱动;切换点绑定时钟沿,配合片上 KEEPER 防浮空与总线冲突。只有被 Select 选中的 TAP.7 才允许驱动 TMSC,其余保持三态 + KEEPER。
6.1 基础时序划分(Mscan,每 bit 换向)
单个移位 bit 占一个完整 TCKC 周期,拆两段:
- TCKC 高电平阶段(DTS 驱动期) :探针驱动 TMSC,输出虚拟 TMS 或 TDI;目标 TAP 在上升沿采样,上升沿同时目标释放 TMSC(三态);
- TCKC 低电平阶段(换向窗口 + TS 驱动期) :总线由探针交给目标;目标在下降沿 把当前 TDO 放到 TMSC,探针在低电平区间采样;片上 KEEPER 持续锁存最后电平防浮空。
关键规则:上升沿 = 目标停止驱动;下降沿 = 目标输出 TDO。方向切换不是额外方向 bit,而是协议时序预定义的时隙分工。
6.2 Mscan 与 Oscan 的换向差异
| 包格式 | 换向行为 | 适用 |
|---|---|---|
| Mscan | 每移入 1 bit TDI 就换向读出 1 bit TDO(每 bit turnaround) | 边界扫描,与 1149.1 一一对应 |
| Oscan | 连续发 TDI、批量发送后才一次换向回读 TDO | 下载提速,减少换向开销 |
6.3 如何避免总线冲突
- 选中机制:ZBS Select 先选唯一 TAP,未选中 TAP 的 TMSC 永久 Hi-Z + KEEPER;星型总线上永远最多一颗芯片有权驱动;
- 边沿驱动释放约定:目标 TAP 在 TCKC 上升沿无条件释放驱动,探针不在上升沿后维持强驱动,时序错开驱动窗口;
- KEEPER 非上拉/下拉:是保持锁存器,只维持电平不驱动,不与任何驱动方对抗。
6.4 ZBS 期间不换向
ZBS 在 Shift-DR 状态、不做 TDI/TDO 移位只数脉冲:TMSC 全程由 KEEPER 保持固定电平,不发生收发切换。
6.5 与 SWD 的 turnaround 区分
- SWD:包与包之间插入固定 1 bit turnaround 周期(独立换向时隙);
- cJTAG Mscan:每个 bit 周期内部自带换向相位(换向嵌入每个 TCK 周期)。
6.6 典型时序(Mscan 单 bit)
TCKC: ┌───────────┐ ┌───────────┐
│ │ │ │
──┘ └──────────┘ └──
TMSC: [DTS驱动: TDI/TMS] ↑(rise)→HiZ+Keeper ↓(fall)→ [TS驱动: TDO]
方向: 仿真器输出 换向窗口 芯片回送 TDO
- TCKC 高电平:DTS 输出 TMS/TDI,TS 上升沿采样;
- 上升沿:TS tri-off,交还总线;
- 低电平:TS 输出 TDO,DTS 采样;
- 下降沿:TS 把 TDO 放上 TMSC;下一上升沿再次交还总线。
6.7 易踩坑
- KEEPER 缺失或时序 bug → TMSC 浮空,随机误触发 escape/ZBS,表现为随机断链、ID 读错;
- 频率上限受换向窗口限制:高低电平都需满足建立/保持,turnaround 需留总线稳定时间,同工艺下 cJTAG 最高频率通常低于四线。
7. 技术要点清单(速查)
- cJTAG 是正统两线 JTAG(TCKC + TMSC),支持边界扫描与星型拓扑;
- 两线分时复用:TMS/TDI/TDO 塞进一根 TMSC,靠时序时隙 + escape 序列区分;
- ZBS = Shift-DR 状态下移位 0 bit、只数 TCKC 脉冲的 1149.7 控制命令(模式切换 + 寻址);
- 收发切换:上升沿目标停止驱动、下降沿目标输出 TDO,配合 KEEPER 防浮空;
- Mscan 每 bit 换向 / Oscan 包末一次换向;
- SWD 不是 JTAG,无边界扫描。