【开源硬件】多功能FPGA-JTAG


6927cf60faf842eeac907b14cab885ef.png

硬件介绍

目前国内AMD-Xilinx FPGA-JTAG主要有两种:一是官方开发板:

bc927839ad6bfcca0f9d135510adbc15.png

二是新推出的smart lynq(速度及功能更强):

89f5c43b237ffafaa7249eb608408db3.png

价格就劝退很大一部分人了:

4d6fec06c6053663a8adbc1e5c550b69.png

二是国产的,各种各样就不放图片了,国产的JTAG基本都是使用逆向Digilent的板载JTAG,使用FT232Hx或者FT2232Hx系列芯片+逆向的固件实现,但是最近FT232Hx和FT2232Hx价格“飞天”,所以我们今天玩点不一样的-逆向官方的开发板-使用FT4232Hx(兼容FT4232HQ和FT4232HL)实现一个多功能JTAG:

整体就是FT4232最小系统加上电平转换芯片实现,系统框图如下:

aa05694258ae113f9a13408bff5d7fd8.png

引出一路JTAG+三路串口。

支持7系列+U+系列FPGA,电平支持1.5V\1.8V\2.5V\3.3V,TCK速率高达30M以上。

串口1和2支持任意电平TTL,板上可选1.8V\3.3V和5V,在下图位置选择:

74f9ba04c9ce882b7aeb6b6a7989e519.png

串口3只支持和JATG的Vref电平相同的TTL电平,不可以设置,只有在Vref供电情况下才可以使用。

固件烧写

简单的很,只需要在下面开源链接上下载软件:

https://github.com/suisuisi/jtag

压缩密码:openfpga

插上USB到电脑,设备管理器上显示如下:

6e395d229845615392e9411c7a6d642f.png

点击下面的文件即可完成烧写。

52f20a860515abd85950a33a74816ecc.png

扩展板

上面核心板可以适当扩大,增加接口,兼容更多的接口形式,我为了减少体积,所以增加了一个扩展板:

453aa7a4d123e355b727db926f7347c5.jpeg

扩展板地址:

https://oshwhub.com/OpenFPGA/jtag-zhuan-jie-ban

遗留问题

没有什么遗留问题,主要是TYPE-C座子太难焊接了,需要点技术才能搞定。。。

扩展板上需要开个跳线帽的孔,方便从上选择UART的电平标准,图片上没做,最新版本已经修正。

开源说明

软件、硬件(原理图、PCB均开源),自己打板测试过,大家可以自行修改制作。

最后的最后,固件是从某位大佬那获取的,由其授意传播,只可用来学习,商业上引起的任何纠纷、问题均与本公众号及及本文相关人员无关~

### 使用JTAG接口向RISC-V处理器下载程序 为了通过JTAG接口将程序下载到RISC-V架构的处理器中,需遵循特定的操作流程来确保成功传输并加载目标代码。此过程涉及配置硬件环境、准备待上传的应用程序文件以及利用支持工具完成实际的数据传送。 #### 配置开发板与连接设备 确认物理层面上已正确建立主机同搭载有RISC-V CPU的目标板之间的通信链路至关重要。这通常意味着要检查USB线缆或专用适配器是否稳固地接入计算机端口,并验证另一侧确实连上了微控制器单元(MCU)上的相应管脚。对于某些平台而言,在启动编程模式之前可能还需要调整跳线帽的位置或是操作额外的机械开关;例如,依据给定的信息,当打算采用`pitonstream`脚本来实施固件灌录工作时,则应事先把编号为7号的状态切换装置拨至开启位置以便激活必要的权限[^2]。 #### 准备应用程序映像 接下来就是准备好即将被注入到片上系统的二进制镜像。该阶段的任务包括但不限于编译源码片段成适用于指定ISA版本(即指令集体系结构)的对象模块,再经链接步骤产出最终可执行体。值得注意的是,考虑到后续可能会涉及到断点管理等功能特性,建议尽可能选用具备完整符号表信息的未压缩ELF格式作为输出形式之一,这样有助于提高调试效率和准确性[^1]。 #### 利用OpenOCD等软件实现自动化部署 一旦上述准备工作就绪之后就可以着手编写具体的命令序列来进行远程控制了。这里推荐借助开源项目Open On-Chip Debugger (简称 OpenOCD),其凭借丰富的插件库几乎能够兼容市面上绝大多数类型的MCU产品系列。下面给出了一段Python风格伪代码用于示意怎样调用此类实用程序: ```python import subprocess def flash_riscv(target, elf_path): command = [ 'openocd', '-f', f'interface/ftdi/{target}.cfg', # 指定使用的JTAG适配器型号 '-c', '"transport select jtag"', # 明确指出采用哪种底层通讯机制 '-f', 'board/riscv_board.cfg', # 加载对应于具体评估套件的设定参数集合 '-c', f'"program {elf_path} verify reset exit"' # 执行烧录动作的同时检验数据完整性 ] process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output, error = process.communicate() if process.returncode != 0: raise Exception(f"Failed to program device with code {process.returncode}: {output.decode()}") flash_riscv('your_jtag_adapter_name_here', '/path/to/application.elf') ``` 以上示例展示了如何构建一个简单的函数去封装整个刷机逻辑,其中包含了对可能出现错误情况下的异常捕捉处理措施。当然,实际应用场景下还需根据个人需求灵活定制更多细节选项,比如自定义日志记录等级或者集成图形界面组件等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值