当前位置: 首页 > news >正文

JTAG-SVF文件完整教程

SVF文件完整教程:从入门到精通

术语表

在开始学习之前,先了解这些重要术语的含义:

基础术语

  • SVF - Serial Vector Format,串行向量格式,用于描述JTAG操作的标准文件格式
  • JTAG - Joint Test Action Group,联合测试行动组,一种标准的测试和调试接口
  • TAP - Test Access Port,测试访问端口,JTAG设备的标准接口

信号线术语

  • TCK - Test Clock,测试时钟信号
  • TMS - Test Mode Select,测试模式选择信号
  • TDI - Test Data In,测试数据输入信号
  • TDO - Test Data Out,测试数据输出信号
  • TRST - Test Reset,测试复位信号(可选)

寄存器术语

  • IR - Instruction Register,指令寄存器,用于接收和存储指令码
  • DR - Data Register,数据寄存器,用于数据传输和操作
  • HIR - Header Instruction Register,指令寄存器头部数据
  • HDR - Header Data Register,数据寄存器头部数据
  • TIR - Trailer Instruction Register,指令寄存器尾部数据
  • TDR - Trailer Data Register,数据寄存器尾部数据

操作术语

  • SIR - Shift Instruction Register,移位指令寄存器操作
  • SDR - Shift Data Register,移位数据寄存器操作
  • IDCODE - 设备识别码,用于识别JTAG设备的唯一标识
  • BYPASS - 旁路模式,让数据直接通过设备而不进行处理

设备相关术语

  • FPGA - Field Programmable Gate Array,现场可编程门阵列
  • CPLD - Complex Programmable Logic Device,复杂可编程逻辑器件
  • Flash - 闪存,用于存储配置数据的非易失性存储器
  • ISC - In-System Configuration,在系统配置模式

状态和模式术语

  • IDLE - 空闲状态,TAP状态机的基本等待状态
  • RESET - 复位状态,TAP状态机的初始状态
  • DRPAUSE - 数据寄存器暂停状态
  • IRPAUSE - 指令寄存器暂停状态
  • RUNTEST - 运行测试状态,执行时钟周期

文件格式术语

  • TDI() - 指定输入到设备的数据
  • TDO() - 指定期望从设备输出的数据
  • MASK() - 指定比较掩码,确定哪些位需要验证
  • TCK - 时钟周期数
  • SEC - 秒,时间单位
  • HZ - 赫兹,频率单位

目录

  1. 什么是SVF文件
  2. JTAG基础知识
  3. SVF文件结构
  4. SVF命令详解
  5. 多设备JTAG链
  6. 实际应用示例
  7. 常见问题与解决方案
  8. 附录

什么是SVF文件

基本概念

SVF(Serial Vector Format)是一种标准化的文件格式,用于描述JTAG(Joint Test Action Group)测试和编程操作。它是IEEE 1149.1标准的一部分,主要用于:

  • 设备编程:将固件烧录到FPGA、CPLD、Flash等设备
  • 边界扫描测试:检测电路板连接和器件功能
  • 调试和验证:在线调试和系统验证

为什么需要SVF

在没有SVF之前,不同的编程器和测试设备使用各自的格式,导致:

  • 兼容性问题
  • 移植困难
  • 维护成本高

SVF提供了统一的标准,使得同一个文件可以在不同的JTAG设备上使用。

JTAG基础知识

JTAG信号线

JTAG接口包含以下基本信号:

TCK  (Test Clock)     - 测试时钟,同步所有JTAG操作
TMS  (Test Mode Select) - 模式选择,控制TAP状态机
TDI  (Test Data In)   - 测试数据输入
TDO  (Test Data Out)  - 测试数据输出
TRST (Test Reset)     - 测试复位(可选)

TAP状态机

JTAG使用TAP(Test Access Port)状态机控制操作流程:

Test-Logic-Reset → Run-Test/Idle → Select-DR-Scan → Capture-DR → Shift-DR → Exit1-DR → Update-DR→ Select-IR-Scan → Capture-IR → Shift-IR → Exit1-IR → Update-IR

