首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM开发调试教程[转帖]

ARM开发调试教程[转帖]

作者:李希岗


说明:本文是我学习ARM开发以来的一些经验总结,以自己设计的S3C44B0X板为例,给出我调试开发ARM开发板的一些最基础知识。我只是在自己的开发板调试过并且经验有限,有


些知识只能做为参考,不一定准确,就算给大家一个“例程”吧,如果大家有不同意见,希望多多指正!


硬件篇


(一) 开发板的整体架构
我设计的开发板是在三星44B0 demo板的基础上,参考网络上相关的资料,加入我的思想开发的。
 


(二) 开发板的焊接
贴片式元器件的拆卸、焊接宜选用200~280℃调温式尖头烙铁。


贴片式电阻器、电容器的基片大多采用陶瓷材料制作,这种材料受碰撞易破裂,因此在拆卸、焊接时应掌握控温、预热、轻触等技巧。


控温是指焊接温度应控制在200~250℃左右。


预热指将待焊接的元件先放在100℃左右的环境里预热1~2分钟,防止元件突然受热膨胀损坏。


轻触是指操作时烙铁头应先对印制板的焊点或导带加热,尽量不要碰到元件。


另外还要控制每次焊接时间在3秒钟左右,焊接完毕后让电路板在常温下自然冷却。
以上方法和技巧同样适用于贴片式晶体二、三极管的焊接。


贴片式集成电路的引脚数量多、间距窄、硬度小,如果焊接温度不当,极易造成引脚焊锡短路、虚焊或印制线路铜箔脱离印制板等故障。拆卸贴片式集成电路时,可将调温烙铁温


度调至260℃左右,用烙铁头配合吸锡器将集成电路引脚焊锡全部吸除后,用尖嘴镊子轻轻插入集成电路底部,一边用烙铁加热,一边用镊子逐个轻轻提起集成电路引脚,使集成电


路引脚逐渐与印制板脱离。用镊子提起集成电路时一定要随烙铁加热的部位同步进行,防止操之过急将线路板损坏。


换入新集成电路前要将原集成电路留下的焊锡全部清除,保证焊盘的平整清洁。然后将待焊集成电路引脚用细砂纸打磨清洁,均匀搪锡,再将待焊集成电路脚位对准印制板相应焊


点,焊接时用手轻压在集成电路表面,防止集成电路移动,另一只手操作电烙铁蘸适量焊锡将集成电路四角的引脚与线路板焊接固定后,再次检查确认集成电路型号与方向,正确


后正式焊接,将烙铁温度调节在250℃左右,一只手持烙铁给集成电路引脚加热,另一只手将焊锡丝送往加热引脚焊接,直至全部引脚加热焊接完毕,最后仔细检查和排除引脚短路


和虚焊,待焊点自然冷却后,用毛刷蘸无水酒精再次清洁线路板和焊点,防止遗留焊渣。


检修模块电路板故障前,宜先用毛刷蘸无水酒精清理印制板,清除板上灰尘、焊渣等杂物,并观察原电路板是否存在虚焊或焊渣短路等现象,以及早发现故障点,节省检修时间。


一点点建议:建议您先焊接一些主要的器件,比如说S3C44B0﹑SST39VF160﹑HY57V641620﹑JTAG﹑复位电路﹑电源部分,这样您焊接好后,就可以进行FLASH的直接烧写,确定


FLASH的功能是否正确。

51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
(三) 开发板电源调试
焊接过后的电路板,很可能存在短路﹑虚焊的情况,如果你此时直接通入电源的话,很可能造成主芯片的发热和烧毁,我已经出现这样的情况了,焊接好电路后,直接通入电源,

FLASH就开始发热,直到烫手…

此时一定不要轻举妄动,都花一点时间测试电源部分的正确。

比如测试S3C44B0的电源是否正确,包括+3.3V和+2.5V,如果不正确,立刻进行检测,看是否有错误的情况。应该接电源的脚分别如下:

接+3.3V的引脚:9脚﹑47脚﹑125脚
接+2.5V的引脚:138脚﹑109脚﹑62脚﹑34脚﹑21脚

如果测试完全正常,那么就要开始检测s3c44B0的电源地是否正确,正常情况下有如下引脚应该接地,如果没有接地的话,可以判断已经断路。应该接地的引脚如下:

应该接地的引脚:10脚﹑22脚﹑35脚﹑48脚﹑63脚﹑73脚﹑74脚﹑90脚﹑110脚﹑126脚﹑139脚﹑152脚

