一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于jtag总线的DSP程序在线升级装置及方法与流程

2022-02-19 15:02:44 来源:中国专利 TAG:
一种基于jtag总线的dsp程序在线升级装置及方法
技术领域
:1.本发明属于嵌入式软件升级领域,具体涉及一种基于jtag总线的dsp程序在线升级装置及方法。
背景技术
::2.现有技术中针对tidsp程序的烧写,往往通过ti提供的集成开发环境(ide)和dsp仿真器进行。这种方式,首先需要针对具体的tidsp芯片在通用集成开发环境中进行程序开发,配置dsp芯片与外部flash连接的接口,编写该接口下针对dsp芯片外部flash芯片的烧写程序。将用户的应用程序通过ti公司提供hex6x工具转换为bin文件。最终通过仿真器将烧写程序加载至dsp上运行,借助集成开发环境读取bin文件,将bin文件烧写至flash。3.这种技术方案有诸多缺陷,首先这种方案不具有通用性,针对不同的dsp处理器需要开发不同的烧写程序。第二在将用户应用程序转换为烧写bin文件时,由于采用的hex6x为window的命令行程序,这种程序在window系统下常常被杀毒软件误认为病毒,导致生成bin文件异常。第三,通过hex6x生成最终烧写的bin文件需要编写脚本,通过脚本配置相关参数并调用hex6x生成最终的bin文件。这个过程对于新手不够友好,专业化要求较高。技术实现要素:4.本发明的目的在于克服上述不足,提供一种基于jtag总线的dsp程序在线升级装置及方法,通过上位机软件直接解析用户应用程序,读取文件中程序运行时所需数据和代码,将其转换为烧写所用的bin文件。上位机软件读取最终的bin文件,通过本发明中usb转jtag装置,将bin文件中的数据直接通过dsp芯片上jtag接口烧写至其外部emif接口所连接的flash上。5.为了达到上述目的,一种基于jtag总线的dsp程序在线升级方法,包括以下步骤:6.s1,解析用户应用程序对应的.out文件,生成烧写所用bin文件;7.s2,对dsp处理器上jtag接口进行复位;8.s3,根据dsp芯片对应的bsdl文件建立与边界扫描单元对应的缓存;9.s4,获取dsp各个管脚的当前状态,对边界扫描寄存器进行初始数据加载;10.s5,通过jtag接口控制dsp芯片的emif接口输出复位时序,对flash芯片进行复位;11.s6,通过jtag接口控制dsp芯片的emif接口输出片擦除时序,对flash进行片擦除;12.s7,通过jtag接口控制dsp芯片的emif接口输出编程时序,对flash进行编程;13.s8,读取用户应用程序.out文件转换后的bin文件,重复s7通过usb转jtag装置将bin文件中所有数据编程进flash,完成用户程序通过jtag装置的在线升级。14.s1的具体方法如下:15.解析.out文件各个section的信息,将section的alloc属性为y的section根据该section在elf文件中偏移,读出该section的有效数据和长度,将其写入bin文件中,完成烧写所用bin文件。16.s2中,对dsp处理器上jtag接口进行复位是操作驱动保持tms管脚输出高电平至少5个tck时钟周期。17.s3的具体方法如下:18.建立无符号char型数组,由于bsdl文件中所有跟emif接口相关的管脚在边界扫描链上全部标示为双向,因此通过边界扫描寄存器配置管脚对应的边界扫描单元方向。19.s4的具体方法如下:20.通过上位机软件控制jtag接口控制器状态机依次切换为run‑test/idle状态、dr‑scan状态、ir‑scan状态、capture‑ir状态和shift‑ir状态;21.在shift‑ir状态时,输入bsdl文件中sample指令的序列,各个管脚的状态在tck的上升沿装入边界扫描单元的寄存器中,切换到exit1‑ir状态;22.上位机软件控制jtag接口控制器状态机依次切换为update‑ir状态、run‑test/idle状态、dr‑scan状态、capture‑dr状态和shift‑dr状态;23.采集tdo引脚的当前值,存入bscan数组,在n 1周期时,n为边界扫描链长度,切换到exit1‑dr状态;24.上位机软件控制jtag接口控制器状态机切换为run‑test/idle状态。25.s5的具体方法如下:26.flash中任意地址写入0xf0;27.即通过上位机软件控制jtag接口控制器状态机依次切换为run‑test/idle状态、dr‑scan状态、ir‑scan状态、capture‑ir状态和shift‑ir状态;28.在shift‑ir状态时,输入bsdl文件中extest指令的序列,切换到exit1‑ir状态;29.上位机软件控制jtag接口控制器状态机依次切换为update‑ir状态、run‑test/idle状态、dr‑scan状态、capture‑dr状态和shift‑dr状态;30.配置bscan数组,使得dsp芯片emif接口的数据线能够输出0xf0对应的时序。输出bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期,在n 1周期时,n为边界扫描链长度,切换到exit1‑dr状态;31.上位机软件控制jtag接口控制器状态机依次切换为update‑dr状态和run‑test/idle状态。32.s6的具体方法如下:33.通过usb转jtag装置控制dsp的emif接口依次输出以下时序;34.向flash芯片0x555地址写入0xaa;35.向flash芯片0x2aa地址写入0x55;36.向flash芯片0x555地址写入0x80;37.向flash芯片0x555地址写入0xaa;38.向flash芯片0x2aa地址写入0x55;39.向flash芯片0x555地址写入0x10;40.读flash地址0,如果读取的数据bit7为1,则表示flash擦除成功,如果数据bit5为1,且数据bit7不为1,则表示flash擦除失败。41.s7的具体方法如下:42.通过usb转jtag装置控制dsp的emif接口依次输出以下时序;43.向flash芯片0x555地址写入0xaa;44.向flash芯片0x2aa地址写入0x55;45.向flash芯片0x555地址写入0xa0;46.向flash芯片地址写入数据;47.读取上一步写入数据flash的地址,如果读取的数据bit7与写入数据的bit7一致,则表示flash编程成功,如果读取的数据bit5为1,且数据bit7不为1,则表示flash擦除失败。48.一种基于jtag总线的dsp程序在线升级装置,包括控制芯片,控制芯片连接usb接口;49.上位机软件解析用户应用程序对应的.out文件,生成烧写所用bin文件;对dsp处理器上jtag接口进行复位;根据dsp芯片对应的bsdl文件建立与边界扫描单元对应的缓存;获取dsp各个管脚的当前状态,对边界扫描寄存器进行初始数据加载;对flash芯片进行复位;对flash进行片擦除;对flash进行编程,读取用户应用程序.out文件转换后的bin文件,重复s7通过usb转jtag装置将bin文件中所有数据编程进flash,完成用户程序通过jtag装置的在线升级。50.控制芯片采用ftdi公司的ft2232h芯片。51.与现有技术相比,本发明能够将dsp应用程序对应的.out文件直接转为bin文件,通过usb转jtag装置烧写,针对不同的dsp只需开发一种软件,即可完成不同dsp程序的烧写。即便对于采用不同bsdl文件的dsp芯片,或不同操作码的flash,均能够满足不同dsp芯片外接不同flash芯片的程序烧写要求。相比传统烧写方法,本发明不用维护针对dsp处理器及flash芯片选型不同的产品维护多份烧写代码,去除了传统方法中配置脚本生成bin文件,加载烧写程序烧写bin文件的复杂流程,简化了烧写过程,降低了烧写过程中出错的可能性。附图说明52.图1为本发明电路图;53.图2为elf文件格式示意图;54.图3为elf文件格式中elfheader数据结构及字段含义示意图;55.图4为elf文件中常见section信息示例图;56.图5为elf文件转bin文件流程图;57.图6为dsp与外部flash电路连接示意图;58.图7为tms320c6671芯片bsdl文件关键信息示意图;59.图8为jtag总线状态转换流程图;60.图9为jtag烧写bin文件流程图。具体实施方式61.下面结合附图对本发明做进一步说明。62.参见图1,该电路中主要采用ftdi公司的ft2232h芯片,该芯片是ftdi公司的第五代usb设备,该芯片能够完成usb接口协议到jtag协议的自动转换。pc机端上位机软件解析应用程序对应的.out文件,生成烧写所用bin文件;操作本发明中的jtag装置对dsp处理器上jtag接口进行复位;根据dsp芯片对应的bsdl文件建立与边界扫描单元对应的缓存;获取dsp各个管脚的当前状态,对边界扫描寄存器进行初始数据加载;对flash芯片进行复位;对flash进行片擦除;对flash进行编程,读取用户应用程序.out文件转换后的bin文件,重复s7通过usb转jtag装置将bin文件中所有数据编程进flash,完成用户程序通过jtag装置的在线升级。63.本发明的另一个方面,dsp程序在线烧写方法,包括如下步骤:64.解析用户应用程序对应的.out文件,生成烧写所用bin文件。out文件为elf格式,全称为theexecutableandlinkingformat。从使用上,elf文件的种类主要有三类:可执行文件,可重定位文件,共享目标文件。针对于本发明,我们只关注可执行文件,并且对于嵌入环境下的可执行文件,通常不具有可重定位性。文件中所带的代码与数据执行地址,即最终程序在嵌入式环境中运行时的程序代码和数据地址。65.elf文件的格式如图2所示:66.文件首部为elfheader的结构体,其具体结构如图3所示:67.该数据结构中主要描述了程序的入口地址,sectionheadertable的偏移以及文件中section的个数。这三个信息对于将可执行文件转换为烧写文件极为重要。本文我们主要关注这三个信息,这三个信息分别由elfheader结构体的e_entry,e_shoff,e_shnum三个字段指出。通过对elf文件首部的elfheader结构体进行解析,可以获得以上三个字段的信息。68.对于elf文件其主要由section组成。通常一个可执行程序必须包含执行所需的代码,执行所需的数据。更进一步,程序中的代码和数据根据其用途和属性:如只读,可读写,可写不可读等划分成不同的部分。这些部分即为elf文件中的section。elf文件中的sectionheadertable包含了elf文件内不同section的相关信息。69.一个典型的ti可执行程序的包含的seciton如图4所示,图中名为.text的section包含可执行文件运行所需的代码,名为.stack的section为用户程序运行所需的堆栈。实际使用中只需要将上图中alloc信息为y(表示该section需要分配空间)的段写入最终需要烧写至flash中的bin文件即可。这一过程可以概括为根据elf文件的sectionheadertable中解析各个section的信息,将section的alloc属性为y的section根据该section在elf文件中偏移,读出该section的有效数据和长度,将其写入bin文件中。70.dsp与外部flash通过emif的典型连接如图6所示,从图中可以看出通过dsp端的emif总线操作flash需要如下信号:dsp处理器emif地址线(dsp_emifa(23:0)),数据线(dsp_emifd(15:0)),dsp_emifce0(片选0,连接flash芯片的ce),dsp_emifwe(写信号,连接flash芯片we),dsp_emifoe(写信号,连接flash芯片oe)。71.为了在flash芯片上进行程序的固化升级,本发明通过jtag接口控制dsp处理器,在上述emif接口相关引脚上分别输出flash的复位,擦除,编程,读时序。以达到设计目的。具体步骤如下:72.启动软件,调用usb转jtag装置的驱动,对dsp处理器上jtag接口进行复位。即操作驱动保持tms管脚输出高电平至少5个tck时钟周期。73.根据dsp芯片对应的bsdl文件建立与边界扫描单元对应的缓存。为了表述方便,以下以tms320c6671芯片为例进行说明。但本发明不局限于tms320c6671芯片,通常一个系类的dsp芯片其bsdl文件往往一致,例如tms320c6671芯片的bsdl文件与tms320c6672,tms320c6674,tms320c6678等芯片bsdl文件一致。因此本发明适用于ti常见的所有dsp处理器外部flash上程序的升级。tms320c6671芯片的bsdl文件中跟本发明相关的信息如图7所示:74.图7为缩略图。只列出了本发明中所需的相关信息,个别如emif接口地址线和数据线相关信息并不完整,但其可以参照图7中列出的emif接口地址线和数据线有关信息。从图7可知:tms320c6671芯片的边界扫描链长度为625。因此在程序中建立长度为625,即625字节大小的无符号char型数组,命名为bscan[625].数组中每个字节表示边界扫描链上的一个边界扫描寄存器。图7中所有跟emif接口相关的管脚在边界扫描链上全部标示为bidir,即双向。其通过一个类型为bc_2的边界扫描寄存器配置管脚对应的边界扫描单元方向。根据图7中信息,以emifce0z信号为例:该信号为emif总线片选0信号,其在边界扫描链上的编号为395。通过图7中对应的边界扫描链上的394号边界扫描寄存器控制方向。当394号边界扫描寄存器配置为1时,对应emifce0z信号的395号边界扫描寄存器为输入寄存器,表示该寄存器的值由emifce0z引脚输入寄存器。当394号边界扫描寄存器配置为0时,表示emifce0z引脚的电平由395号边界扫描寄存器中的值决定。显然,对于dsp_emifa(23:0),dsp_emifce0,dsp_emifwe,dsp_emifoe这些引脚,需要将其边界扫描寄存器的方向设置为输出。dsp_emifd(15:0)引脚对应的边界扫描寄存器方向需要根据对flash芯片的操作来决定。具体来说,就是向flash进行写操作时,需要将dsp_emifd(15:0)引脚对应的边界扫描寄存器方向设置为输出。当对flash进行读操作时,需要将dsp_emifd(15:0)引脚对应的边界扫描寄存器方向设置为输入。[0075]获取dsp各个管脚的当前状态,在操作jtag之前对边界扫描寄存器进行初始数据加载。[0076]具体流程如下:[0077]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到run‑test/idle状态。jtag接口控制器状态机切换如图8所示。[0078]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到dr‑scan状态。[0079]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到ir‑scan状态。[0080]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到capture‑ir状态。[0081]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到shift‑ir状态。[0082]操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入其bsdl文件中sample指令的序列,011011b,该指令长度为6,需要6个tck引脚输出时钟的时钟周期。当jtag总线状态机在后续操作切换到capture‑dr状态时,该指令将各个管脚的状态在tck的上升沿装入边界扫描单元的寄存器中。在第6个tck引脚输出时钟的时钟周期,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑ir状态。[0083]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到update‑ir状态。[0084]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到run‑test/idle状态。[0085]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到dr‑scan状态。[0086]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到capture‑dr状态。[0087]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到shift‑dr状态。[0088]操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上依次输入低电平,每个电平持续一个jtag接口tck引脚输出时钟的时钟周期。同时采集tdo引脚的当前值,存入bscan数组。tms320c6671芯片的边界扫描链长度为625,因此为了边界扫描寄存器中的值读出,需要625个时钟周期。同在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。[0089]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到update‑dr状态。[0090]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到run‑test/idle状态。[0091]为了对flash进行编程,首先需要复位flash芯片。根据芯片手册,在flash中任意地址写入0xf0,即可完成对flash的复位。[0092]因此将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0.将bscan[387],bscan[319],bscan[317],bscan[315],bscan[313]全部设置为1。bscan[387]对应于边界扫描链上的emifoez,bscan[319],bscan[317],bscan[315],bscan[313]对应于边界扫描链上emifd(7:4).[0093]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到run‑test/idle状态。jtag接口控制器状态机切换如图8所示。[0094]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到dr‑scan状态。[0095]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到ir‑scan状态。[0096]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到capture‑ir状态。[0097]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到shift‑ir状态。[0098]操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入其bsdl文件中extest指令的序列,011000b,该指令长度为6,需要6个tck引脚输出时钟的时钟周期。该指令在shift‑dr状态时将边界扫描单元配置的值输出到芯片引脚上。在capture‑dr状态时,该指令将输入管脚的状态在tck的上升沿装入边界扫描单元的寄存器中。在第6个tck引脚输出时钟的时钟周期,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑ir状态。[0099]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到update‑ir状态。[0100]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到run‑test/idle状态。[0101]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到dr‑scan状态。[0102]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到capture‑dr状态。[0103]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到shift‑dr状态。[0104]操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此为了将bscan数组中的值输出到tms320c6671芯片内部的边界扫描链上,需要625个时钟周期。同在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。[0105]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到update‑dr状态。[0106]操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入低电平,持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切换到run‑test/idle状态。[0107]至此,完成了对flash芯片的复位。接下来对flash进行片擦除。为了擦除flash芯片,需要在按如下流程向flash芯片发送读写操作序列。[0108](1)向flash芯片0x555地址写入0xaa。[0109](2)向flash芯片0x2aa地址写入0x55.[0110](3)向flash芯片0x555地址写入0x80[0111](4)向flash芯片0x555地址写入0xaa[0112](5)向flash芯片0x2aa地址写入0x55.[0113](6)向flash芯片0x555地址写入0x10[0114](7)读flash地址0,如果读到的数据bit7为1,表示flash擦除成功,否则如果数据bit5为1,且数据bit7不为1,表示flash擦除失败。[0115]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,再将bscan[387],bscan[329],bscan[373],bscan[369],bscan[365],bscan[361],bscan[357],bscan[325],bscan[321],bscan[317],bscan[313]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态。在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片擦除序列中的向flash芯片0x555地址写入0xaa操作。[0116]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[375],bscan[371],bscan[367],bscan[363],bscan[359],bscan[327],bscan[323],bscan[319],bscan[315]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片擦除序列中的向flash芯片0x2aa地址写入0x55。[0117]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[329],bscan[373],bscan[369],bscan[365],bscan[361],bscan[357],bscan[313]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片擦除序列中的向flash芯片0x555地址写入0x80操作。[0118]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[329],bscan[373],bscan[369],bscan[365],bscan[361],bscan[357],bscan[325],bscan[321],bscan[317],bscan[313]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片擦除序列中的向flash芯片0x555地址写入0xaa操作。[0119]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[375],bscan[371],bscan[367],bscan[363],bscan[359],bscan[327],bscan[323],bscan[319],bscan[315]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片擦除序列中的向flash芯片0x2aa地址写入0x55。[0120]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[329],bscan[373],bscan[369],bscan[365],bscan[361],bscan[357],bscan[319]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片擦除序列中的向flash芯片0x555地址写入0x10操作。[0121]依据上述流程,首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[385],bscan[327],bscan[326],bscan[325],bscan[324],bscan[323],bscan[322],bscan[321],bscan[320],bscan[319],bscan[318],bscan[317],bscan[316],bscan[315],bscan[314],bscan[313],bscan[312],bscan[311],bscan[310],bscan[309],bscan[308],bscan[307],bscan[306],bscan[305],bscan[304],bscan[303],bscan[302],bscan[301],bscan[300],bscan[299],bscan[298],bscan[297]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。从而通过jtag向flash芯片输入读操作时序。由于读操作返回数据滞后于读操作的地址输出。因此再次将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[395],bscan[387],bscan[385]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在tdo引脚读入对应的高低电平值存入din0[625]数组。在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。数组中[0122]din0[327],din0[325],din0[323],din0[321],din0[319],din0[317],din0[315],din0[313],din0[311],din0[309],din0[307],din0[305],din0[303],din0[301],din0[299],din0[297]对应emifd(0:15).判断din0[313]是否为1,如果不是再次重复本步奏中的流程,读出数据记入din1.判断din1[317]是否为1,如果不为1,进一步判断din1[315]的值是为1,如果不为1。再次重复上述流程,直至din0[313]为1,或者din0[315]不为1。前者表示擦除成功,后者表示擦除失败。[0123]至此,完成了对flash芯片的擦写。接下来对flash进行编程。为了编程flash芯片,需要在按如下流程向flash芯片发送读写操作序列。[0124](1)向flash芯片0x555地址写入0xaa。[0125](2)向flash芯片0x2aa地址写入0x55。[0126](3)向flash芯片0x555地址写入0xa0。[0127](4)向flash芯片地址写入数据。[0128](5)读取上一步写入数据flash的地址,如果读到的数据bit7与写入数据的bit7一致,表示flash编程成功,否则如果数据bit5为1,且数据bit7不为1,表示flash擦除失败。[0129]依据上述流程第一步首先将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[329],bscan[373],bscan[369],bscan[365],bscan[361],bscan[357],bscan[325],bscan[321],bscan[317],bscan[313]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片编程序列中的向flash芯片0x555地址写入0xaa操作。[0130]依据上述流程,将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[375],bscan[371],bscan[367],bscan[363],bscan[359],bscan[327],bscan[323],bscan[319],bscan[315]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片编程序列中的向flash芯片0x2aa地址写入0x55。[0131]依据上述流程,将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[387],bscan[329],bscan[373],bscan[369],bscan[365],bscan[361],bscan[357],bscan[317],bscan[313]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成flash芯片编程序列中的向flash芯片0x555地址写入0xa0操作。[0132]读取用户应用程序.out文件转换后的bin文件,每两个字节组成一个16bit的数据。根据16bit的数据,设置emifd(0:15)对应的边界扫描单元数据于bscan数组中。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。至此完成向flash芯片地址写入数据。[0133]依据上述流程,将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[385],bscan[327],bscan[326],bscan[325],bscan[324],bscan[323],bscan[322],bscan[321],bscan[320],bscan[319],bscan[318],bscan[317],bscan[316],bscan[315],bscan[314],bscan[313],bscan[312],bscan[311],bscan[310],bscan[309],bscan[308],bscan[307],bscan[306],bscan[305],bscan[304],bscan[303],bscan[302],bscan[301],bscan[300],bscan[299],bscan[298],bscan[297]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。再次在tms320c6671芯片jtag接口的tms引脚上输入高,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到update‑dr,run‑test/idle状态。从而通过jtag向flash芯片输入读操作时序。由于读操作返回数据滞后于读操作的地址输出。因此再次将bscan数组中跟emif接口边界扫描寄存器对应的值设置为0,将bscan[395],bscan[387],bscan[385]设置为1。操作usb转jtag装置,在tms320c6671芯片jtag接口的tms引脚上输入高,低,低电平序列,序列中每个电平状态持续一个jtag接口tck引脚输出时钟的时钟周期。使tms320c6671端jtag接口内部控制器状态机切依次换到dr‑scan,capture‑dr,shift‑dr状态,在shift‑dr状态下,操作usb转jtag装置,在tms320c6671芯片jtag接口的tdi引脚上输入bscan数组对应的电平,每个数组值对应的输出电平持续一个jtag接口tck引脚输出时钟的时钟周期。tms320c6671芯片的边界扫描链长度为625,因此需要625个时钟周期将bscan数组对应的高低电平输出到tdi管脚。同时在tdo引脚读入对应的高低电平值存入din0[625]数组。在第626个周期时,在tms320c6671芯片jtag接口的tms引脚上输入高电平。使tms320c6671端jtag接口内部控制器状态机切换到exit1‑dr状态。数组中[0134]din0[327],din0[325],din0[323],din0[321],din0[319],din0[317],din0[315],din0[313],din0[311],din0[309],din0[307],din0[305],din0[303],din0[301],din0[299],din0[297]对应emifd(0:15).判断din0[313]是否为1,如果不是再次重复本步奏中的流程,读出数据记入din1.判断din1[317]是否为1,如果不为1,进一步判断din1[315]的值是否与第四步中写入数据的bit7一致,如果不一致。再次重复上述流程,直至din1[315]的值与第四步中写入数据的bit7一致。[0135]再次读取读取用户应用程序.out文件转换后的bin文件,重复flash的编程操作序列,将bin文件中所有数据编程进flash。完成用户程序通过jtag装置的在线升级。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献