JTAG链连接

多个JTAG设备可以串联形成链:

JTAG控制器 → 设备1 → 设备2 → 设备3 → 返回控制器TDI→TDO  TDI→TDO  TDI→TDO

SVF文件结构

文件头部

SVF文件通常以注释开始,描述文件信息:

! Lattice Semiconductor Corp.
! Serial Vector Format (.SVF) File.
! User information:
! Source file: melbourne_swb.svf
! CREATED BY: Diamond Deployment Tool 3.14
! CREATION DATE: Mon Jul 14 19:05:55 2025

链描述

描述JTAG链中的设备:

! Chain description.
!	1	LCMXO3LF-6900C	FLASH Erase,Program,Verify
!	2	LCMXO3LF-6900C	FLASH Erase,Program,Verify
! End chain description

初始化部分

设置JTAG链的基本参数:

! Initialize
HDR 1 TDI(0);        ! Header Data Register长度和默认值
HIR 8 TDI(FF);       ! Header Instruction Register长度和默认值
TDR 0;               ! Trailer Data Register长度
TIR 0;               ! Trailer Instruction Register长度
ENDDR DRPAUSE;       ! DR操作结束后的状态
ENDIR IRPAUSE;       ! IR操作结束后的状态
STATE IDLE;          ! 初始状态

SVF命令详解

基本命令类型

1. SIR (Shift Instruction Register)

向指令寄存器移入数据:

SIR 8 TDI(E0);       ! 移入8位指令0xE0
2. SDR (Shift Data Register)

向数据寄存器移入/移出数据:

SDR 32 TDI(00000000)  ! 移入32位数据TDO(612BD043)  ! 期望输出数据MASK(FFFFFFFF); ! 比较掩码
3. RUNTEST

控制时钟运行:

RUNTEST IDLE 2 TCK 1.00E-003 SEC;  ! 在IDLE状态运行2个时钟周期,最少1ms
4. STATE

设置TAP状态:

STATE IDLE;          ! 设置为IDLE状态

高级命令

FREQUENCY

设置时钟频率:

FREQUENCY 1.00e+006 HZ;  ! 设置为1MHz
HDR/HIR/TDR/TIR

设置头部和尾部数据:

HDR 1 TDI(0);        ! 数据寄存器头部:1位,值为0
HIR 8 TDI(FF);       ! 指令寄存器头部:8位,值为0xFF

多设备JTAG链

链配置原理

当多个设备串联时,数据需要通过整个链传输:

设备1(8位IR) → 设备2(8位IR) → 设备3(8位IR)
总IR长度 = 8 + 8 + 8 = 24位

设备选择

要操作特定设备,需要:

  1. 计算目标设备在链中的位置
  2. 设置正确的HDR/HIR/TDR/TIR值
  3. 发送适当长度的数据

示例:操作链中第2个设备

! 设置链参数(假设3个8位IR设备)
HIR 8 TDI(FF);       ! 设备3的IR(旁路)
HDR 0;               ! 设备3的DR
TIR 8 TDI(FF);       ! 设备1的IR(旁路)
TDR 0;               ! 设备1的DR! 操作设备2
SIR 8 TDI(3C);       ! 向设备2发送指令0x3C
SDR 32 TDI(00000000) TDO(12345678) MASK(FFFFFFFF);

🤔 常见疑问解答

疑问1:HIR、HDR、TIR、TDR这些指令是什么意思?

这些是JTAG链配置指令,用于设置头部和尾部数据:

位置关系

TIR → [目标设备] → HIR
TDR → [目标设备] → HDR

指令含义

  • HIR = Header Instruction Register(头部指令寄存器)
  • HDR = Header Data Register(头部数据寄存器)
  • TIR = Trailer Instruction Register(尾部指令寄存器)
  • TDR = Trailer Data Register(尾部数据寄存器)

实际作用
当执行 SIR 8 TDI(3C) 时,实际发送的数据流是:

[FF] → [3C] → [FF]↓      ↓      ↓
设备3   设备2   设备1
(HIR)  (目标)  (TIR)

