新闻  |   论坛  |   博客  |   在线研讨会
ARM调试问题总结
xfjane | 2010-04-30 15:47:52    阅读:80533   发布文章

基于ADS的ARM调试有关问题总结
1. 
在添加文件的过程中你可能已经发现了CodeWarrior IDE 为用户建立了三个
Target,分别是“DebugRel”、“Realse”、“Debug”,这三个Target 分别表示三种
调试方式。
DebugRel 表示在生成目标的时候会为每一个源文件生成调试信息;Debug 表示为每一个源文件生成最完全的调试信息;Release 表示不生成任何调试信息。一般默认选择“DebugRel”。同时从图6 可以发现每次添加文件的时候都会询问添加到哪个“Target”,一般默认三个都添加,点击确定。

2. 
我在编译程序的时候出现了这样的错误,请问是什么问题啊   
Error       :   (Fatal)  
L6002U:   Could   not   open   file   D:\...\tmmgrsp\周力功\ARM嵌入式系统实验教程\FlashDown.mcp   
re:
别用中文名路径,换成英文的;
点击Project下的Remove   Object   Code..,然后在重新编译下就OK了。

3. 
刚买了一块2131开发板,不管怎样擦除都不能在AXD下仿真
错误显示:Error, FLASH is protected by user configation!
re:
1:请使用EasyJTAG V1.06的版本;
2:在JTAG配置中选中“当需要的时候擦除”。

4. 
在AXD中提示error 0x40001e00! FLASH Sector 0 write failed!
re:
1. 使用EasyJTAG写外部FLASH要注意,需使用16位总线方式,需要使用SST39VF106芯片.
2. 如果是自己做的板子,需要先在内部RAM调试通过,保证EasyJTAG与板子已经连通.
3. 如果有外部RAM,要先通过(测试)外部RAM来测试总线.

5. 
在AXD中提示RDI Warning 00254:Unimplemented RDI message.
re:
是JTAG的问题.可以先使用ISP操作试试就知道了,如果能 ISP,说明 LPC2104 没有损坏,还能正常运行程序
JTAG的nRST、TDI、TMS、RTCK等引脚注意要接上下拉电阻,以确保JTAG在上电时有一个稳定的初始状态,具体参看ARM公司给出的JTAG参考电路。
对于有的PC 机,EasyJTAG 不能正确连接开发板,总是弹出错误对话框,这时可以检查并口连接是否可靠,检查并口上是否接有软件狗,或者重新给开发板上下电。另外,在PC 机的CMOS 设置里将并口模式设为SPP 模式,设置并口的资源为378H~37FH。

6. 
错误显示:No disassembly could be read at the requested address.
re:
1.有可能被加密了,请使用ISP软件(FlashMagic),看看能否对Flash进行擦除。
2.也可能芯片被烧坏。

7. 
错误显示:RDI Severe Error 00602: Can't halt target and make it enter DEBUG state.
re:
当在非GPIO模式下操作IOnDIR时,会出现JTAG调试中无法暂停的情况,并且AXD会弹出以下信息的窗口并被迫关闭:"RDI Severe Error 00602:Can't halt target and make it enter DEBUG state."简单翻译一下就是:“RDI严重错误00602: 无法暂停目标并使它进入调试状态。”当出现这种情况后,就要复位2131(或者重新上电),然后重新打开H-JTAG软件和AXD等。

8. 
SDT JTAG和Wiggler JTAG有什么区别?
re:
SDT JTAG和WIGGLER JTAG的区别只是在与并口的接法不一样。功能是一样的。你在OPENOCD里,应该能找到JTAG信号与并口的连接的定义,做相应的修改应该就可以了。

9. 
错误显示:RDI Severe Error 00616: Failed to access instruction register.
re:
1.可能是并口驱动能力不够强, 影响JTAG信号质量, 造成不稳定.
2.可能是你flash中的程序有问题,先往flash中烧一个能正常跑的程序,再试试看。

10. 
关于JTAG接口:
P1.20/TRACESYNC应该加上拉电阻以禁止TRACE功能。PINSEL2一定要在程序开始时初始化一下。
LPC2210  JTAG

  1,2/VDD3.3V  