上述引脚有的并非地线,电路只有将该脚接地才可以工作。


(四) 开发板调试的第一步
呵呵,如果您的焊接方法没有问题,电源完全是好的,那么你就已经成功一半了。试通电一次,看电源指示灯是否亮了,电源只是灯亮度正常,那么你就已经成功了。如果你在调

试过程中,发现电源指示灯很暗的话,估计是某些电路是短路了,赶快拔掉电源,看一下是否某些芯片发热或者已经冒烟了…

记住:有几个跳线一定要跳的,就是JP5﹑JP6﹑JP7一定要短路,如果不短路的话,你的所有电源都没有。JP1不短路﹑JP2短路﹑JP3短路,他们分别对应OM0﹑OM1﹑OM1
JP8短接2—3。确定是S3C44B0工作方式big mode 和little mode。

好了,如果全部正常的话,直接用JTAG调试板,连接好JTAG部分,启动WIN98,进入我给你的光盘,找到简单应用程序的目录。里面有一个程序,是直接烧写S3C44B0的FLASH的。在

您烧写之前,查看JTAG连接是否正常,JTAG上的短路线是否已经短路,如果全部正常的话,直接进入烧写了。
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
在烧写之前有几个地方需要注意:

并口延长线分别连接PC机并行口和JTAG下载板,JTAG下载板通过扁平排线连接ARM板。
S3C44B0X有两个复位引脚,其中nRESET是CPU复位引脚,nTRST是JTAG单元复位引脚,一般的S3C44B0X系统都有一个跳线,用短路块将两个复位端连在一起,这样一按复位按键,两

个复位引脚都复位了。而JTAG下载板上面也有一个跳线,这个跳线是JTAG单元复位引脚。

在烧写Flash的时候,PC机会通过JTAG下载板上的那个跳线来复位ARM板的JTAG单元,所以应该用短路块将JTAG下载板上的跳线短路,而ARM板上的跳线(连接nRESET和nTRST)的则

不应该短路;

全部准备好了,现在可以烧写代码了!网上有一个叫Fluted.exe的程序,使用它就可以完成Flash烧写。这里面针对不同的CPU还需要不同的Bsd文件,不同的Flash芯片需要对Fcd文

件进行相应的修改。S3C44B0X的BSD文件S3C44B0X.bsd可以在三星公司网站找到,适用于SST39VF160的fcd文件在网上搜索得到。

特别说明:这个烧写Flash的程序只能在Windows98系统下才能运行!不支持Windows2000、WindowsNT和WindowsXP,所有你需要切换到Windows98下面才能进行这项工作!

对于我的板子,使用SST39VF160,需要的S3C44B0X.bsd、default.fcd和Fluted.exe,将自己的目标代码model.bin与上面的三个文件放在同一个目录下面,运行Fluted.exe就可以

进行Flash烧写了。

由于Fluted.exe要输入相应的配置参数,所以我干脆做了一个批处理文件f.bat:
FluteD a -f model.bin -v -s 0

这样运行这个批处理文件就可以开始烧写了,烧写界面如下:


如果你是自己设计ARM板,第一次烧写Flash,那么你可以检查一下系统:首先看看CPU的各种电压是否正常,可以看看系统时钟输入的波形,32768晶体的一个引脚上应该能看到

32768的正弦波。如果是刚焊新的Flash,那么一般Flash里面数据都是0Xff,用示波器可以看到数据线都是高电平,地址线上面有规则的方波信号。你一按复位按键,方波立马消失

变成低电平。

如果写入成功的话,WRITE &&VIRIFY成功的话,你已经成功了……
恭喜你了!!!

很可能由于电源高频干扰或者错误接地,或者SST39VF160两个地址线短路出现清除FLASH,能够写入FLASH,可是VERIFY出错的问题,我遇到的就是那个两个地址线短路的情况,结

果写入都正确,可是VERIFY时错误了,
错误信息如下:verify missed at 0x11111 orianglal :0x20 jtag:0x45
如果您在开发自己的开发板的时候也出现类似情况,我这里给你提示了,呵呵
成功已经离你不远了……
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
SDT软件篇 (软件部分可以参见本版的SDT使用教程;中电网嵌入式开发板注)
已经有了自己的平台,那么怎么样知道你的硬件是否真的好了呢?唯一的办法就是用SDT进行调试硬件,我们正式开始我的下一篇—SDT软件篇。

(一) SDT软件的安装
此处必须重新启动计算机,以使设置生效。