可以把这些指令想象成**“包装纸”**:

原始数据:     [3C]
加上包装:  [FF][3C][FF]↑   ↑   ↑HIR 目标 TIR
疑问2:JTAG链中如何指定操作哪个设备?

关键理解:JTAG链中无法直接指定某个设备,而是通过数据位置来控制!

数据传输原理

控制器 → 设备1 → 设备2 → 设备3 → 控制器TDI    TDI→TDO  TDI→TDO  TDI→TDO    TDO

数据是串行传输的,每个设备按顺序接收对应位置的数据:

发送的数据:[设备3数据][设备2数据][设备1数据]↓
设备1接收:[设备1数据] ← 最后8位
设备2接收:[设备2数据] ← 中间8位
设备3接收:[设备3数据] ← 最前8位

设备选择策略

  1. 旁路非目标设备:给不需要操作的设备发送0xFF(BYPASS指令)
  2. 激活目标设备:给需要操作的设备发送实际指令
  3. 数据路由:后续的数据操作只会与激活的设备交互

实际示例

! 要操作设备2,实际发送24位数据(3个设备×8位IR)
HIR 8 TDI(FF);       ! 这8位发给设备3(旁路指令)
TIR 8 TDI(FF);       ! 这8位发给设备1(旁路指令)
SIR 8 TDI(3C);       ! 这8位发给设备2(实际操作指令)! 等效于:
SIR 24 TDI(FF3CFF);  ! FF给设备3,3C给设备2,FF给设备1
疑问3:IR(指令寄存器)是什么?

IR的基本概念
IR是Instruction Register(指令寄存器),是JTAG设备内部的特殊寄存器。

IR的作用

  1. 接收指令 - 告诉设备要执行什么操作
  2. 控制设备模式 - 决定设备进入哪种工作状态
  3. 选择数据路径 - 确定后续的数据操作针对哪个内部寄存器

工作原理

JTAG控制器 → [指令码] → 设备的IR → 设备执行相应操作

常见指令示例

  • 发送0xE0到IR → 设备进入"读取ID"模式
  • 发送0x3C到IR → 设备进入"读取状态"模式
  • 发送0x70到IR → 设备进入"编程"模式
  • 发送0xFF到IR → 设备进入"旁路"模式

IR长度的含义

  • 8位IR = 指令寄存器宽度为8位
  • 可支持 2^8 = 256 种不同指令
  • 每次发送指令需要8位数据

在JTAG链中的影响

设备1(8位IR) → 设备2(8位IR) → 设备3(8位IR)
总IR长度 = 8 + 8 + 8 = 24位

要向设备2发送指令0x3C,需要发送24位数据:

[设备3的指令8位] + [设备2的指令8位] + [设备1的指令8位]
= [0xFF] + [0x3C] + [0xFF] = 0xFF3CFF

实际应用示例

1. 设备ID检查

验证设备是否正确连接:

! 读取设备ID
SIR 8 TDI(E0);       ! IDCODE指令
SDR 32 TDI(00000000)TDO(612BD043)  ! 期望的设备IDMASK(FFFFFFFF);

2. Flash擦除

擦除设备内部Flash:

! 使能Flash操作
SIR 8 TDI(C6);       ! ISC_ENABLE指令
SDR 8 TDI(00);
RUNTEST IDLE 2 TCK 1.00E-003 SEC;! 擦除Flash
SIR 8 TDI(0E);       ! ISC_ERASE指令
SDR 8 TDI(0E);       ! 擦除命令
RUNTEST IDLE 2 TCK 30.0 SEC;  ! 等待擦除完成

💡 实际案例:多设备Flash操作

以melbourne_swb.svf文件为例,该文件包含2个LCMXO3LF-6900C设备的Flash编程。

