ARM入门.docx
《ARM入门.docx》由会员分享,可在线阅读,更多相关《ARM入门.docx(14页珍藏版)》请在冰豆网上搜索。
ARM入门
一首先说说ARM的发展
可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。
广义的嵌入式无非几种:
传统的什么51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式微处理器;DSP;FPGA。
客观的讲,工作需求量上DSP的需求比ARM要多,而ARM和FPGA差不多。
DSP因为数字处理与通信领域的空前发展而火暴,小到MP3射象头,大到我们军品里的控制器,应用面很广。
FPGA的兄弟一般做ANSIC(特殊芯片设计,好象是这么翻译的)。
而ARM单纯说来并不比一个单片机强多少,但是它的独特就在于不断下降的价格和提升的性能。
这完全依靠于ARM公司的战略,厉害!
!
很佩服他们的战略眼光!
!
值得注意的是:
在找工作中,企业(著名的,小的不算)对单纯的ARM硬件开发工程师并不比单片机重视,很少有大企业的职位里写“从事过ARM开发优先”。
写的多的是什么?
“嵌入式LINUX”到这相信大家看出来了吧,需要的是硬件中的软件。
二ARM是硬件还是软件
很难说,ARM是硬件,LINUX是软件。
ARM的硬件多半已经模块化了,像我这样把板子改成这样的就算动的多的了,这同样是ARM公司的战略,再次佩服。
实际中的LINUX的开发工作更多,更耗时。
从这方面说ARM应该算是软件了。
在找工作中更是这样,举个例子,联想里和ARM最接近的是“BIOS工程师”是软件,MOTO里接近的是嵌入式LINUX工程师是软件。
而其他很多公司把嵌入式产品开发归为硬件。
所以,不要讨论这个,好好玩转自己的板子才是关键。
实在不爽你就把自己叫“嵌入式开发工程师”
三要不要买开发板买哪家
我的答案是“在你个人的学习方法”,但是如果看家是需要看这骗笔记的水平,个人推荐还是买现成的。
1买
买板子可以把注意力集中在软件开发上,软件开发(尤其是驱动)可以不必担心自己硬件上的问题,我就是以便调试一边写驱动和程序,每次写驱动前就要先确认硬件没问题。
另外,买板子更省钱和时间,我自己做的板子,原理图PCB花了2周以上!
制版又15天,回来以后焊接44B0160个脚!
那叫一个麻烦~~花了多少钱呢?
2层板,制版费就300块!
当然我把接口都外引了,还做了个20X18的LCD背板,板子比较大。
总体下来元件+LCD屏+PCB=11XX块!
够2410的了。
再有就是买的资料相对来说比较全,但是不要指望有技术支持!
都是骗人的,卖你之后就不会理你。
2做
自己做可以更了解底层硬件,可以按照自己的要求加东西,比如我就加了GPS模块、GPRS模块、SD卡模块,扩了个IIC的35个键子的键盘、把LCD接口按照买的LCD改装了,可以用FPC线直接连接。
做的很爽的。
玩一把吗。
当然,你可以有策略的做,比如像我一样,把RAM和ROM,网络都保持和某现成的板子一样,这样他们的资料你就可以拿过来直接用,给自己留个退路。
其他的如SD了什么的自己做。
都达到了~~就是费钱,费时间。
再有就是给做的朋友几点建议:
尽量拿到现成的板子,尽量多搜集其他板子的全套资料,一定要拿到一张没问题的原理图。
网上流传的原理图多数是龚俊03年画的,再这里对龚俊表达一下我的敬意!
!
牛人!
但是那个图有个小BUG,我指的是03版的,后来的没这问题了。
8019那地址线和地址有问题。
还有人仿照他的PDF图画的SCH,更是漏洞百出!
谴责!
顺便谴责把龚俊板子偷卖的人。
3买哪家
个人感觉分3类吧
1)首先是ZLG的,资料非常的全,感觉他是真正想教你怎么开发ARM,而不是像有的公司自己技术都没做好就做个板子出来卖钱。
但是最大的不利就是价格太贵!
而且主要是PHILIP的,货源比较麻烦~~可能有人说21XX系列的不贵啊,那是总线不外扩的,只能跑UCOS,不能跑UCLINUX。
但是说是话,21XX系列才是ARM7的价格性能结合点。
ARM7最适合做工业控制,ARM普及,销量都是怎么来的?
都是ARM7来的,而44B0是典型的商业片子。
但是,这里如果你看中的是为工作做准备,还是选能跑UCLINUX的吧。
但是仍然作为第一个推荐,因为菜鸟时期,合适的资料太重要了!
!
在这里被ZLG的务实精神感动!
你看人家那代码写的。
2)感觉立宇泰的44B0不错
硬件没别的,就是资料比较全的说,不像有些家,原理图直接拿人家的,还错的~~
3)找个最便宜的
好象最便宜的有卖350的吧?
也是没别的,就是即省了钱还省时间搜集资料,至于资料全不全,别计较了~~硬件肯定好使就行吧。
四要不要有51AVR等单片机基础
有更好,但没有也无所谓。
两个月以前,我只是看别人做,耳濡目染~~,本科学过单片机,从来没做过。
我们这的技术主干做AVR和51,我就跟他们调过C语言程序。
你看出来了?
我是个不折不扣的菜鸟吧?
但是做这个之前我特意找了ZLG的两本书,看了里面的例子和原理图,这很重要。
例程里有汇编有C,都看懂了就OK,不用自己现写
五开发都需要学习哪些软件
总结起来最主要的有以下几个吧
1ADS调试用
确切的说是ADS+AXD。
ADS里包含AXD。
原来都用SDT后来ARM公司停止对SDT支持了,改支持ADS了,还是用ADS吧。
有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。
ADS是编译器,AXD是调试器。
便宜成AXF以后再在ARM的RAM里调试。
2PLASHPGM
FLASH烧写的软件。
AXD在RAM里调试,掉电就没有了,方便程序修改。
调试好的程序再下到FLASH里,上电直接运行。
同类的软件还有很多,什么FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人还问FLASH不支持BIN格式文件的问题就要看我写的PLASHPGM使用了。
3BANYANT调试代理(不知道名对不,起这么个难记的,我一般都叫它“半羊”因为知道它那几天刚吃了烤羊)
调试代理就是用它帮你使用更简单的JTAG(便宜啊)来实现原本1K才卖的JTAG仿真器的大部分功能。
JTAG调试原理看我另一篇笔记。
简单的就可以把他理解为你自己做的JTAG的驱动就行了。
调试代理还有很多种,什么H-JTAG了、ARM7了(不知道具体叫什么,就记得可执行文件叫ARM7.EXE)都是,BANYANT比较好。
需要注意的是,没种调试代理安装方法虽然都简单但都不一样,需要看说明。
而且AXD调试之前都要运行。
省钱了,就别怕麻烦了。
4ARM-ELF-TOOLS工具链
里面是UCLINUX开发用的工具比如ARM-ELF-GCC只类的。
工具链就是把很多工具打包在一起发布的方便你开发的东西。
具体安装方法看我另一篇笔记。
另外如果你开发LINUX就要用ARM-LINUX-TOOLS,不一样,不通用。
5U-BOOT
大名鼎鼎的BOOTLOADER生成工具,同类的好象还有VIVI(名字很暧昧~~)
生成的BOOTLOADER烧到FLASH里,然后就可以用BOOTLOADER下载烧写其他了
有了BOOTLOADER才能下UCLINUX。
BOOTLOADER就像电脑上的BIOS。
当然UCOS的不用这个,用什么我不知道:
)
最新版本是1.1.4具体使用方法看我另一篇笔记吧。
6UCLINUX包
UCLINUX的源码包,不用多说了吧?
建议大家用现成的先体会一下,然后再自己编译,裁剪。
因为单独UCLINUX的编辑技术上比较简单,但涉及的方面还是比较广的。
7VMWARE
老牌的虚拟机软件,在一个机器上虚拟出一个机器装LINUX(PC上用的),省得你来回开关机了。
记得装VMWARE-TOOLS,安装方法在我另一篇笔记里。
六有哪些书推荐
主要推荐ZLG的三本书,有这3本再加网络就不用别的书了,其中主要推荐前2本,3是介绍体系结构的,也不错
1ARM嵌入式LINUX系统构建与驱动开发,北航版
驱动写的很详细,前期开发介绍也很好
2ARM嵌入式系统实验教程
(二),北航版
有ZLG2200的原理图,实验程序和注释,了解人家是怎么开发的。
3ARM嵌入式系统基础教程
最重要的是体系结构,汇编部分介绍,看看吧,增加理论素质。
444B0数据手册
写在这里是强调它的重要。
不推荐ZLG早期出的红色皮的ARM什么体系结构~只类的
写的太多,看烦了。
其他的书没了几本,没看见好的,大家有看过的推荐吧。
七选UCOS?
UCLINUX?
LINUX?
VXWORKS?
还是当单片机用
1搞开发,工程设计,用UCOS,小巧,多进程,简单,体现了ARM7的精髓。
2LINUX正根的嵌入式系统,LINUX消费与通信领域用的比较多,但缺点是必须ARM9才能跑,ARM9的板子自己做就不行了,6层板太贵。
买开发板1K达底吧。
但是还是推荐选ARM9+LINUX
3UCLINUX算投机嵌入式系统:
)ARM7上可以跑,由有LINUX近亲,学好好可以比较方便的转向LINUX,像我一样的穷鬼用吧,呵呵
4VXWORKS
学好后可以找到高薪工作,但工作机会本身并不比LINUX好找。
5当单片机用
不推荐,虽然我景仰的ZLG一直号召这么干。
因为对于学习来说多进程的系统设计才是ARM7的玩头,至少你也要整个UCOS啊:
)
有朋友问我先学这个当基础不行吗?
那当然可以~~但我当时就用了1周搞定,就是我先的ADS在RAM中调试的笔记。
后来我清空FLASH用的小段程序还是当时写的LED闪烁程序呢。
另外1周里其中还因为自己过于菜,没把OM设置好导致晶阵不阵
哈哈。
这个是必须做的,但一带而过。
目标放的远一点。
八学习要用多长时间
我从菜鸟到现在两个多月,中间被打扰数次。
仍然搞定了PCB设计与制版,RAM调试,FLASH下载,UBOOT移植和下载UCLINUX(没剪裁,用现成的),LCD驱动。
再次坦诚的说:
我确实比较菜,说这些不是让大家羡慕,只是告诉你们“你们应该比这个更好”
我相信良好的态度+合适的方*+及时的总结=成绩
九ARM都玩什么
就几点
1硬件设计
2系统移植
3驱动开发
4应用开发
没了。
其中推荐把注意力放在后两个上,3有难度,4比较灵活,最重要的是都是找工作的砝码。
十我用的什么板子
很多人问我这个问题,我特意写过一个的。
再说一次吧。
我是自己做的,RAM、ROM、8019等比较麻烦而当时的自己不理解的都按照龚俊的做的。
保持其他不便的情况下做了如下改动。
1加了串口通信的GPS模块、GPRS模块
一个UART0,一个UART1,当与要用超级终端时用跳线切换。
2SD卡,和7843触摸屏
同时挂在SPI总线上,因为SPI只能挂一个设备,同时还做了I/O模拟的准备,把两个设备又通过跳线挂在4个IO上。
3扩了个IIC的35个键子的键盘
用的ZLG的7290,不占用CPU,最大支持64个键子,只上了35个,其他留接口。
4把LCD接口按照买的LCD改装了,可以用FPC线直接连接。
所以改动虽然多,但真正很移植了,初期调试有关的并没动,就是为了现在不那么菜的时候做准备:
)
十一开发流程
这里是我的开发流程
1设计原理图(含WIGGLER的JTAG访真器)
2设计PCB(含WIGGLER的JTAG访真器)
3制版
4焊接电压,确定电压没问题
5焊接44B0+JTAG电路+WIGGLER的JTAG访真器+周边电路,用BANYANT+仿真器连接,BANYANT提示错误,但可以显示44B0编号,好象是0X0F0F0F0F只类的,说明44B0没问题
6焊接晶体+RAM+ROM+周边电路,用BANYANT+仿真器连接,可以显示正确的44B0了
7用BANYANT+仿真器连接,开AXD,在命令行窗口操作RAM,看可不可以修改,可以的话(用内存窗口看RAM地址)RAM就没问题
可以用这个命令“setmem0xc000000,0xffffffff,32”
我的RAM挂在BANK6上所以地址是0XC000000,你要是改了就也得改。
8用我写的《自己写了个C工程模板又写了个使用说明》里的方*调试程序吧,写个简单的,我当时写个LED闪烁的。
看好使不。
9把程序按照《FLASH烧写总结》里的烧到FLASH里,测试一下
10按照《UBOOT移植操作》移植UBOOT
11按照《UCLINUX下载简单说明》下个UCLINUX
12看看驱动开发的方*,自己写个驱动看看
13还有很多事东西着你玩呵呵
十二关于JTAG访真器
JTAG访真器现在用的多是简板的,一个244那种,用的没什么不好。
按照并口定义不同分几种,建议选WIFFLER定义的,因为支持的软件多。
这个网上多的是,不多说了。
值得提的是有的JTAG访真器原理图上有跳线用来使能复位信号,这个一般不跳上。
就是不用复位信号,因为JTAG协议里本身也可以控制44B0复位。
当然,板子上的复位信号跳线也不用跳。
十三哪个公司的ARM
这个是问题比较简单。
1ARM7主要就几个公司的
三星,PHILIP,ATMEL的
ATMEL的有比较便宜的AT91SAM7S32和AT91SAM7S64专为8位应用产品量身定做,价格很便宜好象《3刀吧。
和PHILIP的21XX差不多,资料太少,项目中选还不错。
其他两家上面说了的不多说了吧
2ARM9
这个玩2410和2440的多吧,现在2440还比较火啊可以考虑买个了
但是2410就比较便宜了,作为学习来说反到和不错,推荐整一个:
)
其实ARM9用的最多的领域应该是消费电子,比如手机PDA,而这上面用的多的应该是INTEL的和TI的吧。
但是INTEL的TI的入门材料少,价格高,自己看情况定吧。
这个这个是讲
是做什么的:
十一开发流程
这里是我的开发流程
1设计原理图(含WIGGLER的JTAG访真器)
2设计PCB(含WIGGLER的JTAG访真器)
3制版
4焊接电压,确定电压没问题
5焊接44B0+JTAG电路+WIGGLER的JTAG访真器+周边电路,用BANYANT+仿真器连接,BANYANT提示错误,但可以显示44B0编号,好象是0X0F0F0F0F只类的,说明44B0没问题
6焊接晶体+RAM+ROM+周边电路,用BANYANT+仿真器连接,可以显示正确的44B0了
7用BANYANT+仿真器连接,开AXD,在命令行窗口操作RAM,看可不可以修改,可以的话(用内存窗口看RAM地址)RAM就没问题
可以用这个命令“setmem0xc000000,0xffffffff,32”
我的RAM挂在BANK6上所以地址是0XC000000,你要是改了就也得改。
8用我写的《自己写了个C工程模板又写了个使用说明》里的方*调试程序吧,写个简单的,我当时写个LED闪烁的。
看好使不。
9把程序按照《FLASH烧写总结》里的烧到FLASH里,测试一下
10按照《UBOOT移植操作》移植UBOOT
11按照《UCLINUX下载简单说明》下个UCLINUX
12看看驱动开发的方*,自己写个驱动看看
13还有很多事东西着你玩呵呵
谨献给为了知识执着的嵌入式初学者,欢迎高手补充讨论
实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生
也未必有条件。
所以我想学习嵌入式要从个人的知识背景和现实条件出发。
订立合适的
阶段目标,在允许的条件下多动手多思考。
一般情况下对于硬件设备是比较短缺的。
但是可以从软件方面和嵌入式系统开发模式上
下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在了
解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux下的C,比如
ucos(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。
wince,palmos上
手都很容易。
无论对于初学者还是自以为是高手的人来说,编程水平(这可不受硬件条
件限制)绝对是没有止境的,有了较高的编程水平(嵌入式主要是C,当然OO的几种语言
c++,java是发展趋势),等到有机会的时候及时的补充硬件知识,会很快的成为高手。
还有,一定记住,学习嵌入式,”要想办法,不要找理由“。
当年在dos下用tc编程时的
条件,现在回想起来建筑就是奇迹。
我推荐一条发展道路吧,仅供参考,
1、C开发经验
条件:
linux(这都有吧)
方法:
随便,主要是掌握ansiC编程(不包括gtk,qt等图形可视化开发)
2、网络、操作系统、体系结构
条件:
linux,各种书,算法、例程。
方法:
通过C编程实现简单的网络等知识的算法和过程。
3、嵌入式系统概念
条件:
各个嵌入式网站,讨论组,书籍
方法:
少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题
),多思考。
4、嵌入式开发实践
条件:
各种嵌入式系统开发工具的demo版(或者D版,如果有的话),包括编译器,仿真
器。
可以找高手们要,也可以下载。
方法:
这里有两个分支,一个是基于mcu/dsp的嵌入式系统开发,一个是象palmos,winc
e,ucos等rtos下的应用软件开发。
对硬件感兴趣,想成为真正高手的由第一个分支入手
,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二
个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问
题,可以不用进行下面的步骤了,感兴趣可以参考第6条。
5、硬件开发
条件:
各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。
方法:
这时候该有开发条件了,最起码是51系列,这个比较方便。
电路的设计内容较多
,不过看起来吓人,实际上比软件要简单的多。
只要下功夫,实践会告诉你一切。
6、硬件工程/软件工程/项目管理
条件:
各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目
参与经验
方法:
已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。
那个下一步。
。
。
,你该是管理者了。
抛砖引玉,以上出自我的经验,欢迎各路高手们补充,初学者提问。
为了技术,一路狂奔。
。
。
-TANGO发表于2002-6-918:
12嵌入式系统←返回版面
我来补充几点.
要想成为高手中的高手,最好从钻研如下领域修炼:
1,分析一种RTOS的源代码--UCOS最容易;
2,分析一种通讯协议栈的实现方式--TCP/IP最实用;
3,精通一种DSP的开发集成环境--TICCS2.1最优秀,精华在其内带的RTOS;
4,精通一种单片机的开发集成环境--keilC最经典;
5,精通一种MCU的开发集成环境--ADS1.2最流行;
要想成为大师级人物再从如下领域开始修炼:
1,精通一种系统建模语言和工具--TelelogictauSDL/UMLsuit最经典;
2,精通一种算法仿真工具--Matlabsimulink最便宜;
要想检验一下自己是否到达了至尊级人物,可以做如下的事:
动手搭建一套红外或者蓝牙通讯原型系统,模拟前端可以用现成的,基带用DSP,主控用
个32BMCU,DSP和协议软件自己写。
当然不可能做全,做个子集就可以了。
如果能到这个地步,打住吧,该改行去做市场了。
做个一、二年市场,你不自己去创个
业就太浪费了。
ARM起步----在ARM2014开发板上运行第一个ARM程序
万事起头难!
本文是一个ARM初学者的心得体会。
谈谈本人运行的第一个ARM程序:
在周立功的EasyARM2014开
发板上点亮一个LED灯。
第一步,下载ADS1.2。
购买EasyARM2014开发板时,满以为买回即可使用,其实不然。
在把程序下载到开发
板的FLASH之前,先要产生一个IMAGE文件,或者是.hex文件。
这两个文件需要开发
工具来生成。
在随板购买的“ARM微控制器基础与实践”一书中,使用了ADS开发环
境来生成下载文件。
该软件可以从下面的地址下载:
下载的是一个.iso文件,必须把它烧到光盘上(或虚拟光盘)上才能使用。
打开Easy
CDCreator,从File菜单中选RecordCDfromCDimage项,将其烧录到CD中。
注意
不能直接按Record键,该键录下的依然是.iso文件。
录完之后,CD中就显示出ADS的
全部文件,点击setup就可以开始安装。
注意阅读盘中文件安装license。
第二步,在ADS上运转第一个简单程序。
学习ADS的入门材料很多,比如周立功的书,还有“一步一步基于ADS1.2进行设计开
发”等等。
前者虽然讲了ADS的原理,但并没有给出一个用ADS开发一个具体程序的
例子;后者虽有一个例子,但是该例子假设开发板中已有一个bootloader.bin程序。
所以这些材料对初学者都不够方便。
对初学者而言,最好有一个简单的例子,能够
直接在ADS上转一遍。
我发现,学习ADS最好的方法是阅读ADS自带的帮助文件和例子。
帮助文件可以通过
ADS菜单中的OnlineBooks阅读,也可以在ADS目录中的PDF子目录中找到;还可以在
ARM的网站上找到:
在“ADS1.2:
AssemblerGuide”中有几个很简单的汇编例子。
另外
“ADS1.2:
GettingStarted”通过一个例子,一步步地教你怎样使用ADS的CodeWarriar编
译环境,在“ADS1.2:
AXDandarmsdDebuggersGuide”中一步步教你怎样使用
调试环境。
这几份手册ADS入门的捷径。
第三步。
硬件连接。
要把程序下载到开发版,有两种方法。
一种是通过JTAG接口,另一种是通过ISP接口。
这里介绍后一种方法,因为它比较简单。
首先,把PC机的串口接到开发板的UART0接
口。
然后,把JP1跳线接上,最后插上电源。
硬件联结完成。
然后启动软件LPC210XISP,这是开发板光盘中的软件。
用于ISP方式下载程序。
启动之后把Device选项置为LPC2104,然后按ReadDeviceID键,验证硬件连结是否
成功。
一般而言,按键后会跳出一个信息窗口,显示“PleaseresetyourLPC210x
boardnowandthenpressOK”,此时按开发板上的reset键,然后按“确定”按
钮。
如果显示“ReadPartIDSuccessful!
”,就说明连接成功。
第四步。
在开发板上用ISP方式装入并运转第一个程序。
ADS手册中介绍的例子并不适合于装入开发板中运行。
有的例子太简单,没有输出操
作,有的例子太复杂,使用printf输出。
更重要的是,这些例子中并没有说明怎样
编制启动代码。
周立功的书上有不少例子,而且讲