通过SPI I2C IIC或GPIO模拟JTAG接口对LATTICE XO2 XO3 CPLD FPGA在线升级的开发笔记及源码分析-Lattice-莱迪斯社区-FPGA CPLD-ChipDebug

通过SPI I2C IIC或GPIO模拟JTAG接口对LATTICE XO2 XO3 CPLD FPGA在线升级的开发笔记及源码分析

通过SPI I2C IIC或GPIO模拟JTAG接口对LATTICE XO2 XO3 CPLD FPGA在线升级的开发笔记及源码分析

本文主要是介绍单片机MCU ARM DSP怎样通过SPI I2C IIC 或GPIO模拟JTAG接口对LATTICE XO2 XO3 CPLD FPGA进行固件代码程序升级的开发技术及调试经验分享。

对LATTICE XO2 XO3 CPLD FPGA在线升级的命令代码流程

无论通过哪种接口对LATTICE XO2 XO3 CPLD FPGA进行升级的流程的都是一样的,发送一样的命令序列,也就是说业务协议层和数据链路层是一样的,只是物理层不一样。可以理解为数据只是最终通过I2C SPI JTAG不同接口发送出去而已,数据始终还是那些数据。LATTICE官方的流程图主要参考RD1204(注意XO2、XO3分别有不同的RD1204,里面是有一些差异的),但是里面的流程足足有五六页,很复杂,当然严格按照LATTICE官方文档的流程来是最稳妥的。但是实际上我们要做的升级工作只是LATTICE官方文档流程的一个子集,以I2C接口为例简化流程如下(如上文所述,其它接口的流程亦如下图):
读取流程

  • e96e30d7d1122750

写入流程

对LATTICE XO2 XO3 CPLD FPGA在线升级的操作流程

工程设置

  • 对于模拟JTAG编程这种方式不需要对工程作额外支持,默认JTAG是一直开启的,除非JTAG_EN脚被禁能。
  • 对于SSPI编程,默认情况下XO2默认是使能了SSPI的、XO3是禁能了SSPI的,但是这个不能作为生产依据,也就是说你最好检查一下工程中这个选项的设置,如果你通过JTAG或者SSPI误烧了禁用SSPI端口的bitstream,那么就不再能通过SSPI升级了,只能通过JTAG口重新烧录启用了SSPI端口的固件。具体设置位置如下图:12f5b935eb122957
  • IIC方式进行升级一样要在spreadsheet的global prefereneces中打开IIC选项,具体操作如下图:d249d09f24123011

确定器件需要升级的行数

由于不同的器件有不同的逻辑容量,对器件进行编程是按行进行的,因此需要知道所用器件有多少行,这个资料在RD1024中有描述。下图是XO2系列不同器件的可编程行数

059f7ef89d122858

JED文件转HEX以及转BIN或者转C数组的流程

  1. 通过deploy将JED转成HEX。

  2. 由于转出来的HEX是十六进制文本,因此如果转为BIN文件需要将十六进制字符串转化成二进字,这部分工作可以在电脑上做,也可以在MCU中做,我有写一个小工具,有需要联系我吧。如果是转成C数组,那么可以使用Tcl脚本完成这种转换,这个Tcl脚本我已经上传到了chipdebug,具体操作参见【chipdebug.com】网站的说明

  3. 转C数组的情况,再有些编译器会报过大的整型数据这种错误 ,因此需要将数组里的数据按字节进行分割进行。

通过SSPI对LATTICE XO2 XO3 CPLD FPGA进行在线升级的开发经验分享

通过SSPI进行升级,首先需要在工程设置中使能SSPI。基本上只要能够成功读取ID值,基本上就成功一大半了。

通过GPIO模拟JTAG对LATTICE XO2 XO3 CPLD FPGA进行在线升级的调试经验分享

通过JTAG进行调试,其实没什么可说的,因为实在不清楚,可以抓PC软件通过JTAG下载线进行下载的波形,也可以直接查看SVF文件,一步步生成,关于SVF文件的生成和语法格式,可以在【chipdebug.com】网站上找到。

通过I2C对LATTICE XO2 XO3 CPLD FPGA进行在线升级注意事项

I2C调试需要注意的是READ ID之后是NAK而不是ACK,同样在校验时也是NAK结尾,即读操作最后一bit之后都要以NAK结尾,详见时序图。

SPI源码分析

采用SPI进行升级的是最简单的方法,速度也快,我比较推荐这种。

模拟JTAG源码分析

模拟JTAG采用普通的GPIO就可以了,唯一比较麻烦是需要实现JTAG 1149的协议,主要是一个状态机。关于JTAG模拟在【chipdebug.com】网站中有一篇详细的文章,跟SVF格式解析在同一篇文章里。

I2C升级源码分析

升级速度优化

1.优化代码
2.代码时序
3.减少不必要的操作。
具体后面展开,未完待续。

IIC操作流程笔记下载:

 

请登录后发表评论