操作第1个设备
! 配置JTAG链 - 操作设备1
HDR 1 TDI(0);        ! 头部DR:1位,值为0
HIR 8 TDI(FF);       ! 头部IR:8位,值为FF(设备2进入旁路)
TDR 0;               ! 尾部DR:0位
TIR 0;               ! 尾部IR:0位(设备1后面没有设备)! 检查设备1的ID
SIR 8 TDI(E0);       ! IDCODE指令
SDR 32 TDI(00000000) TDO(612BD043) MASK(FFFFFFFF);! 使能设备1的Flash操作
SIR 8 TDI(C6);       ! ISC_ENABLE指令
SDR 8 TDI(00);
RUNTEST IDLE 2 TCK 1.00E-003 SEC;! 擦除设备1的Flash
SIR 8 TDI(0E);       ! ISC_ERASE指令
SDR 8 TDI(01);
RUNTEST IDLE 2 TCK 1.00E+000 SEC;! 编程设备1...
切换到第2个设备
! 重新配置JTAG链 - 操作设备2
HDR 0;               ! 头部DR:0位
HIR 0;               ! 头部IR:0位(设备2后面没有设备)
TDR 1 TDI(0);        ! 尾部DR:1位,值为0
TIR 8 TDI(FF);       ! 尾部IR:8位,值为FF(设备1进入旁路)! 检查设备2的ID
SIR 8 TDI(E0);       ! IDCODE指令
SDR 32 TDI(00000000) TDO(612BD043) MASK(FFFFFFFF);! 使能设备2的Flash操作
SIR 8 TDI(C6);       ! ISC_ENABLE指令
SDR 8 TDI(00);
RUNTEST IDLE 2 TCK 1.00E-003 SEC;! 擦除设备2的Flash
SIR 8 TDI(0E);       ! ISC_ERASE指令
SDR 8 TDI(01);
RUNTEST IDLE 2 TCK 1.00E+000 SEC;! 编程设备2...
关键理解
  1. 设备切换:通过重新配置HDR/HIR/TDR/TIR参数来切换目标设备
  2. 旁路机制:非目标设备接收0xFF指令进入旁路模式
  3. 相同操作:对每个设备执行相同的Flash操作序列
  4. 独立编程:每个设备有独立的配置数据和验证过程

这就是为什么多设备SVF文件通常很长 - 它包含了每个设备的完整编程序列!

3. 数据编程

向设备写入数据:

! 设置地址
SIR 8 TDI(46);       ! LSC_INIT_ADDRESS指令
SDR 8 TDI(04);       ! 起始地址
RUNTEST IDLE 2 TCK 1.00E-003 SEC;! 编程数据
SIR 8 TDI(70);       ! LSC_PROG_INCR_NV指令
SDR 128 TDI(036000000040000000DCFFFFCDBDFFFF);  ! 128位数据
RUNTEST IDLE 2 TCK 1.00E-002 SEC;

4. 状态检查

检查操作是否成功:

! 读取状态寄存器
SIR 8 TDI(3C);       ! LSC_READ_STATUS指令
RUNTEST IDLE 2 TCK 1.00E-003 SEC;
SDR 32 TDI(00000000)TDO(00000000)  ! 期望状态(无错误)MASK(00003000); ! 只检查错误位

常见问题与解决方案

1. 设备ID不匹配

问题:读取的设备ID与期望不符
解决方案

  • 检查JTAG连接
  • 确认设备型号
  • 检查电源和时钟

2. 编程失败

问题:数据写入失败
解决方案

  • 检查设备是否已解锁
  • 确认擦除操作完成
  • 验证时序参数

3. 多设备链问题

问题:无法正确操作链中特定设备
解决方案

  • 重新计算链长度
  • 检查HDR/HIR/TDR/TIR设置
  • 验证设备顺序

4. 时序问题

问题:操作超时或时序错误
解决方案

  • 降低时钟频率
  • 增加等待时间
  • 检查信号完整性

深入理解:SIR和HIR的区别

SIR (Shift Instruction Register)

SIR是实际的指令操作命令,用于:

  • 向目标设备发送具体指令
  • 控制设备进入特定操作模式
  • 每次SIR操作都会影响设备状态
SIR 8 TDI(E0);       ! 发送IDCODE指令到设备

HIR (Header Instruction Register)