(二) 启动SDT2.51
安装完毕,点击程序组中的ARM Project Manager启动主程序

(三) 利用我提供的模板开始自己的项目
很多刚刚学习ARM的人往往会遇到这样一个问题:自己写了程序,编译也通过了,结果怎么也生成不了二进制格式的目标代码(*.bin)。如何生成目标代码需要参考SDT2.51安装文

件夹pdf中的userguide.pdf,在它的392页有详细说明,教你怎么Converting ARM linker ELF output to binary ROM formats。
为了给大家带来方便,在我提供的小应程序中,可以将他保存为一个模板,操作如下
打开我提供的小应用程序的工程,点击菜单File下的Save As Template:

然后在弹出的窗口中随意选择一个目录下,新建一个自己的文件夹,随便取一个Project名称,确认即可在主程序上出现新Project界面。现在可以在刚才建立的文件夹下面编辑代

码,包括汇编代码和C程序代码。注意汇编代码必不可少,它是用来进行系统初始化和C程序入口的,这些范例代码可以在三星网站去下载。


(四) 如何添加自己的源码
点击菜单Project下的Add File To Project……,在弹出的窗口中,浏览自己的Project文件夹下面的程序代码,将代码添加到创建的项目。这时依次点击rom、debug、Sources前

面的十字架,就会看到自己刚才添加成功的代码,双击任何一个代码文件就可以打开它进行编辑:

说明:SDT2.51好象有一个bug,当你直接双击一个代码文件时,可能会出现非法错误。我的机器就是这样。希望各位当编写代码时用uedit,这样比较方便。
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
(五) 生成可以在FLASH中运行的代码
编辑代码大家都会了,那么如何将自己写的代码放在FLASH中,并直接运行呢?看过S3C44B0 DATASHEET的人或者知道计算机启动过程的人都会知道,BIOS是一个什么东西,
那么对于S3C44B0的启动也无非如此。你生成的代码必须存放在0x00000000为开始的FLASH中,这样当S3C44B0复位的时候,从这里取指令执行。

那么如何设置呢?如下:

点击ENTRY AND BASE,接着会出现如下对话框:

(六) 生成可在FLASH中运行的目标码
现在选择菜单build或者点击快捷图标就可以编译代码,点击Force build之后就生成了二进制目标代码(*.bin),这可以在项目文件夹下面找到。在主程序窗口下面的信息框可以

看到编译的情况,包括警告和错误信息,最终代码生成的情况等等;
好了,生成了bin文件。下一步就可以进行写入FLASH里了。

(七) 写入可运行的目标码
激动人心的时刻就要到来了,如果你按照我的步骤一步一步走,离成功不远了!!
检测硬件是否正常(按照我上诉硬件篇中的步骤)。如果硬件准备就绪,写入目标码过程如下:

对于我的板子,使用SST39VF160,需要的S3C44B0X.bsd、default.fcd和Fluted.exe,将自己的目标代码model.bin与上面的三个文件放在同一个目录下面,运行Fluted.exe就可以

进行Flash烧写了。
由于Fluted.exe要输入相应的配置参数,所以我干脆做了一个批处理文件f.bat:
FluteD a -f model.bin -v -s 0
这样运行这个批处理文件就可以开始烧写了,烧写界面如下:


这个程序首先打开fcd文件和bin文件,然后检查设备ID,如果ID错误的话程序会停止运行。这意味着你的硬件系统有问题,或者JTAG接线有错误等等。然后开始擦除FLASH里面的数

据,根据Flash的大小擦除时间有长有短;擦除完毕就开始对Flash编程,将目标代码写进去。编程完毕开始校验,如果出错会给出提示信息的,告诉你在哪个地址区域出错,写进

去的数据是什么,读出来的数据又是什么,只有校验完全成功才是烧写OK!

一般朋友易犯的错误:
有些朋友将目标代码定位在0X0C000000,结果烧写后校验也完全成功了,但复位之后板子却没有任何反应!这是因为写到SDRAM之后校验肯定也是对的,但复位之后程序是从

0X00000000开始执行的,而不是从0X0C000000开始的,所有板子肯定没有反应了!
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
(八) 如何调试程序
各位朋友都知道,调试程序是在SDRAM中运行的,那么我们必须将自己编译好的程序放到SDRAM中,那么如何才能将程序放入SDRAM中呢?操作如下:

