Lattice的JTAG编程烧录

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等# Lattice的JTAG编程烧录

JTAG基础知识

JTAG定义

JTAG(Joint Test Action Group),联合测试行动组)是一种国际标准测试协议(IEEE1149.1兼容)。主要功能两种:一是用于测试芯片,二是用于Debug,对各类芯片以及外围设备进行调试。此处介绍Debug功能。

JTAG的基本原理是在器件内部定义一个TAP(Test Access Port测试访问口)通过专用的JTAG测试工具对内部节点测试。

边界扫描

边界扫描技术——在芯片的输入、输出引脚附近增加一个移位寄存器单元,边界扫描寄存器。

芯片调试状态:边界扫描寄存器将芯片与外围的IO口隔离,实现对芯片输入、输出信号的控制和观测。通过边界扫描寄存器单元将信号加载至芯片输入引脚,捕获输出引脚信号。

芯片正常运行:边界扫描寄存器对芯片来说透明,芯片正常运行不受影响。

TAP测试访问口

TAP控制器控制TAP访问芯片提供的数据寄存器DR和指令寄存器IR。

系统上电后,TAP Controller首先进入Test-Logic-Reset状态,然后依次进入Run-Test/Idle、Select-DR- Scan、Select-IR-Scan、Capture-IR、Shift-IR、Exitl-IR、Update-IR状态,最后回到Run- Test/Idle状态。在此过程中,状态的转移都是通过TCK信号进行驱动(上升沿),通过TMS信号对TAP的状态进行选择转换的。其中,在 Capture-IR状态下,一个特定的逻辑序列被加载到指令寄存器中;在Shift-IR状态下,可以将一条特定的指令送到指令寄存器中;在 Update-IR状态下,刚才输入到指令寄存器中的指令将用来更新指令寄存器。最后,系统又回到Run-Test/Idle状态,指令生效,完成对指令 寄存器的访问。当系统又返回到Run-Test/Idle状态后,根据前面指令寄存器的内容选定所需要的数据寄存器,开始执行对数据寄存器的工作。其基本 原理与指令其存器的访问完全相同,依次为Select-DR-Scan、Capture-DR、Shift-D、Exit1-DR、Update-DR, 最后回到Run-Test/Idle状态。通过TDI和TDO,就可以将新的数据加载到数据寄存器中。经过一个周期后,就可以捕获数据寄存器中的数据,完成对与数据寄存器的每个寄存器单元相连的芯片引脚的数据更新,也完成了对数据寄存器的访问。

JTAG引脚定义

TCK——测试时钟、编程时钟输入

TDI——测试数据、编程数据输入,数据通过TDI从JTAG口输入

TDO——测试数据、编程数据输出,数据通过TDO从JTAG口输出

TMS——测试模式选择、改变TAP内部的状态机的状态

TRST——复位信号,可以用来对TAP Controller进行复位(初始化)。这个信号接口在IEEE 1149.1标准里并不是强制要求的,因为通过TMS也可以对TAP Controller进行复位

STCK——时钟返回信号,在IEEE 1149.1标准里非强制要求

DBGRQ——目标板上工作状态的控制信号。在IEEE 1149.1标准里没有要求,只是在个别目标板中会有

Lattice芯片烧录(常用方式)

Bit文件烧录(debug使用):在operation双击下选择static ram cell mode。下面operation选择SRAM Fast Program。选择programming file为 后缀名bit的文件。

Jed文件烧录(固化使用):在operation双击,选择flash programming mode。选择flash erase,Program,verify选择jed文件 。

### USB to JTAG转换器简介 USB to JTAG转换器是一种用于嵌入式系统的硬件调试工具,能够将USB接口的数据信号转化为JTAG协议所需的TMS、TDI、TDO、TCK等信号[^1]。这类设备广泛应用于FPGA、微控制器和其他复杂集成电路的编程与调试过程中。 #### 使用教程概述 为了有效利用USB转JTAG转换器进行硬件调试,通常需要完成以下几个方面的配置: 1. **驱动安装**: 大多数商用或开源USB转JTAG转换器都需要特定的驱动程序才能被主机操作系统识别并正常工作。例如,在Windows环境下可能需要用到CH340系列芯片对应的驱动程序[^4]。 2. **软件环境搭建**: 需要配合相应的开发套件或者IDE(Integrated Development Environment),比如Xilinx Vivado、Quartus Prime Lite Edition等。这些工具不仅提供图形化界面方便用户加载比特流文件至目标器件,还集成了丰富的诊断功能帮助定位潜在问题所在位置。 3. **物理连接设置**: 正确无误地按照产品手册指示把各条线路一一对应起来至关重要。一般而言,标准四线制JTAG链路由TMS(测试模式选择), TDI(测试数据输入),TDO (测试数据输出) 及 TCK (测试时钟) 构成;而某些更高级别的解决方案可能会额外增加TRSTn引脚作为可选特性之一用来异步复位整个扫描路径状态机[^3]。 4. **固件更新与维护**: 定期检查制造商官网是否有最新版本可用,并及时升级内部运行代码以修复已知漏洞或是新增加的支持列表项[^2]。 #### 推荐购买选项分析 目前市面上存在多种类型的USB-to-JTAG适配卡可供挑选,下面列举了几款较为知名的产品供参考考虑: - **FTDI FT2232H Mini Module** - 特点: 支持双通道独立运作模式, 提供高达12Mbps同步传输速率. - 应用场景: 适合那些追求高性能实时处理能力的应用场合. - **Olimex ARM-USB-OCD-H** - 特点: 开源设计方案允许自由修改定制满足个性化需求; 同时兼容ARM Cortex-M系列MCU以及Lattice ECP5 FPGA家族成员. - 应用场景: 对于希望深入理解底层工作机制的学习者来说是个不错的选择. - **Segger J-Link PRO V9** - 特点: 功能全面强大, 不仅限于简单的烧录操作还能执行在线追踪采样等功能; 并且拥有跨平台一致性的良好表现. - 应用场景: 工业控制领域内的精密测量仪器校准验证阶段非常适用. 以上三类代表作各有千秋需依据实际项目背景综合评判后再做决定. ```python import serial from time import sleep def send_jtag_command(port='/dev/ttyUSB0', baudrate=115200): ser = serial.Serial(port, baudrate) if not ser.isOpen(): ser.open() command_sequence = b'\x0f\x8a' # Example JTAG Command Sequence try: while True: ser.write(command_sequence) response = ser.read_all() print(f"Response Received:{response}") sleep(1) except KeyboardInterrupt: pass send_jtag_command() ``` 上述Python脚本片段展示了如何借助PySerial库发送基础型态下的JTAG指令序列给指定串口端口号关联的目标装置实例演示.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值