利用嵌入式处理器对可编程逻辑器件进行重编程

可编程逻辑

1363人已加入

描述

(文章来源:OFweek)

在嵌入式系统里除了嵌入式处理器外还会经常使用到可编程逻辑器件,有些可编程逻辑器件在被焊接到印制电路板上之后还可以对其程序进行更新,这种特性称之为“在系统可重编程能力。在单板开发阶段,通常使用下载电缆通过IEEE Standard 1149.1 JTAG接口对可编程逻辑器件重编程。单板上的JTAG接口很可能出于产品外形及内部结构设计的考虑已经无法与下载电缆相连接,此时将无法通过下载电缆对可编程逻辑器件重编程。基于嵌入式系统的产品通常对外提供串行接口或以太网接口,可以通过这些接口将可编程逻辑器件的更新程序发送到处理器,由处理器对可编程逻辑器件重编程。

串行接口由于协议实现简单、占用资源少而被嵌入式系统广泛使用,只需要使用串行接口连接线将主机的串行接口与产品的串行接口相连接,通过主机上的串行接口通讯软件将更新程序发送给处理器即可,文件传输协议一般采用Xmodem协议;而对于基于嵌入式系统的网络产品而言,由于自身提供以太网接口,而且操作系统内嵌TCP/IP协议栈,因此可以使用以太网接口将更新程序发送给处理器,文件传输协议一般采用TFTP协议,嵌入式系统运行TFTP服务器程序,主机上运行TFTP客户端程序[2] 。

嵌入式处理器通过串行接口或以太网接口接收到的可编程逻辑器件的更新程序是一种Jam文件,使用类似于Altera公司Quartus II development tool的开发工具根据Jam标准和测试语言(Jam Standard Test andProgramming Language 以下简称Jam语言)的要求由Programmer Object File (*.pof,文件后缀名为pof)一类的目标文件转换生成[3] 。Jam文件是一个ASCII文件,文件中包含了对可编程逻辑器件进行编程的所有信息,包括编程算法和数据,详细介绍如下:

(1)“注解字段”部分存储了Jam文件的相关信息,包括可编程逻辑器件的名称,Jam文件的创建时间,使用的Jam语言的版本等等。(2)“变量声明/初始化”部分由编程/校验的数据和Jam文件用到的一些变量声明组成。(3)“算法部分”包含了对可编程逻辑器件编程需要用到的命令和代码,包括空白检查、擦除、编程和校验等等所有可以在可编程逻辑器件上执行的功能。在代码中可以使用分支或循环结构。

嵌入式处理器在接收到Jam文件之后通过运行一个Jam Player程序来解析这个Jam文件,翻译文件中每一条指令,并对JTAG端口进行数据的读写操作,从而完成对ISR可编程逻辑器件程序的更新工作。Jam Player是一个C语言程序,其main主程序执行所有的基本功能,包括对Jam文件内容的解析,指令的翻译等,这部分内容对于所有的嵌入式系统和Jam文件来说都是一样的。

嵌入式处理器

而Jam Player的I/O功能,包括I/O管脚的寻址、延时程序、文件的I/O以及操作系统相关的功能都包含在jamstub.c文件里,通过修改这个文件Jam Player可以适用于任何系统结构。当Jam Player接收数据的时候,jamstub.c能够从Jam文件取回数据,或者从TDO管脚移位读取数据。jamstub.c也能将处理过的JTAG数据发送到3个JTAG管脚(TDI、TMS和TCK),将出错消息和相关信息返回给调用程序。升级ISR可编程逻辑器件的程序只需要改变Jam文件。

Jam Player通过一个jam_jtag_io函数(int jam_jtag_io(int tms_tdi))来控制对JTAG接口的读写操作。每次调用这个函数的时候,JTAG的TMS和TDI输出信号将被设定为需要的值,而TDO输入信号将被采样,值将被返回,之后TCK时钟信号将产生一个下降沿。tms_tdi参数包含3比特信息,分别指示TMS信号和TDI信号的状态以及是否需要读取TDO的输出(如果不需要用到TDO的值则可以跳过对TDO的读取操作)。最低位比特代表TMS的值,第2位比特代表TDI的值,第3位比特指示是否读取TDO:如果置位,则必须读取TDO的值,否则不需要。如果TDO为低电平,返回零值,高电平则返回非零值。如果没有对TDO进行读取也将返回零值。

嵌入式处理器与JTAG 器件连接的方法有两种,一种是直接将嵌入式处理器与JTAG 器件连接起来,这种方法处理器需要有专门四个管脚用于JTAG 接口,节省了电路板空间的同时却占用了处理器的四个管脚;另一种方法通过一个接口逻辑将JTAG 器件连接到处理器的总线,处理器通过JTAG 器件对应的地址来对其进行读写操作[4] 。

图给出了接口逻辑的一个范例。当接口逻辑收到正确的地址和控制信号,它将对TDI、TCK 和TMS信号进行同步,并通过多路复用器驱动输出管脚,下载电缆也可以通过多路复用器对JTAG 链进行编程或验证[5] 。TDI、TCK 和TMS 信号的同步通过嵌入式处理器的时钟信号和寄存器来完成,TDO 的缓冲区可以防止总线竞争,TDI、TCK 和TMS 的缓冲区在调试的时候还可以用来读回寄存器的值。图中的与门通过R/W 信号来控制执行读或写操作,而AS 和DS 信号则可以在另一个级别上对电路进行选择和去选择。
        (责任编辑:fqj)

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分