就我的板子而言,SDRAM的片选引脚接在nSCS0上面,它的地址从0X0C000000开始,所有要把目标程序定位在这里。
如前面所说步骤,先单击一下主程序窗口ROM下的Debug,然后点击菜单中的set,在弹出的窗口中选择点击Entry And Base,在Read-only下面的框里面输入0X0c000000(程序空间

),在Read-write下面的框里面输入0X0c5f0000(这是数据空间),确认即可:


按照上述步骤,设置SDT2.51,然后别忘了重新编译。会生成AXF文件,这个文件就是我们要调试的程序了。

(九) 调试之前需要知道的……
SDT2.51支持软件仿真和硬件debug,默认是软件仿真,这个很简单,大家一看就会。关键的是硬件debug,它支持串口、并口和以太网仿真,串口和并口我不知道怎么玩。
我的板子是通过并口JTAG进行硬件调试的,但实际上却是通过以太网的。这里面有一个转换软件——JTAG.exe,它把发送到以太网的数据拦截下来,遵从JTAG协议,转换到并口上

面,然后通过JTAG接口板,控制ARM板上面的CPU,进行硬件Debug。
JTAG.exe在王云飞的网页上面有下载,包括并口JTAG接口板的电路图,我就是照他的图纸做的板子。
需要说明一下:JTAG.exe只能在Win98下运行,Win2000下不行,所以如果你要进行硬件仿真的话,必须切换到Win98系统下面。这很不爽,哪位朋友找到能在Win2000下面跑的

JTAG.exe的话,麻烦告诉我一声!当然如果只是进行程序编写、编译、软件仿真,SDT2.51在Win98、Win2000和WinXP都没有问题的!
双击JTAG.exe,它就在后台运行了。

(十) 开始仿真了……

使用这种方式仿真,还要进行一些设置才行。点击Debug菜单或者快捷图标,出现ARM Debugger程序窗口


然后选择菜单Options下面的Config Debugger:

在Target Environment下面选择Remote_A,然后点击Configure:

选择Heartbeat,在Ethernet后面输入你的计算机IP地址并确认。这里面肯定要你机器上面装有网卡,而且IP地址要指定了,如果是自动分配IP的话,就不太方便了,每次都要查找

自己机子的IP。
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)

(十一) 装载目标码到板子…

如果是第一次设置Debugger,确认以后,系统就会自动装载代码到ARM板上,你也可以点击Reload图标重新转载代码。如果代码很大的话,时间会稍长一点,可能要几十秒,一般几

秒就搞定,出现如下窗口:



出现了上面的这个画面才说明你装载成功了,如果出现与此完全不同的东西,或者莫名其妙的代码,你就要检查硬件了!

现在按F8就可以单步仿真了,你可以看到绿色的图标一步一步向下走。

如果出现以下几种情况的处理方法:

1)如果程序一单步就跑飞,可能就是硬件问题了,检查时钟电路,电源滤波是否良好?
2)初学者建议时钟倍频不用太高,如果时钟输入是10MHz的话,二倍频将主频定在20MHz,这样调试起来可能麻烦少一点。大家都知道频率高了会出现很多意想不到的情况。

汇编程序走完,就要进入C代码了,下面是从汇编到C的入口:

按F8就进入C代码仿真了,界面如下:

(十二) 软件的其他使用方法我在这里不在说明,希望各位能够迅速建立自己学习ARM的信心…


后记
本文欢迎转载,但请注明出处,如果您愿意修改里面的内容,请您标注您修改的地方。并email回本人。对文章内容有任何疑问请Email联系本人,共同研究!

类似这样的文章我还会继续……,文章只是我与大家交流心得的一种体现,如果您对文章有所见解或者有所疑义,请您联系我并共同研究。

我的产品计划:根据网友的需求,我将尽量推出价位低功能全的开发板,并且会给各位朋友一个遐想的空间……

1) S3C44B0开发套件,比较完整的ARM解决方案,十分低廉的价格,提供硬件开发板,简单源程序,移植完整的uclinux操作系统,提供相关驱动(网卡驱动和LCD驱动)。

2) S3C4510开发套件,比较完整的ARM解决方案,十分低廉的价格,提供硬件开发板,简单源程序,移植完整的uclinux操作系统,提供相关驱动(网卡驱动和LCD驱动)。

3) DSP开发套件:比较完整的DSP解决方案,十分低廉的价格,提供硬件开发板,简单源程序,移植完整的ucosII的操作系统。

目前:S3C4510正在研发当中……

51的时代即将过去,ARM的时代就要到来,为了能够拥有最先进的技术,您还等什么?
和我一起,一起学习ARM开发吧!!
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
返回列表