"); //-->
……是的,你没有看错,我们将讨论如何使用jlink仿真器来控制FPGA——主要是读取或写入其引脚状态。本文主要针对A家的FPGA,但理论上也可用于X家的FPGA,以及其他支持JTAG的器件。
研究这个的原因是我的一块板子上的FPGA接了一片QSPI的Flash,我想有一种方便的方法对其进行编程。可惜Altera没有开放他的USB Blaster的编程接口,所以我选择了开放编程接口(虽然只是有限度的开放)的segger的jlink。其实我们完全可以自己做一个用于jtag控制的小板子,不过既然有现成的jlink可以用,就不去找那个麻烦了。
我假定您熟悉usb和基本的jtag概念,熟悉计算机上的简单软件开发,熟悉FPGA。本文将侧重于jtag的运作,对开发过程中的其他细节问题将不作详细介绍。这不是一篇Step by step的文章。
需要准备的文档及软件:
- libusb
这个是一个开源的跨平台通用usb驱动,可以在sourceforge.net下载它的源代码和二进制文件。稳定性和性能都相当好。我们将使用这个驱动来操作jlink,而不用segger的原厂驱动,因为segger貌似没有提供原厂驱动的接口文档。
- jlink编程接口文档
http://www.segger.com/admin/uploads/productDocs/RM08001_JLinkUSBProtocol.pdf
- IEEE1149.1
这个是必须的。
- TopProbe
这个是一个通用的JTAG接口控制软件,可以通过它对芯片引脚进行简单的读写操作。支持很多JTAG调试器,当然也包括USB Blaster和Jlink。
- BusHound
这个是USB监控软件,可以用来监控USB总线上的数据流,相当于一个软件级别的协议分析仪。
- VC6.0 or VS2008 or CodeBlocks or 其他
只要能用来编写计算机软件就可以。推荐CodeBlocks,这个是跨平台的开发工具,在windows上写好后几乎不用太多工作就可以在linux下控制你的jlink。
以上软件中TopProbe和BusHound不是必须的,不过在我们自己的调试软件出现问题的时候可以用这两个软件配合起来抓下USB总线数据,方便和我们自己的软件进行对比。
这里注意下,arm和altera所使用的jtag口的引脚顺序是不一样的,所以我们需要一根自己改造过的10PIN调试线。
今天我们先看下如何获取jlink的版本,验证与jlink通讯正常,接下来的几篇将讲述如何控制jtag port。
1. 首先我们用libusb生成一个可用于jlink的驱动,并用它替换segger原厂的驱动。我手里的jlink的VID和PID分别是0x1366和0x0101。
2. 根据libusb的文档和example,我们在自己的程序中打开jlink,然后向其发送获取版本信息的命令:
jlink_out_buf[0] = EMU_CMD_VERSION;
usb_bulk_write(dev, EP_OUT, jlink_out_buf, 1, 5000);
然后读取jlink返回的版本信息,共需读两次。第一次读回来的是版本字符串的长度,第二次读回来的才是版本字符串:
usb_bulk_read(dev, EP_IN, jlink_in_buf, BUFFER_SIZE, 5000);
int ver_len = jlink_in_buf[0] | (jlink_in_buf[1] << 8); // 字符串长度数据占2个字节,Little Endian
usb_bulk_read(dev, EP_IN, jlink_in_buf, BUFFER_SIZE, 5000); // 这次取回来的是版本信息字符串
printf("%s", jlink_in_buf);
如果打印出来的字符串没什么问题,那么表明我们已经可以与jlink通讯了!打印出来的字符串大概是这个样子:
J-link compiled Dec 03 2007 7:15:31 ARM Rev.5
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
STEP7_v51编程中文手册
爱立信手机电池充电器电路
intel、3com网卡特卖
ltc4053USB充电器电路图
台积电推1.4nm 技术:第2代GAA晶体管,全节点优势2028年推出
THE PCB
基于ARM的嵌入式Linux系统开发 下
Avicena与TSMC优化I/O互连的光电探测器阵列
基于ARM的嵌入式Linux系统开发 上
规避美国关税:三大顶级PC厂商计划在沙特阿拉伯建厂
可充电手电筒电路壹(4)
Microchip MCU 简化模拟传感器设计
最新ARM技术和嵌入式技术发展动态 上
基于ARM的WinCE嵌入式系统开发 下
SunyPLC300可编程逻辑控制器
Spectra 9.03
可充电手电筒电路壹(3)
可充电手电筒电路壹(5)
systemview5
[原创]提供BDM模式转接头
马瑞利将采用英飞凌激光扫描显示技术
2005年电子设计大赛参赛者技术交流群
[原创]低价提供CF5249系列开发板
基于ARM的嵌入式Linux系统开发 中
台积电3nm更新:N3P量产,N3X步入正轨
英特尔在汽车AI应用中选择了小芯片(Chiplet)
关于Vxworks函数kernelInit()
台积电24座新厂痛点在人力 英特尔重整后人才流向受关注
不使用x86、Arm:俄罗斯仍要在2030年前国产28nm
闪迪提议HBF取代HBM,在边缘实现 AI