Xilinx FPGA 国产flash固化方法
Xilinx FPGA对国产flash的支持很差,查询了很多方法(例如:[让vivado支持(gd/winbond/mx)原本官方不支持的FLASH烧写](https://blog.csdn.net/xsxsa/article/details/129004698)),都不能解决问题。先发现openLoader能够绕过vivado进行bit流文件的烧录,故尝试使用此方法固化程序进入国产flash,但
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Xilinx FPGA对国产flash的支持很差,查询了很多方法(例如:[让vivado支持(gd/winbond/mx)原本官方不支持的FLASH烧写](https://blog.csdn.net/xsxsa/article/details/129004698)),都不能解决问题。先发现openLoader能够绕过vivado进行bit流文件的烧录,故尝试使用此方法固化程序进入国产flash,但是仍然无法识别,后来又看到可以通过ISE IMPACT绕过ID识别实现烧录。本文意在记录这两种方法
使用的芯片:FPGA:xc7k325t,flash:PY25Q128HA下载器:High speed CableUSB Model:JTAG SMT2
一、 windows下openLoader下载
MSYS2 和 UCRT介绍
| 名称 | 含义 | 你要知道的 |
|---|---|---|
| MSYS2 | Windows 下的类 Linux 环境 | 用来运行 Unix 命令、自动安装软件 |
| pacman | MSYS2 的包管理器(相当于 Linux 下的 apt/yum) | 自动安装依赖和编译好的工具 |
| UCRT 版本 | 使用 Microsoft 的 UCRT(通用 C 运行库)编译的程序 | 更兼容现代 Windows 程序 |
参考链接:
https://www.cnblogs.com/quantoublog/articles/17963572
🔧 步骤一:安装 MSYS2 UCRT
- 打开官网:https://www.msys2.org/
- 下载并安装最新的 MSYS2 UCRT 版本
例如:msys2-ucrt-x86_64-xxxxxx.exe - 安装完后,打开 MSYS2 UCRT64 终端
🔧 步骤二(可选):初始化 pacman
在终端中运行以下命令更新:
pacman -Syu # 更新系统
如果提示需要重新启动,按提示关闭终端再重开一次。
🔧 步骤三:安装 openFPGALoader
在 MSYS2 UCRT64 终端中输入:
pacman -S mingw-w64-ucrt-x86_64-openFPGALoader
🔧 步骤四:验证安装是否成功
输入:
openFPGALoader -h
出现这些代码说明安装成功:
……………………
-D, --read-dna Read DNA (Xilinx FPGA only)
-X, --read-xadc Read XADC (Xilinx FPGA only)
--read-register arg Read Status Register(Xilinx FPGA only)
--user-flash arg User flash file (Gowin LittleBee FPGA only)
-V, --Version Print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
Report bugs to <gwenhael.goavec-merou@trabucayre.com>.
🔧 步骤五:更改驱动
将下载器的驱动从默认的FTDIBUS改为WinUSB(或者libusb)
二、检测 JTAG 下载器是否识别成功
1.在 MSYS2 终端输入:
代码如下(示例):
openFPGALoader --detect --verbose
输出:
empty
No cable or board specified: using direct ft2232 interface
unable to open ftdi device: -3 (device not found)
JTAG init failed with: unable to open ftdi device
说明没有检测到设备,我推测是我的下载器不是ft2232 的驱动。然后检查电缆
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader --list-cables
empty
cable name vid:pid
anlogicCable 0x0547:1002
arm-usb-ocd-h 0x15ba:002b
arm-usb-tiny-h 0x15ba:002a
bus_blaster 0x0403:6010
bus_blaster_b 0x0403:6010
ch347_jtag 0x1a86:55dd
ch552_jtag 0x0403:6010
cmsisdap 0x0d28:0204
dfu 0x0000:0000
digilent 0x0403:6010
digilent_ad 0x0403:6014
digilent_b 0x0403:6010
digilent_hs2 0x0403:6014
digilent_hs3 0x0403:6014
dirtyJtag 0x1209:c0ca
ecpix5-debug 0x0403:6010
efinix_jtag_ft2232 0x0403:6010
efinix_jtag_ft4232 0x0403:6011
efinix_spi_ft2232 0x0403:6010
efinix_spi_ft4232 0x0403:6011
esp32s3 0x303a:1001
ft2232 0x0403:6010
ft2232_b 0x0403:6010
ft231X 0x0403:6015
ft232 0x0403:6014
ft232RL 0x0403:6001
ft4232 0x0403:6011
ft4232_b 0x0403:6011
ft4232hp 0x0403:6043
ft4232hp_b 0x0403:6043
gatemate_evb_jtag 0x0403:6010
gatemate_evb_spi 0x0403:6010
gatemate_pgm 0x0403:6014
gwu2x 0x33aa:0120
jlink 0x1366:0105
jlink_base 0x1366:0101
jtag-smt2-nc 0x0403:6014
jtrace_pro 0x1366:1020
lpc-link2 0x1fc9:0090
numato 0x2a19:1009
numato-neso 0x2a19:1005
orbtrace 0x1209:3443
papilio 0x0403:6010
steppenprobe 0x0403:6010
tigard 0x0403:6010
usb-blaster 0x09fb:6001
usb-blasterII 0x09fb:6810
xvc-client 0x0000:0000
发现我的USB ID 0403 0614是存在对应驱动的
然后直接指定检测,选一种即可
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c jtag-smt2-nc --detect
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
JTAG init failed with: TDO is stuck at 0
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c digilent_ad --detect
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
JTAG init failed with: TDO is stuck at 0
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c digilent_hs2 --detect
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
JTAG init failed with: TDO is stuck at 0
意思能检测到但是TDI异常,我发现是电源没有打开。开启电源后再次运行就正常了
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c jtag-smt2-nc --detect
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
index 0:
idcode 0x3651093
manufacturer xilinx
family kintex7
model xc7k325t
irlength 6
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c digilent_ad --detect
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
index 0:
idcode 0x3651093
manufacturer xilinx
family kintex7
model xc7k325t
irlength 6
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c digilent_hs2 --detect
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
index 0:
idcode 0x3651093
manufacturer xilinx
family kintex7
model xc7k325t
irlength 6
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$
三、OpenLoader烧录文件
首先烧录bit流文件
代码如下:
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c jtag-smt2-nc ~/openFPGALoader/xilinx_bitfiles/MWIR640.bit
empty
Jtag frequency : requested 6.00MHz -> real 6.00MHz
Open file DONE
Parse file DONE
load program
Load SRAM: [==================================================] 100.00%
Done
Shift IR 35
ir: 1 isc_done 1 isc_ena 0 init 1 done 1
小技巧:可以直接拖拽文件到控制台
bit流烧录成功,然后进行bin文件烧录,但是尝试很多种方法依旧烧录不进去
Admin@DESKTOP-GT49157 UCRT64 ~/openFPGALoader/build
$ ./openFPGALoader -c jtag-smt2-nc --fpga-part xc7k325tffg900 --write-flash --offset 0x0 /e/workspace/xilinx_project/BJUT_MWIR640/MWIR640/work/vivado/MWIR640.runs/impl_1/top.bin
empty
write to flash
Jtag frequency : requested 6.00MHz -> real 6.00MHz
Open file DONE
Parse file DONE
use: E:/software/msvs2/home/Admin/openFPGALoader/share/openFPGALoader/spiOverJtag_xc7k325tffg900.bit.gz
load program
Load SRAM: [==================================================] 100.00%
Done
Shift IR 35
ir: 1 isc_done 1 isc_ena 0 init 1 done 1
jtag_chain_len: 1
SOJ version: 1.000000
Detail:
Jedec ID : 85
memory type : 20
memory capacity : 18
flash chip unknown: use basic protection detection
start addr: 00000000, end_addr: 004e0000
Erasing: [==================================================] 100.00%
Done
Writing: [==================================================] 100.00%
Done
虽然显示烧录完成,但是实际上没有烧录成功,可能还是无法识别这种flash芯片,不过若是一般的进口芯片应该能够成功。接下来我就没有进一步尝试,转而选择使用ISE IMPACT的方法。
参考教程:https://blog.csdn.net/Unibug/article/details/127689798
在进行下一步之前需要回退原先的USB驱动,因为系统会记录之前绑定过的驱动,所以只需要在设备管理器中更新驱动程序哪里找到之前的驱动就行。
四、ISE IMPACT烧录
1. 下载及闪退问题
官网有两种版本,一种是在虚拟机VirtualBox内运行的(14.7 Windows 10 and Windows 11),还有一种是老一点版本的(名称就是14.7),直接在Windows上运行。在虚拟机中运行的不能配置环境变量(可能有方法,但我不会),老版本的缺点可能就是兼容性不太好,在Windows10上运行有BUG。总之,选择14.7(没有后缀的版本)。
下载时我一开始只想单独下载IMPACT,但是运行时出现闪退的问题,需要使用系统模块的文件进行替换,所以还是老老实实的下载全系统版本吧。
下载教程:https://blog.csdn.net/weixin_42837669/article/details/116245434
ISE IMPACT闪退解决方法:https://blog.csdn.net/qq_25144391/article/details/90339002
2. 固化
固化教程:https://blog.csdn.net/weixin_41445387/article/details/130241849
关键是添加系统环境变量,变量名输入:XIL_IMPACT_SKIPIDCODECHECK,变量值设置为1。
然后我的flash替代选择为W25Q128BV.
结尾
最后使用添加环境变量+IMPACT烧录的方式实现过程flash的固化,有没有大佬知道使用OpenLoader的方法能否实现自定义flash的固化呢?
更多推荐



所有评论(0)