P1.31/nTRST, input 3/nTRST, output EasyJTAG中有上拉电阻。
P1.28/TDI, input 5/TDI, output EasyJTAG中有上拉电阻。
P1.30/TMS, input 7/TMS,output EasyJTAG中有上拉电阻。
P1.29/TCK, input/output 9/TCK, input/output EasyJTAG中有上拉电阻。
P1.26/RTCK, input 11/RTCK, output P1.26外接下拉电阻。
P1.26有内部上拉电阻,故测量时该引脚会呈现高电平。但是在复位时,它的上拉电阻不起作用,只有外部的下拉电阻起作用,P1.26 = 0V, 所以上电后PINSEL2的D3~D0会是0x04(B0100),JTAG有效。
若将P1.26接到3.3V再复位,此时PINSEL2的D3~D0将会是0x00,JTAG无效。
P1.27/TDO, output 13/TDO, input EasyJTAG中有上拉电阻。
nRESET, input 15/nRST, output EasyJTAG中有上拉电阻。
  4,6,8,10,12,14,16,18,20/GND  
  17,19/NC  

11. 
错误显示:DBE Warning 00041: An unspecified Debug Toolbox call faied.
re:
1. 先使用ISP软件对板上的LPC2000系列芯片进行全片擦除。因为如果芯片加密了,则无法进行JTAG调试。
2. 检查并口线、JTAG仿真头的连接是否可靠。
3. 检查并口模式设置,并口上不要接其它硬件(如软件狗)。

12. 
错误显示:RDI Warning 00148: Can't set point.
re:
原因是仿真器在ROM中设置的断点数是有限的,且单步运行时内部还要占用断点。
解决方案:1.清除所有断点。
2.使用“Option->Config Processor”打开“Processor Properties-ARM7TDMI”窗口,点击Clear ALL即可。

13. 
错误显示:DBE Warning 00056: The statement into which was stepped is singular (i.e. it has no exit).
re:
表明CPU在死循环,检查你的RAM,总线配置等。

14. 
出现取数据中止
 re:
进入取数据中止和取指中止的根本原因在于,对非法地址进行访问(未分配给您使用的地址空间您不能访问,保留作它用的地址空间您不能访问)。常见的触发取数中止和取指中止的原因之一是利用指针操作缓存时越界了。
如果用了周的模板,请修改配置文件里的参数,周的模板默认都是该种芯片最小型号的,主要是修改RAM起始地址和RAM最高端的地址。
请查数据手册!
mem_a.scf   __RelInFlash
mem_b.scf   __DebugInRam
mem_c.scf  __DebugInFlash

15. 
出现Warring : L6329W: .\src\mem_b.scf Pattern *(RW) only matches removed unused sections.
re
连接警告的原因是你定义的全局变量并同时进行了初始化,但是这个全局变量在你的程序中并没有被使用!
并不是没有RW属性的段,一般程序都有堆“heap”,全局变量都在heap中,heap有一个明显的属性都是可读可写的。

16. 
出现Error : C2933E : type disagreement for 'rcvmcu'.
re
将A函数的实现,剪切到B函数实现的前面,就可以了.

17.
  SPI时序的设定主要由外接从机决定,应用时您可以按照从机要求的输入时序图,再对照书上的四种模式下的输出时序图来选择当前模式即可。如果从机是上升沿输入,下降沿输出,此时选CPHA = 1, CPOL = 1,如果从机是上升沿输出,下降沿输入的话则选CPHA = 0, CPOL = 1.
   当然SPI主机时序的选择还与从机是否在片选时,是否有数据输出有关。以上两个例子,均假设片选时没有数据输出。
    1、SPI是全双工的通讯方式,即发送数据的同时会接收到一帧数据;
    2、至于返回的数据的作用:当需要从机给主机发送数据时,该返回值就是从机需要发送的数据;
    3、SPI读取从机数据时,主机发送数据是因为SPI通讯时时钟由主机来提供,主机数据给从机提供时钟信号。
  SPI通信本来就要由主机来产生时钟,所以读取数据的时候也要由1138来产生时钟,要产生时钟就要发送数据,所以一般读取数据的时候1138就发送0xFF,处理器会自动把Rx线上的数据存到FIFO,而存储器知道是读取数据,不会理会1138发送的数据。 不过之前1138发送命令的时候虽然存储器没有往Rx发送数据,但是1138还是会认为上面是有效数据,会把Rx上的高电平当成0xFF放到接收FIFO,所以在接收数据前最好先把FIFO清空。

18.
出现Error : (Fatal)L6002U : Could not open file E:\TEST for ARM\recorder_arm\recorder_arm_Data\DebuInRAM\ObjectCode\Startup.o.
re:
点击Project下的Remove   Object   Code..,然后在重新编译下就OK了

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客