长期以来,总是有不同级别的工程师在使用Blackfin开发产品时遇到这样的问题:在VDSP或CCES下调试dxe,一切都正常,但是烧写ldr脱机运行时,程序甚至连启动都不能启动。作为技术应用工程师,我深感与其每次逐个解答客户的疑问,不如让客户掌握一种调试方法,更高效地解决问题。下面就分别以BF518和BF609为例,简单介绍一下这种调试ldr的方法,其它Blackfin的调试方法类似。
• Visual DSP++下的调试
1. 为了方便调试,修改你的程序,在0XFFA0 0000这个位置加一句jump.s 0。生成新的ldr并下载到flash或其它存储设备。 2. 配置Halt Only的平台。 a. 打开Visual DSP++,选择Disconnect from Target,然后在菜单上选择session->New Session… b. 点击configurator
c. 双击你所用的芯片 d. 在Platform Properties窗口里,双击Devices List里的器件。 e. 在新弹出的Device Properties窗口里,选择halt(或者do not disturb) f. 选择OK,保存刚刚的设置。
3. 关闭Visual DSP++,把烧好ldr的目标板连接上JTAG,上电。 4. 建立新session。 a. 回到session wizard(点击New Session出现的窗口),选中你要用的芯片,点击Next,选则相应的连接类型(Select Connection Type),点击Next,这时的Select Platform窗口会出现你刚刚配置的平台。选中该平台,然后依次点击Next和Finish建立连接。
5. 通常,系统无法正常BOOT,当Visual DSP++连接到目标板挂起程序时,程序已经出错。我们通过程序是否停在jump.s 0来判断BOOT过程是否完成。如果BOOT完成,系统在这里循环等待Visual DSP++接管控制权。刚连接session时,会执行一个仿真器中断程序,在0xEFxx xxxx处,按F5或者点击RUN之后,如果程序没有执行到0xFFA0 0000,说明Boot过程出错,则需要查看SDRAM是否配置正确,Boot模式选择是否正确,如果这两者都正确,则可能需要用示波器观察启动器件的时序进一步分析。如果正常BOOT,程序会在0xFFA0 0000等待。你可以在寄存器窗口里修改PC的值到下一条指令的位置,这样,你就可以单步跟踪以后的执行情况了。 6. BF51x,BF52x,BF54x这几个系列的Blackfin支持Lockbox技术,能够严格地保护客户的代码安全。不过,它们对启动也有特殊的要求:即使你不用Lockbox技术,即不需要用到OTP,也必须给OTP供电,否则芯片将无法正常BOOT。
• CCES下的调试
CCES下对“halt only”这类session的定义和Visual DSP++很不一样。 1. 为了方便调试,可以在芯片L1 code的起始地址加一句jump.s 0,生成新的ldr并下载到flash或其它存储设备。 2. 用仿真器连接已经烧写好ldr的板子和装有CCES的电脑,和VDSP的调试一样,在连接之前,板子和仿真器都不要上电。连接之后给二者上电。 3. 打开CCES,打开你要调试的工程所在的workspace,右键点击该工程,选择“debug as”里的debug configurations。 4. 在debug configurations窗口里,session列,program(s) to load栏目下,点击并加载你要调试的工程,比如这里的vat_real_time_adsp_bf609 Debug。也可以点击右侧Edit按钮修改已选session的配置。
5. 弹出窗口如下图所示,在option里,选择load symbol only,则第四个选项自动变灰,不能选择;一定不要选择reset core before load。 6. 按OK保存你的设置。回到父窗口,点击Debug即可开始调试。 7. 用在VDSP下同样的方法进行跟踪调试。
具体可见此文档:链接: https://pan.baidu.com/s/1eNLijwFGdU6WEinpuIFsXw 密码: 126s
|