嵌入式整体框架——总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌⼊式整体框架——总结
嵌⼊式应该什么都要涉及的到,从最开始的51单⽚机,之后到⾼级⼀些的微控制器 ARM cortexM3 M4等,STM32最为典型,她的主要特点就是功耗低,性能还算好些,再信号处理领域⽐较强的就要选择TI的DSP了,这些都算是不能跑linux系统的,因为他们都不带MMU (内存管理单元),所以⼤部分都是裸机跑,或者任务多的时候,⽤⼀些实时操作系统,如UcosII uclinux MQX vxworks等等什么的,DSP 跑的是⾃⼰的操作系统内核,叫Bios,也是很强⼤的。
这些主频可以从⼏⼗Mhz到200M左右Mhz不等,如果再⾼点的话,那就要选
择,ARM7 ARM9 ARM11 MIPS POWERPC等等的,但是ARM7现在已经很少使⽤了。
⼤部分都是ARM, POWERPC的性能是⽐较强悍的,可能说是最强悍的,开发板也好贵,好⼏K,仿真器那更是如此。
但是耗能,MIPS可以说是位于两者之间。
从开始到现在,我设计到了不少的芯⽚,但是玩转的确实没有⼏个,从STM32F103 STM32F205 等东芝的cortexM3的还有飞思卡尔半导体K40 k60 基于cortexM4内核的,再到DSPF2812 c2000 系列的,DSP28335 之后到ARM9 三星的2440 之后到POWERPC
51单⽚机 keil51开发裸机程序
stm32 IAR KEIL4 4.6版本带ucosii系统和裸机的 jlink ulink都可以
dsp CCS5.5 ⾃带系统的Bios的仿真器⽤的是合众达的SEED XDS510 560等,前者⼀个1500左右或者5000多,伤不起
ARM9 ADS开发裸机程序⽤的 jlink
STM32这个因为ST公司芯⽚出来的时候有固话的bootloader ,还不能改,所有如果这个bootloader的所有启动过程,如果有你不满意的地⽅,你只能⾃⼰从新写⼀个新的⾃⼰的bootloader了
⽤于IAP编程,可以有⽹管系统⼀键下载,不⽤到线程,⽽ISP 只能短距离的,只能去现场了
我把STM32的0x08000000 到0x08005000 这段作为bootloader区,内部协议⽤Ik xmordem,其余的空间⽤作⽤户的应⽤程序,
ARM9 的bootloader⼀般分为vivi uboot等,vivi是三星芯⽚专⽤的,所有如果你的设备选的是三星的ARM 那么⽤vivi很好很强⼤,移植改起来也⽅便
uboot呢,⽐vivi复杂,但是功能强⼤,在移植在MIPS powerpc arm等,都能⽤
开发linux嵌⼊式产品⽐单⽚机难写,我理解的是这么个过程
1.先选择开发设备的所使⽤的硬件资源,芯⽚什么的都确定好,之后硬件⼯程师开始做板⼦
2,软件⼯程师开始搭交叉编译环境,arm 或者powerpc的等,看你什么芯⽚了
3,开始移植编译vivi或者uboot,简单,针对于不同芯⽚时钟,驱动都配置好,就可以了
4,之后把vivi通过H jtag 或者klink (ARM)把vivi烧写进去,ARM启动的时候分为norflash启动和nandflash启动
先选好,因为两者的内存映射是不⼀样的,⽤norflash启动的话,直接把norflash的地址和0x00000000映射在⼀起就ok了
因为norflash也是总线型的,直接发地址就能得到数据,但是nandFlash接⼝,不⼀样,还需要⼀定的算法,必须先给命令,之后给地址才能出数据,
因此,⼀般从nandflash启动的时候,要先把nandflash的前4k代码copy出来到bootram中去,之后把bootram的地址映射到0x00000000
所以这个要记住了
5.开始移植配置内核,
6内核版本选好,之后根据硬件设计的资源开始配置编译内核,第⼀次编译,错误多多,慢慢来吧没办法
7之后可以编译出来⼀个zimage内核镜像⽂件
8之后通过vivi ⽤串⼝或者⽹⼝把内核镜像⽂件也烧写到flash中去
9 之后是⽂件系统
10之后就是应⽤程序
驱动的话,差别还是蛮⼤的,单⽚机是直接和硬件打交道,要看懂芯⽚⼿册,⽽且好多东西是不可服⽤的,如果你要写can驱动,你的设备上有三个can⼝
那你就可能要写三个can的驱动,虽说这三个驱动,除了中断好,地址,IO⼝等不⼀样,其于的配置都差不多,但是你也要写三个,
linux的驱动就不会这样,他典型的架构,和设备驱动模型,给驱动的开发带来了很多的好处,并且只看法⼀个can驱动,其他的都能复⽤,对于linux驱动来说,⼤部分设备驱动
在买芯⽚的时候,如果是常见的芯⽚,linux内核⾥⾯都有的或者与之类似芯⽚的驱动,只需要简单的改改,移植就可以了,如果说linux内核没有这个类似芯⽚的驱动,那么⼚家也会有相应做好的了驱动,我们只要会修改就好了。
⽽单⽚机的驱动。
说⽩了就是配置寄存器,控制总线时序读懂datasheet,如果你能很好的⽤开发库来进⾏驱动开发,那更是事半功倍,寄存器就⿇烦些,但是能学到东西倒是真的
驱动有时候的问题,你的慢慢弄,就是配对了,但还不是不⾏,慢慢找吧,就是要耐得住寂寞,⽤⽰波器慢慢分析,
我觉的嵌⼊式有两⼤块是必须要学的,⼀个就是⽹络编程,⽏庸置疑,TCP IP协议栈,哪⾥都⽤,⼀定要重视
之后我觉的usb作为嵌⼊式的接⼝,也是很重要的,做usb驱动编程什么的,我觉的路不错
以上都是⾃⼰意淫,不对勿喷,学的不精,见谅,。