SST89E/V5xRD2 SST89E/V554RC SST89E/V564RD SST89E516RD2 单片机 SoftICE 用户指南 1 介绍 SoftICE 的英文是 Software In Circuit Emulator, 翻译成中文是 在电路上的软件模拟, 它是 SST 公司为方便 SST 用户使用 SST89E/V5xRD2 SST89E516RD2 SST89V516RD2 SST89E/V554RC 和 SST89E/V564RD 单片机调试程序所开发的开发工具 本文主要是给 SoftICE 用户提供参考, 让用户一个系统连接和 SoftICE 特点的清楚认识 SST 软件和文件, 请访问 SST 网站 http://www.sst.com 如果大家在 SST 公司网站找不到 SoftICE 软件, 可以到本公司网站 http://www.kesaitech.com.cn 下载 最新的 KEIL 软件和文件, 请访问 KEIL 网页 http://www.keil.com 2 SoftICE 的特点 SST89E/V5xRD2 SST89x564RD SST89E516RD2 和 SST89V516RD2 的 SoftICE 通过 PC 机的一个 COM 串口与 KEIL uvision2 Debugger 通讯, 它可以实时地调试目标程序, 因此提供使用 SST89E/V5xRDx SST89E516RD2 SST89V516RD2 SST89x564RD 单片机的工程师简单 有效和容易使用在板上调试工具, 尽管小而紧凑,SoftICE 提供高级仿真器的大部分功能, 与 KEIL uvision2 Debugger 在一起,SoftICE 提供以下特性 : 下载 INTEL HEX 文件 源代码调试, 支持汇编语言和 C51 高级语言 disassemble the code area into 8051 mnemonics 在线汇编 STEP STEP OVER 设置 / 清除断点 ( 做多到 10 个固定和 1 个临时断点 ) 运行到断点 / 光标处 读 / 写数据存储器 读 / 写代码存储器 读 / 写 SFR 特殊功能寄存器 读 / 写 PORT 端口 SST MCU 产品特有的 IAP 功能 (In Application Programming - 应用中再编程 ) 软件重启动 3 需要的目标硬件 SST89E/V5xRDx SST89E516RD2 SST89V516RD2 和 SST89E/V564RD 的 SoftICE 要求有下列的硬件 : (1) 串口, 用 TIMER2 做波特率发生器 (2) 8BYTE stack 空间 (3) SoftICE 程序占用 5Kbyte 程序空间
对 SST89E/V54RDx: BLOCK1 的 4Kbyte, 从 E000h 到 EFFFFh BLOCK0 的 1Kbyte, 从 3C00h 到 3FFFh 对 SST89E/V58RDx: BLOCK1 的 4Kbyte, 从 E000h 到 EFFFh BLOCK0 的 2Kbyte, 从 7C00h 到 7FFFh 对 SST89E/V564RD: BLOCK1 的 4Kbyte, 从 0000h 到 0FFFh BLOCK0 的 1Kbyte, 从 FC00h 到 FFFFh 对 SST89E/V516RD2: BLOCK1 的 4Kbyte, 从 0000h 到 0FFFh BLOCK0 的 1Kbyte, 从 FC00h 到 FFFFh 其它的硬件部件可以由用户的应用程序使用 SoftICE 和 KEIL uvision2 Debugger 的典型连接如图 1, 要确认单片机是工作在内部模式, #EA(pin31) 接高 图 1 硬件连接 4 安装 SoftICE 4.1 通过 SST Boot-Strap Loader 下载 SoftICE 固件可以在 SST Boot-Strap Loader 直接下载到 MCU 中 在内部模式下探测到器件的型号后,SfftICE 固件通过按 SoftICE 菜单下 Download SoftICE 下载,SST Boot-Strap Loader 根据检测到的器件下载对应 SoftICE 需要注意的是, 一旦 SoftICE 固件下传到 MCU, 在 BLOCK1 的 SST Boot-Strap Loader 会被 SoftICE 固件代替 想详细了解如何使用 SST Boot-Strap Loader, 请参考相关的用户向导
4.2 在编程器上安装 SoftICE SoftICE 固件可以通过编程器烧录到 MCU 中 对 SST89E/V54RDx: 装载 SoftICE54RD2.hex, 不要编程 SC0(Prog-SC0) 或 SC1(Prog-SC1) 位, 从而使 RESET 后 MCU 启动去执行 SoftICE 对 SST89E/V58RDx: 装载 SoftICE58RD2.hex, 不要编程 SC0(Prog-SC0) 或 SC1(Prog-SC1) 位, 从而使 RESET 后 MCU 启动去执行 SoftICE 对 SST89E/V554RC: 装载 SoftICE554RC.hex, 不要编程 SC0(Prog-SC0) 或 SC1(Prog-SC1) 位, 从而使 RESET 后 MCU 启动去执行 SoftICE 对 SST89E/V564RD: 装载 SoftICE564.hex 到 BLOCK1, 不要编程 Prog-SC0( 有些编程器是 SC0)bit, 从而使 RESET 后 MCU 启动去执行 SoftICE SST89E516RD2 和 89V516RD2 的使用和 SST89E564RD 一样 SoftICE 固件装载到 MCU, 并且安装 KEIL 软件后, 把目标板和 PC 相连, 如图 1 当上电和复位,SoftICE 准备和 KEIL 软件通讯, 调试用户程序 注意的是, 如果 KEIL 软件是演示版, 用户的代码不能超过 2K 5 如何使用 SoftICE 步骤一 生成 PROJECT 和编辑用户程序 如何生成一个 PROJECT 和编辑用户程序, 请参考 uvision 的详细资料 选择一个 SST MCU( 如 SST89E54RD,SST89E58RD,SST89E/V564RD 等 ) 做目标器件
步骤二 : 配置 从 KEIL 用户界面选择 Options for Target Target1, 在 Options for Target target1 窗口 Debug 栏中, 选择 Use Keil Monitor-51 Driver, 注意当每次 RESET 目标板时用户的代码区会被擦除,
如果用户程序需要在开始时下装到目标板, 要勾上 Load Application at Startup 点击 Setting 项, 弹出 Target Setup 窗口进行配置, 选择目标板与 PC 通讯的串行接口 (COM1-COM4) 和波特率, 如果需要显示存储器的实时窗口, 不要选择 Cache Options 注意如果选择了 Serial Interrupt 去 Stop Porgram Execution,SoftICE 将修改在位置 c: 0023h 的中断向量 3 个 BYTE, 请确保用户程序没有占用这些地址 以上的设定可以在程序调试过程再次修改 步骤 3 开始调试从 DEBUG 菜单点击 Start/Stop Debug Session 开始调试过程 要知道更多如何使用 KEIL uvision 调试器 Debugger, 请参考 KEIL 的说明 小窍门 : 调试 SST 单片机特有的 IAP(In Application Programming) 功能 读 / 写 SST 特有的特殊功能寄存器 SFR 要显示 SST 特有的特殊功能寄存器 SFR, 只需要在 Watch Window 窗口输入特殊功能寄存器的名称,Watch Window 窗口在 VIEW 菜单的点击 Watch & Call Stack Window 来激活, 激活后就显示出 SST 特殊功能寄存器的当前值 SST 特殊功能寄存器 SFR 可以在 View 菜单下 Output Window 中进行修改 注 : 用户程序中要正确地定义 SST 的特殊功能寄存器
监视 IAP 程序为了看到在 BLOCK0 的 IAP 程序对 BLOCK0 的 FLASH 存储器的作用, 点击 View 菜单的 Memory Window, 打开 Memory Window 窗口, 输入 IAP 的目标地址, 结果马上在 Memory Window 显示
注 : 请确保 Cache Options 没有打开做实时显示 ( 请看目标板设定的步骤 2) 于 SST89E/V564RD, 用 C:( 或 B0:) 来显示在 BLOCK0 的代码空间,B1: 用来显示在 对 BLOCK1 的代码空间 而可以执行 IAP 的代码空间是从 B1:1000h 开始 对于 SST89E/V554RC 或 SST89E/V5xRDx,C: 和 B0/B1: 都显示代码空间, 而 B0: 或 C: 0000h C:7FFFh 可以显示 BLOCK0 的代码空间,B1: 或 C:0E000h C:0FFFFh 可以显示在 BLOCK1 的代码空间 而可以执行 IAP 的代码空间是从 B1:1000h 开始或 C:0F000h 6 从 SoftICE 返回 BSL ( 即 IAP) 的方法仿真 / 调试差不多以后, 需要把程序下载到单片机里面 SST 提供一个方法, 可以无缝地从 SoftICE 转回 BSL 的在线下载程序 在 Keil 的在线仿真状态下在 Ouput Windows 的 Command 项中输入 "include D:\Convert_to_BSLx564.txt" 再按回车, 等待窗口中出现 \'g\', 此时已返回到 BSL 的在线下载状态 命令 include D:\Convert_to_BSLx564.txt 是找 D 盘下的 Convert_to_BSLx564.txt 文件, 这是对应 SST89E/V564RD,SST89E/V554RC 的是 Convert_to_BSLx554.txt,SST89E/V5xRD 有对应文件, 这些文件在 SoftICE 的压缩软件包找到 7 SoftICE 用户代码的限制
(1) KEIL MON51 DLL 不能支持以下的 KEIL debugger 特性 :Memory Map/Performance analyzer/call stack analyzer/code coverage 并且不支持 TRACE 功能, 因为它需要使用大量的存储器 (2) 不支持 SST 特有的看门狗和软件复位功能 (3) 用户代码的限制 :SST89C58, 从 0000h-6FFFh,SST89C54 从 0000h-2FFFh,SST89E/V564RD 从 0000h-FBFFh (4) 如果一个标记 LABLE( 跳转的目标 ) 在一个单字节指令后面, 那断点不能设在该单字节指令上 (5) 在 GO 命令中,TIMER2 只能做定时器 / 记数器,GO 命令执行后,TR2(T2CON.2, 启动 TIME2) 只能设为 1, 并在到达断点前被清除 (6) 当选择 Stop Program Execution with Serial Interrupt 后,SoftICE 会修改在 0023h 中断向量的 3 个字节, 用户程序要确保没有使用这些地址,PC 和 MCU 连续的握手的信号会使在 GO 指令时程序运行变慢 而在 GO 命令中,TIMER2 也不能当成一个定时器 / 记数器 (7) 用户不能从主程序 STEP 到中断服务子程序, 如果是需要 ISR, 用户可以在 ISR 开始位置设一个断点, 然后再 STEP 余下的代码