实现MAXQ2000微控制器的JTAG加载主机

[09-13 17:04:13]   来源:http://www.88dzw.com  控制技术   阅读:8661

文章摘要:识别JTAG从机控制器启动加载程序启动并运行后,下一步是识别从机MAXQ微控制器。命令集0的命令0Dh (获得ID信息)返回一个长度可变的ASCII字符串(以零结束),确定器件和程序ROM版本。作为演示的一部分,我们的实例程序获得该信息,然后打印输出至串口。用于实现该功能的例程是getBanner。 ;==;=;= getBanner;= waitForPrompt;= shiftDR;= clock0, clock1, shift;=;= Executes command 0Dh to retrieve the ROM (device ID) b

实现MAXQ2000微控制器的JTAG加载主机,标签:计算机控制技术,工厂电气控制技术,http://www.88dzw.com

识别JTAG从机控制器

启动加载程序启动并运行后,下一步是识别从机MAXQ微控制器。命令集0的命令0Dh (获得ID信息)返回一个长度可变的ASCII字符串(以零结束),确定器件和程序ROM版本。

作为演示的一部分,我们的实例程序获得该信息,然后打印输出至串口。用于实现该功能的例程是getBanner。
;==============================================================================
;=
;=  getBanner
;=     waitForPrompt
;=        shiftDR
;=           clock0, clock1, shift
;=
;=  Executes command 0Dh to retrieve the ROM (device ID) banner and prints
;=  the banner text out over the serial port.
;=
;=  Inputs   : None
;=  Outputs  : C - Set on JTAG communication error
;=  Destroys : AP, APC, Acc, PSW, LC[0]
;=

getBanner:
   call    waitForPrompt
   jump    C, getBanner_fail

   move    Acc, #CMD_GET_ROM_BANNER
   call    shiftDR
   move    Acc, #00h
   call    shiftDR

getBanner_loop:
   move    Acc, #00h
   call    shiftDR
   cmp     #0FFh             ; The banner is ASCII, so receiving this character
                             ; most likely indicates that the JTAG lines are
                             ; floating high and that no device is connected
   jump    E, getBanner_fail
   jump    Z, getBanner_done
   call    txChar
   jump    getBanner_loop

getBanner_done:
   call    txNewline
   jump    getBanner_pass

getBanner_fail:
   move    C, #1 
   ret
getBanner_pass:
   move    C, #0
   ret

擦除程序存储器

在对MAXQ2000包含的闪存程序存储器进行编程之前,必须擦除它(设置为0FFFFh)。JTAG演示应用程序发送02h (主机擦除)启动加载程序命令,指示启动加载程序擦除所有的程序和数据存储器,从而擦除闪存。该命令还清除了密码锁定位,使能所有支持的命令集。

取决于MAXQ器件,这一02h (主机擦除)命令可能需要几秒钟的时间来完成。由于这是一个单字节命令,确定该命令什么时候完成的最简单方法是不断发送无操作(00h)命令,其后是1毫秒的延迟,直到启动加载程序返回3Eh,表明命令已经完成。下面的 masterErase例程说明了这一方法。
;==============================================================================
;=
;=  masterErase
;=
;=  Executes command 02h (Master Erase) to clear all program and data memory.
;=
;=  Inputs   : None
;=  Outputs  : C - Set on JTAG communication error
;=  Destroys : Acc, PSW, LC[0], LC[1]
;=

masterErase:
   call    waitForPrompt
   jump    C, masterErase_fail

   move    Acc, #CMD_MASTER_ERASE
   call    shiftDR
   move    Acc, #00h
   call    shiftDR

   move    LC[1], #5000      ; Number of retries before returning an error
masterErase_loop:
   move    Acc, #CMD_NOP
   call    shiftDR
   cmp     #3Eh
   jump    E, masterErase_pass
   move    LC[0], #8000      ; Delay for about a millisecond
   djnz    LC[0], $
   djnz    LC[1], masterErase_loop

masterErase_pass:
   move    C, #0
   ret
masterErase_fail:
   move    C, #1
   ret

重新获得状态信息

MasterErase (或者任何其他启动加载程序命令)完成后,可利用04h (获得状态)命令来确定命令是否成功完成。获得状态命令返回两个数据字节:一个字节含有状态标志(说明密码锁定设置/解除设置、字/字节模式有效以及其他信息),第二个字节是单字节状态码。

如果最后一条命令成功完成,状态码总是00h (无错误)。非零状态码指示有错误。MAXQ2000用户指南附录(English only)列出了所有的状态码;这里列出了几个常见错误码。
  • 01h/02h—不支持命令集/无效命令。这些错误代码通常指示JTAG主机出现通信干扰或者校准错误。如果对于某一命令代码,JTAG主机发送的字节多于(或者少于)启动加载程序预期的字节,启动加载程序会把数据字节之一理解为新命令开始。
  • 03h—密码不匹配。这一错误代码通常指示JTAG主机在没有清除密码锁定之前,试图使用受到密码保护的命令(一般包括不在命令集0中的命令)。如果JTAG主机访问的部分已经有装入字节地址0010h – 001Fh的代码,则会出现这一错误。在这种情况下,这一部分必须被主机擦除,或者使用密码匹配命令(03h)来解锁这一部分。
  • 05h—验证失败。对于装入/验证或者验证命令,验证步骤失败。通信干扰会导致这一错误,或者对以前已经编程过的闪存没有擦除就进行重新编程也会出现这一错误。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]  下一页


Tag:控制技术计算机控制技术,工厂电气控制技术控制技术

《实现MAXQ2000微控制器的JTAG加载主机》相关文章