HIR是链配置参数,用于:

  • 定义指令寄存器的头部数据
  • 在多设备链中正确路由指令
  • 不是实际的操作命令,而是配置信息
HIR 8 TDI(FF);       ! 设置8位头部,值为0xFF(通常是旁路指令)

关键区别

  1. 功能不同:SIR执行操作,HIR配置链
  2. 使用场景:SIR用于单个操作,HIR用于链设置
  3. 数据含义:SIR是具体指令,HIR通常是旁路指令(0xFF)

高级主题

1. 边界扫描测试

边界扫描是JTAG的重要应用,用于测试电路板连接:

! 加载边界扫描指令
SIR 8 TDI(1C);       ! PRELOAD指令! 设置测试向量
SDR 664 TDI(FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF...);  ! 设置所有引脚为高电平! 执行测试
SIR 8 TDI(1D);       ! SAMPLE指令
SDR 664 TDI(00000000...) TDO(期望值) MASK(掩码);

2. 在线调试

SVF也可用于在线调试:

! 设置断点
SIR 8 TDI(DEBUG_CMD);
SDR 32 TDI(断点地址);! 读取寄存器
SIR 8 TDI(REG_READ);
SDR 32 TDI(寄存器地址) TDO(期望值);! 单步执行
SIR 8 TDI(STEP_CMD);
RUNTEST IDLE 10 TCK;

3. 安全特性

现代设备常包含安全特性:

! 检查保护状态
SIR 8 TDI(3C);       ! READ_STATUS
SDR 32 TDI(00000000)TDO(00000000)MASK(00000020);   ! 检查保护位! 解锁设备(如果需要)
SIR 8 TDI(UNLOCK_CMD);
SDR 128 TDI(密钥数据);

实用工具和技巧

1. SVF文件验证

验证SVF文件语法的方法:

  • 使用专业JTAG工具的语法检查
  • 检查指令和数据长度匹配
  • 验证时序参数合理性

2. 性能优化

优化SVF执行速度:

! 使用合适的频率
FREQUENCY 10.0E6 HZ;  ! 10MHz,根据设备能力调整! 减少不必要的等待
RUNTEST IDLE 1 TCK;   ! 最小等待时间! 批量操作
SIR 8 TDI(70);        ! 编程指令
SDR 128 TDI(数据1);
SDR 128 TDI(数据2);   ! 连续编程,无需重复发送指令
SDR 128 TDI(数据3);

3. 错误处理

添加错误检查机制:

! 操作前检查
SIR 8 TDI(3C);        ! 状态检查
SDR 32 TDI(00000000) TDO(00000000) MASK(错误掩码);! 操作
SIR 8 TDI(操作指令);
SDR 数据长度 TDI(数据);! 操作后验证
SIR 8 TDI(3C);        ! 再次状态检查
SDR 32 TDI(00000000) TDO(成功状态) MASK(状态掩码);

设备特定的SVF模式

1. FPGA编程模式

不同FPGA厂商的SVF特点:

Xilinx设备

! Xilinx特有的配置序列
SIR 6 TDI(09);        ! CFG_IN指令
SDR 配置数据长度 TDI(比特流数据);

Intel/Altera设备

! Intel特有的配置序列
SIR 10 TDI(002);      ! PROGRAM指令
SDR 1 TDI(1);         ! 开始配置

Lattice设备(如您的文件):

! Lattice特有的Flash编程
SIR 8 TDI(C6);        ! ISC_ENABLE
SIR 8 TDI(0E);        ! ISC_ERASE
SIR 8 TDI(70);        ! LSC_PROG_INCR_NV

2. 微控制器调试模式

! ARM Cortex调试
SIR 4 TDI(E);         ! DEBUG指令
SDR 35 TDI(调试命令和地址);! 读取调试寄存器
SDR 35 TDI(00000000000) TDO(期望数据);

故障排除指南

1. 常见错误代码

理解设备返回的错误状态:

! 状态位含义(以Lattice为例)
! Bit 0: BUSY - 设备忙
! Bit 1: FAIL - 操作失败
! Bit 2: FEA  - 特性错误
! Bit 3: ENC  - 加密错误
! Bit 4: PROT - 保护错误

