聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> ARM嵌入式初学常见问题

ARM嵌入式初学常见问题

时间:    下载该word文档
8.1 关于ARM内核问答 1. 问:哪款ARM支持浮点运算?ARM7难道不支持浮点数运算吗? 答:一般的ARM9芯片都带有硬件浮点运算。ARM7不支持硬件浮点运算,如果需要可以使用软件算法模拟实现。可在网上查找相关资源,简单地说,软件模拟就是转化为整数,再进行运算。 例如:3.6*4.2 = 36*42= 1512,结果再取余运算,1512/100 = 12剩下放大的小数,结果再取整,1512/100=15就是整数了,加一起就是15.12 2. 问:初学者一开始就必须掌握ARM体系结构与汇编指令? 答:未必!很多ARM初学者,一开始就抱着有关ARM体系结构的书籍开始苦读,更有甚者,在很多体内容上钻牛角尖,把大量时间花在了ARM汇编指令上,几个月下来,进展不大,虽然也能知道一些ARM的相关概念,但离真正的具体应用相差甚远,很多初学者会感觉到,ARM体系结构后,ARM的应用还是无从下手,一片茫然,有的甚至就因为这个原因,挡在了ARM嵌入式开发领域的大门外,从此放弃了ARM嵌入式开发的学习。当然,并不是主张用户不看ARM体系结构的相关书籍,关键在于怎么看、看到什么程度。根据经验,ARM学者对于ARM体系结构的相关知识只需做到“了解”这一程度就可以了,对于ARM的汇编指令完全可以不用记忆,只要能看懂就可以(目前大部分基于ARM的产品开发都采用C语言,汇编语言的使用机会大大减少,只有在操作系统移植以及某些特殊应用中才会用到部分汇编指令)。随着初学者对ARM更深入地学习,有关ARM体系结构与汇编指令的知识以后可能会反复出现 ,遇到时再有针对性的重点看,相信会取得比较好的效果。 3. 问:嵌入式处理器可分为哪几类? 答:以嵌入式系统概念为例,一般嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP(Digital Signal Processor。嵌入式微处理器就是和通用计算机的微处理器对应的CPU。在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可,这样可以满足嵌入式系统体积小和功耗低的要求。目前的嵌入式处理器主要包括:PowerPCMotorola 68000ARM系列等等。嵌入式微控制器又称为单片机,它将CPU、存储器(少量的RAMROM或两者都有和其它接口I/O封装在同一片集成电路里。常见的有HOLTEK MCU系列、Microchip MCU系列及8051等。嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。在数字滤波、FFT(Fast Fourier Transform、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。 4. 问:ARM单片机和哪种内核的单片机比较接近? 答:严格说,ARM不是单片机,是一个嵌入式的实时操作系统。ARMAdvanced RISC Machines是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。所以市场上像IntelIBM三星电子、NEC恩智浦和国半这样的大公司都有ARM系列,现在不存在什么ARM单片机和哪种内核的单片机比较接近的问题。而且由于厂家购买内核后会根据自己芯片应用方向的不同,自行添加不同的外挂功能模块,所以,同样内核的芯片其提供的功能是不同的。 5. 问:ARM7TDMI-SARM7TDMI有何区别? 答:ARM7TDMI-SARM7TDMI的可综合(synthesizable版本(软核。对应用工程师来说,除非芯片生产厂商对ARM7TDMI-S进行了裁减,否则ARM7TDMI-SARM7TDMI没有太大的区别,其编程模型与ARM7TDMI一致。 6. 问:LPC2104运行速度:
ARM7TDMI(-S能提供0.9MIPS/MHz的指令执行速度,LPC2104 cclk60MHZ时指令执行速度应为0.9*60=54MIPS,这样得到一条指令的执行速度大概为0.018us。可我用示波器观察计算得出一条指令的执行时间远远大于这个数值,大概为0.1us-0.8us(可能由于流水线的影响,指令执行时间的差别很大。这是什么原因? 答:这是一个在存储器带宽足够时的平均值。如果程序和数据均在片内RAM中,这样计算: 1.一般指令需1个主时钟时间; 2.每次跳转增加3个主时钟时间(也许是2个,需要确认 3.RAM中取一个操作数多增加一个主时钟时间,以此类推; 4.保存一个结果到RAM中多增加一个主时钟时间,以此类推; 5.访问片内外设,增加一个外设时钟时间。 注意伪指令ldr rn=x需要从RAM中取一个操作数。 Flash中如果MAM配置为最优,平均速度与在RAM中相差无几。 7. 问:LPC系列与S3C2410的启动的差异在哪? 答:S3C2410LPC系列的启动的差异在S3C2410中,加电启动后,0地址开始执行程序,(这个是ARM核的特性)那么可以将内部ROMFLASH中的内容映射到0地址,因此一般来Bootloader是要在这个地址上跑的。然而LPC系列板子有一定区别,它们自己在板子加电启动后首先运行自己的Bootblock,这个Bootblock是位于片内Flash尾部的程序,它被映射到0地址,这是一个厂商提供的程序,它可以根据需要在执行完成后再重新映射0地址到其他位置去,即进行重映射,那么如果我们重映射0地址到Flash开头,就可以像S3C2410那样跑我们的Bootloader了。关键原因是LPC采用了内存映射和重映射的机制,不同的映射可以将各自不同的中断向量(还有些文字池,共64字节映射到0地址。详细的内容可以参考如下文档,转载自: http://shellstudio.spaces.live.com/Blog/cns!E9A9BE440E1B00B6!163.entryLPC2200系列ARMBootloader设计对于ARM系统来说是很有用的,它可以使应用程序的设计和固化变得简单明了。如果你的应用程序被编译在RAM空间运行,也需要Bootloader把它从诸SD卡等存储介质加载到RAM并启动它。所以,除了不提供有关BIOS调用接口之外,Bootloader就相当于PCBOS。设计LPC2200系列ARMBootloader程序有其特殊性,这是因为该系列ARM64字节的异常向量可以灵活映射,不同于S3C44B0XARM。首先讲LPC2200系列ARM的异常向量映射是什么意思吧。一般情况下,没有MMUARM内核所使用的任何数据地址或指令地址都是实际的物理地址,也就是内核所能访问的4GB空间就是实际的物理空间。但是,如果有MMU的情况下,地址就要区分逻辑地址和物理地址了。此时,ARM内核使用的任何数据地址或指令地址都是逻辑地址,对它来说,4GB的逻辑空间就是它能访问的全部。但是实际上,内核所使用的逻辑地址被送往“存储器控制器”或“映射到内存的I/O模块”之前,会被MMU单元“偷梁换柱”,形成实际的物理地址再继续送到“存储器控制器”或“映射到内存的I/O模块”。有了MMU,实际很有限的RAM就可以虚拟出完整4GB空间,而且操作系统中每个进程也都各自拥有4GB空间,互不干扰!这是因为,通过合理的管理MMU,每个进程都有它自己的MMU页表等必备资源,操作系统作进程切换时会同时设置该进程的MMU配置。这样,相当于每个进程都独立拥有自己的MMU管理单元一样。LPC2200系列ARM没有强悍的MMU,但是它有简单的映射管理单元,这已经很不错了!我暂且叫该单元为LPC-MMU吧。对于LPC2200系列ARM处理器,LPC-MMU是极其简化的MMU1LPC-MMU只能映射642LPC-MMU映射起始理地址固定为4组,0x00000000,0x7FFFE000,0x40000000,0x800000003LPC-MMU所映射的逻辑地址只
0x00000000~0x0000003F;当芯片复位后,ARM内核的PC寄存器被复位成0,该值就是内核取指令所需的逻辑地址。复位后,LPC-MMU首先把逻辑地址0x00000000映射到物理地址0x7FFFE000,从而启动芯片内部固化的BootBlock代码。BootBlock代码再检查有关引脚的高低电平来决定将逻辑地址映射到物理地址0x00000000还是物理地址0x80000000从这里可以看出,当逻辑地址0x00000000映射到物理地址0x00000000相当于没有LPC-MMU单元!这就是说,如果你设计的Bootloader是从LPC2200系列ARM的内部FLASH启动的,那么就没有什么特殊性,和其他ARM一样就是了!如果你的Bootloader是从外部FLASH启动的(也就是物理地址0x80000000开始的空间)那么就需要我这里所说的内容了。你只要把异常向量代码和常量池(共64字节)写成如下形式即可!不过这样的话该Bootloader只能在0x80000000的地址启动了。此外,Bootloader需要把自己的RO段、RW段拷贝到RAM,并设ZI段。而这些代码都不在其编译时设置的空间运行,所以都需要使用相对当前PC寻址的指令来实现,有一定的技巧性。最后,Bootloader还需要把自己的PC以及返回地址LRBootloader ;//*******************************************************************;// 64字节的映射空间开始 ResetEntry ;//32字节异常向量 LDR PC, Reset_Addr ;//复位异常入口(进入SVR32模式 LDR PC, Undefined_Addr ;//未定义指令异常入口(进入UNDF32 LDR PC, SWI_Addr ;//(SVR32 LDR PC, Prefetch_Addr ;//预取中止异常入口(进入ABT32模式 LDR PC, DataAbort_Addr ;//数据中止异常入口(进入ABT32模式 DCD 0xb9205f80 ;//保留的矢量,对于LPC系列ARM的内部FLASH有特殊作用 LDR PC, [PC, #-0xff0] ;//中断异常入口(进入IRQ32模式 LDR PC, FIQ_Addr ;//快中断异常入口(进入FIQ32模式 ;//32字节常量池 Reset_Addr DCD 0x80000040 ;// 注意这里原来是Reset_Handler Undefined_Addr DCD Undefined_Handler SWI_Addr DCD SWI_Handler Prefetch_Addr DCD Prefetch_Handler DataAbort_Addr DCD DataAbort_Handler Reserve_Addr DCD 0 IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler ;//64 ; //*************************************************************************** ;// Reset_Handler ... ... ; //************************************************************************** * ;//启动代码结束 END 8. 问:ARM指令与Thumb指令的区别? 答:在ARM体系结构中,ARM指令集中的指令是32位的指令,其执行效率很高。对于存储系统数据总线为16位的应用系统,ARM体系提供了Thumb指令集。Thumb指令集是对ARM指令集的子集重新编码得到的,指令长度为16位。通常在处理器执行ARM程序时,称处理器处于ARM状态;当处理器执行Thumb程序时,称处理器处于Thumb状态。Thumb指令集并没有改变ARM体系底层的程序设计模型,只是在该模型上加上了一些限制条件。Thumb指令集中的数据处理指令的操作数仍然为32位,指令寻址地址也是32位的。 9. 问:ARM程序和Thumb程序混合使用的场合? 答:通常,Thumb程序比ARM程序更加紧凑,而且对于内存为8位或16位的系统,使用Thumb程序效率更高。但是,在下面一些场合下,程序必须运行在ARM状态,这时就需要混合使用ARMThumb程序。强调速度的场合,应该使用ARM程序;有些功能只能由ARM程序完成。如:使用或者禁止异常中断;当处理器进入异常中断处理程序时,程序状态切换到ARM状态,即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断程序返回前,程序再切换到ARM状态。ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,
然后再切换到Thumb状态,执行Thumb程序。 10. 问:ARM处理器运行模式有哪些? 答:ARM微处理器支持7种运行模式,分别为: 1)用户模式(usrARM处理器正常的程序执行状态; 2)快速中断模式(fiq:用于高速数据传输或通道管理; 3)外部中断模式(irq:用于通用的中断处理; 4)管理模式(svc:操作系统使用的保护模式; 5)数据访问终止模式(abt:当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护; 6)系统模式(sys:运行具有特权的操作系统任务; 7)未定义指令中止模式(und:当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 11. 问:LPC17xx系列最大工作速率是多少? 做为内核为ARM Cotrtex M3MCU,它具有三种总线:系统总线,I-code总线及D-code总线,我是否可以将I-code总线及D-code总线配置的比系统总线慢? 答:LPC17xx系列最大工作速率为100MHz;这三种总线须保持相同工作速率,不能单独置。 12. 问:当我用IAP对片内FLASH编程时出现FLASH损坏的情况,但ISP仍能正常工作,这是什么原因? 有些IAP命令需要用系统时钟频率做为参数,当我使用PLL时,这个频率参数该如何设置?LPC17xx系统中,哪个引脚是用于进入ISP(在线编程)模式? 答:IAP的复制RAMFLASH命令时需要系统时钟频率做为一个参数,要注意这个参数。如果这个参数不正确可能会造成FLASH损坏。如果应用中使用了PLL那么以这个PLL的输出做为参数,单位应为KHzLPC17xx系统中,引脚P2.10用于进入ISP模式。 13. 问:在LPC17xx上有多少引脚可用做外部中断? 有多少种复位类型?用软件复位芯片的最佳方法是哪种? 答:LPC17xx0端口,2端口及EXTINTx的所有引脚都可用做外部中断。另外,ARM Cortex-M3 NMINon-Maskable interrupt不可屏蔽中断)的输入口的可选功能也能用于中断连接。LPC17xx4种复位方式:RESET脚复位,看门狗复位,上电复位和掉电检测(Brown out Detect--BOD)复位。欲以软件方式复位芯片的话,需要用看门狗复位方式。 14. 问:LPC17xx可否能够经由以太网MACC将其从掉电状态唤醒? 答:以太网模块支持通过局域网唤醒的电源管理功能。主系统可以掉电,甚至包括部分以太网模块。以太网模块持续监听局域网上的数据包,当接收到特定形式的数据包并经过以太网模块识别出后,该数据包就可用于唤醒主系统。唤醒系统通过一个中断产生效果。当检测到一个唤醒事件后,寄存器IntStatusWakeupInt位被设置,从而触发产生一个中断,个中断可用于系统电源管理逻辑中以唤醒系统。在掉电状态,产生局域网唤醒的数据包用完即丢。 15. 问:GPIO引脚的触发速度是指的什么? 答:标准GPIO口的触发速度是系统时钟/14,如果主频为72MHz,那么触发速度约为5MHz快速 GPIO口的触发速度是系统时钟1/4,如果主频为72MHz,那么触发速度约为18MHz 8.2 有关嵌入式开发工具问答 16. 问:如何选择ARM的软件集成开发环境? 答:目前,流行的ARM软件集成开发环境有ADS1.2RVDSKeil uV3WINARMIAR等。对于51单片机应用开发工程师来说,Keil开发环境应该应用得比较熟练,若采用Keil uV3进行ARM软件开发,应该可以快速上手。但是,并不推荐ARM初学者选择Keil uV3进行ARM
软件开发,主要是基于以下2个原因: 1Keil uV3是第三方ARM软件集成开发环境,目前支持的ARM芯片种类还不多,所带的编译器也并不完善; 2)由于Keil uV3为了方便用户的开发,提供了现成的ARM启动文件,换句话说,它屏蔽ARM开发中的一个重要内容——启动代码的编写,而这一点对初学者来说应该是非常重要的内容。IAR目前国内应用的人还不多,相关资料也不是很多,也不推荐初学者使用。 ADS1.2集成开发环境是ARM公司推出的ARM核微控制器集成开发工具。它支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAG硬件仿真调试,支持汇编、CC++源程序;具有编译效率高、系统库功能强等特点;可以在Windows 98Windows 2000Windows XP以及RedHat Linux上运行。RealView开发套件(RVDS)是ARM公司继SDTADS1.2之后主推的新一代开发工具,RVDS 4.0标准版适用于所有的ARM7ARM9ARM10ARM11MP-CoreSCx00Cortex-M3Cortex-M1Cortex-R4FCortex-A8处理器,0810月新推出的RVDS 4.0专业版除了延伸支持到Cortex-A9以外,还具有独特的运行时优化功能、ARM向量化NEON编译器、ARM ProfilerARM超快速模块(ARM926EJ-SARM1136J(F-SARM1176JZ(F-SCortex-R4Cortex-A8和单核Cortex-A9WINARM(GCCARM是一个免费的开发工具。WinARM可以在http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/下载得到,里面除了包含C/C++编译器——GCC汇编、连接器——Binutils,调试器——GDB等工具,包括了通过GDB使用Wiggler JTAG的软件——OCDRemote。所以,所需要的工具都包括在了这个WinARM发行版中,就可以比较省心了,基于以上原因,推荐ARM初学者使用ADS1.2RVDS集成开发环境进行ARM开发。关于ADS1.2RVDS集成开发环境的使用,初学者可以参看相应集成开发环境自带的用户手册。 17. 问:C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。对于目前普遍使用的RISC架构的8MCU来说,其内部ROMRAMSTACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。 18. 问:单片机开发,一定要会C吗? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。对于目前普遍使用的RISC架构的8MCU来说,其内部ROMRAMSTACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,
使用C语言进行程序设计已成为软件开发的一个主流。C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。综上所述,C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。 19. 问:当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好? 答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有得烦了,到头来可能还不如用汇编来的快。 20. 问:RealView MDK调试有哪些技巧? 答:下面从Symbol窗口、逻辑分析仪和Watch窗口三个方面来介绍一下调试中的小技巧。 1Symbol窗口 Symbol窗口可以查看虚拟寄存器和外围特殊寄存器的名称、地址、类型。当我们想要在内存窗口中查看外围寄存器的值时。是不是需要去手册上查一下这个寄存器的地址呢。答案是――可以, 但有个更方便直接的方法,就是从Symbol窗口可以查到所有外围特殊寄存器的地址和类型。在调试时打开Symbol窗口的方法:单击MDK菜单View然后点击[img],在工程工作区左边即可看到该窗口。 2、逻辑分析仪 逻辑分析仪可跟踪全局变量、虚拟寄存器和外围特殊寄存器的值。1、我们可能需要I/O端口的数据寄存器某位的值在逻辑分析仪上显示出来。一种方法是在逻辑分析仪的Setup对话框里通过Mask来屏蔽那些不需要显示的位。还有一种更简单的方法,就是在寄存器名后面加上后缀“.位序”。比如A口有16个引脚。其对应的数据寄存器为PORTA16位)现在需要跟踪引脚7的值。则只需添加信号PORTA.7即可,系统会自动设置Mask值。实际上,任何跟踪的信号,只要是整型数据都能使用上面提供的方法。这对于位显示非常直观,简捷。2、当我们需要在逻辑分析仪中显示Symbol窗口中列出的虚拟寄存器和外围特殊寄存器的值时,没必要在Setup对话框中写出该信号的名称。只需将Symbol窗口的寄存器名直接拖到逻辑分析仪中即可。 3Watch窗口 Watch窗口可以查看程序中全局变量的值并实时更新。也可查看外围特殊寄存器和虚拟寄存器的值。我们可以在Watch窗口中按F2然后将变量名敲进去,回车就可看到该变量的值,但更方便的方法是可以直接将选中的该变量或寄存器名直接拖到Watch窗口中。 21. 问:在ADS中是否可以进行软件调试基于UCOS-II的程序? 答:ADS软件调试只能调试ARM的内核,不能调试外设。但是取消PLL锁定检测后,可以调试任务切换,最终到空闲任务上。开始移植时软件仿真是最好的工具。 22. 问:ARMulate软件是干什么的,2104不是用EasyJTAG.dll来仿真吗? 答:ARMulateARM公司提供的软件仿真调试代理,软件仿真只能仿真ARM核。 23. 问:如何生成32hex文件? 我在Release Setting->ARM fromELF->Output Format中设置为Intel 32bit HEX,可是好像没有生成hex件。 答:试试这种方法:Target-->Target Setting-->Post Link中选择"ARM fromELF"加上你上面设的应该不成问题。 24. 问:如何在ADS里面看任务执行的一些情况? 比如堆栈。 答:多任务环境下的堆栈,内存等信息需要调试软件的支持才可以实现。ucos下有一个统计功能的模块可以间接实现部分功能。 25. 问:向Flash烧数据时出现:exceeds flash limitation请予赐教! 答:要写入的Flash地址超过了范围。如果不是代码太大的问题,可以检查scf文件是否正确。
26. 问:WIN CE下在模拟器上面开发程序,和真实环境有区别么?需要注意一些什么? 答:模拟器的仿真度十分高,Windows Mobile 5的模拟器甚至可以支持ARM指令,所以基本不会 遇到兼容性的问题。但是对于一些需要连接外部设备的应用场景,比如前边说的无线网络,还 GPS设备等,就需要用到实际设备了。 8.3 有关MCU硬件设计问答 27. 问:如果我不使用LPC片内的ADVSSAVSSA(pllVDDA(1.8vVDDA(3.3v这几个可以悬空吗? 答:最好不要悬空,给一个确定的电平能提高系统的稳定性。 28. 问:MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,无法滤除。除了用layout、选择低辐射MCU的方法可以减少一些以外,还有什么别的方法? 答:在设计高频电路用电路板有许多注意事项,尤其是GHz等级的高频电路,要注意各电子组件pad与印刷pattern的长度对电路特性所造成的影响。最近几年高频电路与数字电路共享相同电路板,构成所谓的混载电路系统似乎有增加的趋势,类似如此的设计经常会造成数字电路动作时,高频电路却发生动作不稳定等现象,其中原因之一是数字电路产生的噪声,影响高频电路正常动作所致。为了避免上述问题除了设法分割两电路block之外,设计电路板之前充分检讨设计构想,才是根本应有的手法,基本上设计高频电路用电路板必需掌握下列三大原则: 1、高质量; 2、不可取巧; 3、不可仓促抢时间。 以下是设计高频电路板的一些建议: (1印刷pattern的长度会影响电路特性。尤其是传输速度为GHz高速数位电路的传输线路,通常会使用strip line,同时藉由调整配线长度补正传输延迟时间,其实这也意味着电子组件的设置位置对电路特性具有绝对性的影响。 (2Ground作大better。铜箔面整体设置ground层,而连接viabetter ground则是高频电路板与高速数位电路板共同的特征,此外高频电路板最忌讳使用幅宽细窄的印刷pattern描绘ground (3电子组件的ground端子以最短的长度与电路板的ground相连接。具体方法是在电子组件的ground端子pad附近设置via,使电子组件能以最短的长度与电路板的ground连接。 (4信号线作短配线设计。不可任意加大配线长度,尽量缩短配线长度。 (5减少电路之间的结合。尤其是filteramplifier输出入之间作电路分割非常重要,相当于audio电路的cross talk对策。 (6MCU回路Layout考量:震荡电路尽可能接近IC震荡脚位;震荡电路与VDD&VSS保持足够的距离;震荡频率大于1MHz时不需加osc1&osc2电容;电源与地间要最短位置并尽量拉等宽与等距的线,于节点位置加上104/103/102等陶瓷电容。 29. 问:在高速设计中,如何解决信号的完整性问题? 答:信号完整性基本上是阻抗匹配的问题。而影响阻抗匹配的因素有信号源的架构和输出阻(output impedance,走线的特性阻抗,负载端的特性,走线的拓朴(topology架构等。解决的方式是靠端接(termination与调整走线的拓朴。 30. 问:在Demo板上采样电压时,不稳定,采样结果有波动,如何消除? 答:一般来说,仿真器都是工作在一个稳压的环境(通常为5V。如果用仿真器的A/D时,
要注意其A/D参考电压是由仿真器内部给出,还是需要外部提供。A/D转换需要一个连续的时钟周期,所以在仿真时不能用单步调试的方法,否则会造成A/D采样值不准。至于A/D采样不稳定,可以在A/D输入口加一电容,起到滤波作用,在软件处理时采用中值滤波的方法。 31. 问:如何提高单片机系统的抗干扰性能? 答:搞过产品的朋友都有体会,一个设计看似简单,硬件设计和代码编写很快就搞定,但在调试过程中却或多或少的意外,这些都是抗干扰能力不够的体现。下面讨论一下如何让你的设计避免走弯路:抗干扰体现在2个方面,一是硬件设计上,二是软件编写上。这里重点提醒:在MCU设计中主要抗干扰设计是在硬件上,软件为辅。因为MCU的计算能力有限,所以要在硬件上花大工夫。看看干扰的途径: 1:干扰信号干扰MCU的主要路径是通过I/O口,一是影响了MCU的数据采集,二是影响内部其它寄存器。解决方法:后面讨论。 2:电源干扰:MCU虽然适应电压较宽(3-55V,但对于电源的波动却很敏感,比如说MCU可以在3V电压下稳定工作,但却不能在电压在3V-55V波动的情况下稳定工作。解决方法:用电源稳压块,做好电源的滤波等工作,提示:一定要在电源旁路并上01UF的瓷片电容来滤除高频干扰,因为电解电容对超过几十KHZ的高频干扰不起作用。 3:上下电干扰:但每个MCU系统在上电时都要经过这样一个过程,所以要尤其注意MCU然可以在3V电压下稳定工作,但并不是说它不能在3V以下的电压下工作,当然在如此低的电压下MCU是超不稳定状态的。在系统加电时候,系统电源电压是从0V上升到额定电压的,比如当电压到2V时候,MCU开始工作了,但这时是超不稳定的工作,极容易跑飞。解决方法:让MCU在电源稳定后才开始工作。PIC在片内集成了POR(内部上电延时复位)这功能一定要在配置位中打开。外部上电延时复位电路。有多种形式,低成本的就是在复位脚接个阻容电路。高成本的是用专用芯片。这方面的资料特多,到处都可以查找。最难排除的就是上面第一种干扰,并且干扰信号随时可以发生,干扰信号的强度也不尽相同。但它们也有相同点:干扰信号也遵循欧姆定律,干扰信号偶合路径无非是电磁干扰,一是电火花,二是磁场。其中干扰最厉害的是电火花干扰,其次是磁场干扰。电火花干扰表现场合主要是附近有大功率开关、继电器、接触器、有刷电机等。磁场干扰表现场合主要是附近有大功率的交流电机、变压器等。解决方法:第一点:也是最经典的,就是在PCB步线和元件位置安排上下工夫,这中间学问很多,说几天都说不完。二:综合考虑各I/O口的输入阻抗,采集速率等因素设计I/O口的外围电路。一般决定一个I/O口的输入阻抗有3种情况:AI/O口有上拉电阻,上拉电阻值就是I/O口的输入阻抗。一般大家都用4K-20K电阻做上拉,PICB口内部上拉电阻约20K。由于干扰信号也遵循欧姆定律,所以在越存在干扰的场合,选择上拉电阻就要越小,因为干扰信号在电阻上产生的电压就越小。由于上拉电阻越小就越耗电,所以在家用设计上,上拉电阻一般都是10-20K而在强干扰场合上拉电阻甚至可以低到1K(如果在强干扰场合要抛弃B口上拉功能,一定要用外部上拉。BI/O口与其它数字电路输出脚相连,此时I/O口输入阻抗就是数字电路输出口的阻抗,一般是几十到几百欧。可以看出用数字电路做中介可以把阻抗减低到最理想,在许多工业控制板上可以看见大量的数字电路就是为了保证性能和保护MCU的。CI/O口并联了小电容。由于电容是通交流阻直流的,并且干扰信号是瞬间产生,瞬间熄灭的,所以电容可以把干扰信号滤除。但不好的是造I/O口收集信号的速率下降,比如在串口上并电容是绝不可取的,因为电容会把数字信号当干扰信号滤掉。对于一些检测开关、干簧管、霍尔元件之类的是可以并电容的,因为这些
开关量的变化是不可能有很高的速率的,并一个小电容对信号的采集是没任何影响的。 32. 问:00254Unimplemented RDI message是什么错误提示? 我的设置连接都正常,是不是芯片烧了? 答:JTAG的问题。可以先使用ISP操作试试就知道了,如果能ISP,说明LPC2104没有损坏,还能正常运行程序。 33. 问:我现在数字电路除LPC2114使用3.3V电压外,其余的大部分是5V的。我想先将LPC2114连接到CPLD再连接到其它电路(CPLDI/O口可以输出或输入5V不知道行不行。 答:我觉的简单的电路可以用LVC芯片,必要时可以用3VCPLD 34. 问:LPC2104具有6PWM,可以应用于电机控制,可是却没有计数器进行电机转速的PID闭环控制,这个情况是不是lPC2106的一个缺陷,如果不是,那应该怎么样才能进行外部脉冲的计数在不用外加计数器的情况下!! 答:捕获算周期。 35. 问:LPC2104LPC2114外部晶振接法。原来我用LPC2104做的板子,外部晶振接到X1时不可用。后来接到X2上时好象可以用,但这与资料上的说法好象有点出入。现在我想LPC2114改版,但不想再次改版了。故在此请教外部晶振接法? 答:使用外部无源晶振,晶振两个管脚无需连接,与51单片机基本一致;时钟信号由X1入。 36. 问:请问用LPC2104扩展D12有没有问题? 答:可以使用模拟总线,速度比51快几倍。 37. 问:把LPC210444(EINT1接地,再利用LPC210XISP软件通过串口0往芯片里写程序,为何按了复位键以后连芯片的ID都不能读到? 答:应该检查如下几点: 1. 确保你的芯片在工作。一般可以查看芯片的几个电源是否都正确,查看晶体是否有波形,最好还可以看看各电源的纹波是否严重。 2. 确保电平转换芯片的正确工作,以及各输入输出的正确。这个方向最容易弄反。 3. 查看复位端的电平是否正确,复位按健正常。 4. 确保44脚接地。 38. 问:LPC2104系统为什么采用11.0592Mhz的晶振,是在定时上有优势还是其他原因? 答:选用11.0592MHz只是为了得到精确的通信波特率,串口通信的可靠性高。 39. 问:LPC2119最高频率可达60MHZ,在频率比较高的时候应该使用几层的电路板,有没有确切规定? 答:不知道什么时候有人就把PCB的层数与频率划上了一个必然的关系。60MHz很高吗?调频收音机FM波段范围是88-108MHz,内部部本振频率可达118.7MHz1层板。电视机里头的电路板,高频盒内一般最多就2层板(还是一层的居多它跑多高的频率自己查查UHF的范围吧,记得保持冷静因为没有什么值得去惊讶的!再有几年前拆过一个GIGA的游戏机,音频部分的PCB4层板(独立的小板其中的元器件密密麻麻的,看看这个它又能是跑多高的频率况且现在数字电路的电平容差相对于模拟电路的至少有一个数量级的差别。在高频模拟电路下,多一块覆铜可能就使电路的性能下降或工作点异常,例如它可能使电感特性器件的Q值下降,产生涡流耗损等。很多时候增加PCB的层数决不是单纯因为系统速度,你所说的60Mhz也只是芯片内部的系统时钟,难道你的IO也要作为时钟源使用吗?ARM中采用PLL技术使得外部时钟可以下降到一个较低的水平,则可以抑制部分由时钟电路产生的射频干扰,有较好的EMCEMI特性,一个合理的PCB layout可能比盲目增加PCB层数的方法提高系统的稳定性来得更合理和有效!看你是想做精品还是想做产品或其他,这就要综合多方因素考虑了。无可否认,增加PCB的层数后比较容易的处理一些由于电源寄生干扰产生的问题,适当配合layout可以满足一些速度(时序要求苛刻的电路。由于现在元器件体积日渐小型
化,PCB上元器件密度大,很多时候单面或双面的layout实现已经非常困难,增加PCB数是为了更好的使设计变得合理和可靠。 40. 问:LPC2119与光隔相连时遇到问题,以前用的片子I/O口都是5V电压,由于21193.3V所以和以前系统中采用的高速光耦相连时就涉及到两个问题:接受光耦送来的信号2119可否承受?还有2119输出的信号能否驱动光耦? 答:可以将CAN引脚当成普通I/O口对待,就不会存在疑惑了。 41. 问:LPC17xx端口引脚的内部上拉电阻可以关闭吗?在不考虑引脚功能的情况下,每个端口的上拉/下拉电阻及漏极开路输出模式可能选择吗? 答:LPC17xx有一个寄存器用于控制上拉电阻的激活与失活,软件可以控制上拉电阻。PINMODE寄存器可控制所有端口的模式,包括片上上拉/下拉电阻及漏极开路模式的使用。USBI2C0接口引脚外,其它所有引脚都可在不考虑其功能的情况下选择上拉/下拉电阻和漏极开路模式。对于P0.27P0.30引脚不能使用引脚选择模式,P0.27P0.28专用于I2C漏极开路引脚,不带有上拉/下拉电阻;P0.29P0.30做为USB专用引脚也没有可配置的上拉/下拉电阻。P0.29P0.30用于USB功能时,做为一个整体必须设置为相同的方向。 42. 问:LPC17xxGPIO缺省复位状态是什么?GPIO输入脚的电容值为多少? 答:所有GPIO除两个I2C引脚(P0.27P0.28专用于I2C接口的漏极开路引脚)和USB引脚(P0.29P0.30)外,缺省复位状态为带上拉的输入状态。对于一个IO引脚的最大输入电容为2.8pF 43. 问:LPC17xxUART引脚可定向至不止一个GPIO脚上,TXD1可定向至P0.15P2.0RXD1可定向至P0.16P2.1。是否可以将P0.15配置为TXD1P2.1配置为RXD1?是否可以将P0.16P2.1都配置为RXD1 答:用户可以将P0.15用做TxD1,同时P2.1做为RXD1。只须确认PINSEL寄存器中这些引脚都已正确配置。对于接收数据用的RXD1,用户应配置为P0.16P2.1,如果两个引脚都配置为RXD1,则只有P0.16起作用。对于传送数据用的TXD1,可以同时将P0.15P2.0都配置为TXD1,数据从这两个引脚都可以传送出去。 44. 问:LPC2104/5/6 PWM的最大解晰度是多少?PWM模块做为通过时钟读数时是否要使用相同的计数器? 答:最大解晰度为1/处理器主频。如果最大主频为60MHz,那么解晰度为16ns。每个PWM有自己的时钟计数寄存器,不必用相同的计数器。 45. 问:用87C752设计一个开头电源的控制器时,出现反复重启的现象,该如何解决? 答:这种情况下,可通过在VCC入口点加一个 4.7uf的大型电容来解决。一般情况下,应检查板子上的噪声,确保VCC没有产生噪声。 46. 问:使用80C51这一类CMOS微控制器时,对未用的输入脚该如何处理? 答:未用的CMOS输入脚需断开。这适用于大部分80C51XA系列输入型引脚,包括/EA脚, 8xC552/EWSTADC脚等。纯粹的CMOS输入端不用消耗电流去拉高和拉低,只需连至电 正极或接地即可。很多8051输入端内部有上拉,但上拉作用很小,可能不能完全消除引脚上的噪 声。因此推荐将引脚连接至VddVss。标准双向I/O口引脚因为内部有上拉,不用时通常做悬空 理。如果想加入额外的保护措施,可用一个串联的电阻来限流。CMOS输入脚的泄漏电流通常 10uA故可选择阻值为100K欧姆下的任何电阻,10K电阻为最佳选择。仔细的将未用的引脚连 线是不会引起任何操作问题的。如大部分80C51系列的/EA,系统要正常工作,此脚必须要处于 正确的状态。其它的引脚只有在软件激活后才有作用,8XC552Start ADC(STADC脚。可以连 接至高电压或低电压.还可将多个未用的CMOS输入脚连至同一个电阻上。

免费下载 Word文档免费下载: ARM嵌入式初学常见问题

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服