2. 调试步骤

系统化的故障排除方法:

  1. 基础连接检查
! 最简单的连接测试
STATE RESET;
STATE IDLE;
SIR 8 TDI(FF);        ! 旁路指令
SDR 1 TDI(1) TDO(1);  ! 应该返回1
  1. 设备识别
! 读取设备ID
SIR 8 TDI(E0);
SDR 32 TDI(00000000) TDO(设备ID);
  1. 逐步验证
! 分步骤验证每个操作
SIR 8 TDI(指令1);
! 检查状态
SIR 8 TDI(指令2);
! 再次检查状态

总结

SVF文件是JTAG操作的标准化描述格式,掌握其结构和命令对于硬件调试和编程至关重要。通过理解JTAG基础、SVF命令和多设备链操作,您可以:

  1. 读懂现有的SVF文件
  2. 修改SVF文件以适应不同需求
  3. 调试JTAG相关问题
  4. 优化编程和测试流程
  5. 处理复杂的多设备系统
  6. 实现高级调试和测试功能

记住,实践是最好的学习方式。建议从简单的单设备操作开始,逐步掌握复杂的多设备链操作。同时,不同厂商的设备可能有特定的指令和时序要求,需要参考相应的技术文档。

进一步学习资源

  • IEEE 1149.1标准文档
  • 设备厂商的JTAG编程指南
  • 专业JTAG工具的用户手册
  • 在线JTAG社区和论坛

附录A:常用SVF指令参考

基础指令

指令功能示例
SIR移位指令寄存器SIR 8 TDI(E0);
SDR移位数据寄存器SDR 32 TDI(00000000);
RUNTEST运行测试时钟RUNTEST IDLE 2 TCK;
STATE设置TAP状态STATE IDLE;
FREQUENCY设置时钟频率FREQUENCY 1.0E6 HZ;

链配置指令

指令功能示例
HDR头部数据寄存器HDR 1 TDI(0);
HIR头部指令寄存器HIR 8 TDI(FF);
TDR尾部数据寄存器TDR 0;
TIR尾部指令寄存器TIR 0;
ENDDRDR结束状态ENDDR DRPAUSE;
ENDIRIR结束状态ENDIR IRPAUSE;

附录B:常见设备指令码

Lattice LCMXO3系列

指令名称指令码功能
IDCODE_PUB0xE0读取设备ID
PRELOAD0x1C边界扫描预加载
LSC_READ_STATUS0x3C读取状态寄存器
ISC_ENABLE0xC6使能配置模式
ISC_ERASE0x0E擦除Flash
LSC_INIT_ADDRESS0x46初始化地址
LSC_PROG_INCR_NV0x70递增编程
LSC_CHECK_BUSY0xF0检查忙状态
BYPASS0xFF旁路指令

Xilinx 7系列FPGA

指令名称指令码功能
IDCODE0x09读取设备ID
CFG_IN0x05配置数据输入
CFG_OUT0x04配置数据输出
JPROGRAM0x0B开始配置
JSTART0x0C启动配置
JSHUTDOWN0x0D关闭配置

Intel/Altera Cyclone系列

指令名称指令码功能
IDCODE0x006读取设备ID
SAMPLE/PRELOAD0x005边界扫描
EXTEST0x000外部测试
BYPASS0x3FF旁路指令
PULSE_NCONFIG0x001复位配置
CONFIG_IO0x00D配置I/O

附录C:状态寄存器位定义

Lattice设备状态位

位31-16: 保留
位15: CFG_SPD - 配置速度
位14: CFG_MODE - 配置模式
位13: DONE - 配置完成
位12: ISC_ENABLE - ISC使能
位11: WRITE_ENABLE - 写使能
位10: READ_LOCK - 读锁定
位9: WRITE_LOCK - 写锁定
位8: PWD_ENABLE - 密码使能
位7: ENCRYPT_ENABLE - 加密使能
位6: DONE_EX - 扩展完成
位5: PWD_PROTECT - 密码保护
位4: ENCRYPT_ONLY - 仅加密
位3: BUSY - 忙状态
位2: FAIL - 失败状态
位1: FEA - 特性错误
位0: BSE - 边界扫描错误

附录D:时序参数指南

典型时序值

参数最小值典型值最大值单位
TCK频率11025MHz
擦除时间103060
编程时间11050毫秒/页
验证时间1520毫秒/页

设备特定时序

! 快速设备
FREQUENCY 25.0E6 HZ;
RUNTEST IDLE 1 TCK 1.0E-6 SEC;! 标准设备
FREQUENCY 10.0E6 HZ;
RUNTEST IDLE 2 TCK 1.0E-3 SEC;! 慢速设备
FREQUENCY 1.0E6 HZ;
RUNTEST IDLE 10 TCK 1.0E-2 SEC;

附录E:实用脚本示例

1. 设备检测脚本

! 通用设备检测
STATE RESET;
STATE IDLE;! 尝试读取ID
SIR 8 TDI(E0);
SDR 32 TDI(00000000);
! 如果成功,设备存在且响应

2. 链长度检测

! 检测链中设备数量
STATE RESET;
STATE IDLE;! 发送全1到IR
SIR 1000 TDI(FFFFFFFFFFFFFFFF...);
! 发送全0
SIR 1000 TDI(00000000000000000...);
! 计算返回的1的数量确定链长度

3. 快速编程模板

! 快速编程模板
FREQUENCY 20.0E6 HZ;! 1. 设备识别
SIR 8 TDI(E0);
SDR 32 TDI(00000000) TDO(设备ID) MASK(FFFFFFFF);! 2. 使能编程
SIR 8 TDI(C6);
SDR 8 TDI(00);! 3. 擦除
SIR 8 TDI(0E);
SDR 8 TDI(0E);
RUNTEST IDLE 2 TCK 30.0 SEC;! 4. 编程循环
SIR 8 TDI(46);
SDR 8 TDI(04);
SIR 8 TDI(70);
! 重复SDR命令进行数据编程! 5. 验证
SIR 8 TDI(3C);
SDR 32 TDI(00000000) TDO(00000000) MASK(00003000);
http://www.dtcms.com/a/317565.html

相关文章:

  • 身份证实名认证接口增强联网平台的便利性与安全性
  • Centos上安装Mysql5.7教程
  • 智能提示词引擎的革新与应用:PromptPilot使用全解析
  • Bug 记录:SecureRandom.getInstanceStrong()导致验证码获取阻塞
  • 算法238. 除自身以外数组的乘积
  • 完整的登陆学生管理系统(配置数据库)
  • VSCode git提交记录中文commit显示乱码
  • 碰撞问题的分析
  • OpenAI开源大模型gpt-oss系列深度解析:从120B生产级到20B桌面级应用指南
  • C++实现线程池(3)缓存线程池
  • get请求中文字符参数乱码问题
  • 互联网一线大厂Java面试八股文整理(1000题附答案)
  • MATLAB深度学习之数据集-数据库构建方法详解
  • Leetcode——209. 长度最小的子数组
  • Redis中间件(二):Redis协议与异步方式
  • 用docker的方式快速搭建一个Hive的调测环境
  • Java 字节码文件(.class)的组成详解
  • 具有柔性关节的机械臂matlab仿真
  • 在Word和WPS文字中如何输入汉字的偏旁部首
  • 【计算机网络 | 第4篇】分组交换
  • Linux seLinux
  • 网络工程师--华为命令专题
  • 安卓雷电模拟器安装frida调试
  • 《Day2-PyTorch Tensor 从入门到实践:核心操作与避坑指南》
  • jmm 指令重排 缓存可见性 Volatile 内存屏障
  • 数据中心白牌服务器市场规模与发展趋势分析报告-路亿市场策略
  • 丝杆升降机的螺母磨损到什么程度需要更换?有无预警或检测方法?
  • Orange的运维学习日记--31.Linux防火墙深度详解
  • LVS-DR模式高性能负载均衡实战
  • PLC学习之路-定时器-(三)