EDN首页   博客首页

最新日志

发表于:2008-9-9 15:53:14
标签:无标签

0

选购嵌入式开发板要注意那些方面

嵌入式开发板就是半导体行业分工合作的载体之一,它为开发产品的厂商提供基本的底层硬件、系统和驱动等资源,使得用户不需要再投入人力和时间来完成这些底层的工作。目前市面上的开发板,多种多样而且价格差异也很大,那么选择开发板的时候,应该注意哪些方面,才能够保证自己的项目能够顺利地完成?本文将就这个问题,从嵌入式开发板行业情况、嵌入式开发板的功能与作用等方面来向用户提供一些信息和建议。

Tag : 嵌入式开发 嵌入式开发行业 嵌入式开发板

嵌入式开发板行业情况

  嵌入式开发板的原型,可以说是各大芯片厂商在推出芯片的时候,提供给用户的参考设计。很正常,半导体厂商在推广自己芯片的时候,单单拿芯片给用户看是没有任何吸引力的,一定要给用户看到具体的电路板,具体的接口,能够给客户一个具体的印象,才能够保证推广的效果;半导体厂商给出这些参考设计,也是让用户在设计的时候有一个参考,加快他们产品设计和上市的进度。

 

2002年底2003年,ARM体系结构在国内的风行,给很多想要基于自己的嵌入式技术进行创业的人送来了东风。大江南北几乎每个省级城市都会有开发板厂商。这段时间以及之后入行的公司有一个共同的特点,就是产品基本都是基于ARM处理器进行开发,或者是仿真器类的 ARM 工具进行开发。这些厂商能够为用户提供具有不同接口功能的开发板,从整体上看是能够为电子产品的制造商提供服务,加速半导体产业链下游厂商产品的上市。

嵌入式开发板的功能与作用

  嵌入式开发板,从概念上来讲,与软件外包非常类似,像嵌入式产品的硬件、引导代码、驱动程序、文件系统、协议层、基本应用软件这些方面,都是电子产品的公共和通用部分,并不是产品能够形成差异化的关键技术,在这个讲求分工合作的时代,如果是这部分的工作量比较大,或者是厂商没有相关的开发人员的时候,就能够选择由第三方完成这些软件开发的工作,加快产品研发的进程,实现产品的迅速上市,抢占市场先机。
  那么,作为“发包方”的开发板用户,选择开发板的时候,实际上选择的不仅是一个硬件板子、开发板提供的源代码等资源,而是选择一个合作伙伴,一个为用户提供软硬件服务的合作伙伴。与软件外包这种合作方式类似,用户和供应商之间的合作更多是软件方面的合作,需要用户和供应商之间根据产品的具体需求进行充分沟通,供应商要根据用户的需求不断地调用人员进行配合。像我们在支持客户进行产品开发的过程中,遇到的比如更改文件系统、串口测试、64M Flash换成128M Flash等问题,大多情况都是要通过软件方式来解决的,这就形成了嵌入式行业供应商的售后支持和客户研发的高度互动性。

也就是说,嵌入式开发板是用户软件外包的载体,相对于传统的软件外包业务,开发板实际上能够为用户提供硬件实物和软件服务两方面的价值。
  目前,在嵌入式行业中,除了嵌入式开发板,外包的形式也趋向多样化,用户能够根据自己的产品需要,向供应商提出定制要求,由供应商提供硬件设计和驱动移植等方面的服务;有可能电子厂商会自己设计硬件,由嵌入式系统厂商帮助其完成系统的移植、驱动的完善工作。从行业链上的作用来看,嵌入式系统厂商能够采用灵活的服务方式,利用自己的技术优势帮助电子产品厂商缩短产品开发周期、节省设计资源方面的投资,促进电子产品厂商的快速发展。

嵌入式开发板选型的建议

以嵌入式开发板的功能和作用作为出发点,嵌入式开发板选型应该从以下三个方面来综合考虑:

  (一)开发板的硬件设计是基本照搬半导体厂商的参考设计,还是充分为国内厂家生产制造、产品上市等方面考虑。

(二)开发板的软件是否支持完善,是否能够支持所有开发板上所有的硬件接口。

开发板的价值就在于,能够让用户节省在系统、驱动等方面的投入,专注于使产品形成差异化的上层软件的开发。如果供应商提供的开发板,板级硬件接口没有对应的软件驱动的支持,用户的开发进度就会受到影响 。在购买开发板的时候 ,一定要确认清楚 ,是不是所有的硬件接口都有相应的驱动,开发板是不是拿到手就能够马上用来做开发。

(三)供应商的技术支持力度如何。
  嵌入式行业是客户研发和售后支持具有高度互动性的行业,供应商的技术支持有时就会成为用户产品上市的关键因素,在供应商的技术支持能力方面,一定要慎重考察。

 

总之,用户在购买开发板的时候,选择的不是开发板,而是为自己提供服务的合作伙伴。开发板的价格是公司服务价值的体现,所以目前很多追求最低价开发板的消费理念是偏颇的。选择开发板,选择一个为自己服务的公司,一定要慎重。

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(73)
发表于:2008-8-23 17:43:08
标签:无标签

0

ARM9开发板是如何与电脑实现连接

标签:arm开发板 arm9开发板 嵌入式操作系统 arm

今天有人问我ARM9开发板是如何与电脑实现连接的,就是说ARM的哪个接口连接电脑的哪个接口?用什么线连接?我在设计一个基于ARM的嵌入式Linux系统,由OV7660对空间图像进行采集,并输出图像数据,CY7C68013I/O口接收到图像数据后,通道将数据发送到PC中进行保存。 CY7C68013引出的总线应该连在PC的接口还是连在ARM上?等问题,想信诸如此类的问题有很多初学着都经常会遇到的,以下是我自己的一点想法仅供大家参考:

 

一台专用的台式电脑(不一定是PC)有很大的主内存来支持操作系统、应用程式和数据,连同一个大容量存储设备(硬盘、DVD/CD-ROM等)的接口。这种台式电脑带有各种各样的I/O设备以便用户输入(键盘、鼠标和话筒)、输出(显示器及耳机)连同互联(网络和外设)。快速的处理器需要一个系统管理器来监控其核心温度、供给电压连同进行系统重启。

大规模嵌入式电脑也可能采用上述的形式。例如,他可能作为一个网络路由器或网关从而需要一个或多个网络接口、大容量内存连同快速操作。他们也可能需要某种形式的用户界面来作为嵌入式应用的一部分。或在许多情况下,他们也可能只是专用于某一特定任务的常规电脑。因此,单就硬件而言,许多高性能嵌入式系统和常规台式机没有什么大的差别。

较小的嵌入式系统使用微控制器作为他们的处理器,这样做的长处在于处理器能够将很多的电脑功能包含在一个芯片上。

微控制器至少有一个CPU,一个小容量的内部存储器(ROM/RAM)连同作为子系统模块在微控制器内部实现的某种I/O。这些子系统为处理器提供了附加功能,许多处理器通常都有这种子系统。您经常能够在微处理器里发现这些子系统,这些子系统最普通的I/O是数字I/O,他们都是端口,能够以引脚为基础,由软件配置成数字输入或输出。作为数字输入,这些端口能够用来读取开关或按钮的状态连同读取另外一个设备的数字状态;作为数字输出,他们能够用来开启或关闭外部设备,也能够向外部设备传达工作状态。例如,一个数字输出端口能够为一个电机激活控制电路,开/关灯,或可能的话还能够触发诸如花园浇灌系统的水压阀这样的设备,当然也控制洗衣机。将数字输入/输出端口结合在一起能够用来合成对其他芯片的接口和协议。除了数字I/O外,大多数控制器更有其他子系统。而假如无需其他子系统的功能,那么微控制器本身也能将其他子系统转换到通用数字I/O。作为一个系统设计者,这就为您在所设计的应用里如何使用微控制器提供了多种选择。

  好了文章写完了,现在我想大家推荐一个学习嵌入式开发 嵌入式开发 arm开发板 arm9开发板的好网站给大家,本人自我感觉里边的内容还不错,特别是有些arm技术类文章很好,至于板子吗http://www.armodm.com上有最新的嵌入式开发板,有时间不妨去看看哦!

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(88)
发表于:2008-6-26 11:24:10
标签:无标签

1

ARM9开发板入门:对S3C2410数据手册中DMA部分的解读

ARM9开发板入门:对S3C2410数据手册中DMA部分的解读

深圳龙人计算机嵌入式系统开发中心专业提供嵌入式开发技术服务和嵌入式产品如ARM9开发板和XScale开发板、ARM9核心板、ARM9学习板、ARM工控板及ARM仿真器ARM开发工具等。

之所以要介绍DMA,因为它对性能太重要了!只有活用了DMA,CPU的性能才能上去!S3c2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同

本文龙人计算机为您解读S3C2410数据手册中DMA部分:

DMA请求源通过设置DCON[23]位SWHW_SEL值,选择硬/软件请求,并可进一步通过设置HWSRCSEL[26:24]位选择HW模式下的每个DMA通道的请求源

DMA工作过程使用三态FSM(有限状态机)进行操作,分三步操作:

Stage-1 初始状态,等待DMA请求,若请求到达,进入Stage-2。此阶段,DMA ACK和INT REQ都为0。

Stage-2 DMA ACK变为1,计数器CURR_TC从DCON[19:0]加载数值。注意:此时DMA ACK仍然为1,知道它随后在stage-3中被清0。

Stage-3 在此状态,对DMA进行原子操作的sub-FSM(子状态机)被初始化它从源地址读取数据然后写入目的地址(此操作需要考虑数据大小和传输尺寸)。

每一次DMA传输,必须先得到请求。

有两种请求模式:Demand和Handshake。差别在于是否等待DREQ信号无效:

Handshake模式下,DMA控制器在开始下一次传输之前要一直等待直到DREQ信号无效。如果DREQ信号无效了,DMA 控制器使DACK无效后继续等待下一次DREQ信号有效,之后又开始数据传输,且使DACK信号有效。

Demand模式下,DMA控制器不等待DREQ信号无效。如果传输完毕后DREQ还是继续有效,DMA控制器只是先无效DACK信号,然后又开始新一轮的传输。数据手册上建议对外部DMA请求使用Handshake模式,以避免不经意的开始新一轮数据传输。

S3C2410 ARM9 ARM9开发板 DMA ARM开发板

有两种传输模式:Single service和Whole service。差别在于三态FSM操作的Stage-3:

在Stage-3状态,对DMA进行原子操作的Sub-FSM被初始化,它从源地址读取数据然后写入目的地址(此操作需要考虑数据大小和传输尺寸)。

Whole service模式下,这种读、写操作重复进行直到计数器(CURR_TC)变为0;而Single service模式下读和写操作只进行一次。

数据手册上提醒注意:就算是Whole service传输模式,每一次sub-fsm的原子传输后DMA也会释放总线,然后再试图重新获得总线,以保证其他设备能够有机会获得总线使用权。

每次原子传输(Sub-FSM中)的单元尺寸分为Unit(1次读和写操作,单块数据)和Burst4(分别执行4次连续读、写操作,4块数据)。

在整体服务模式下,使用传统的DMA 计数器,状态机会停留在状态三,直到DMA计数器的值减为零,再回到状态一,等待下一次DMA请求。2410 DMA 数据传输模式:共有两种数据传输模式:

单位数据传输模式:执行一次读操作和一次写操作。

并发数据传输模式:执行四次读操作和四次写操作。2410 DMA 的基本时序:nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输。2410 DMA 的两种协议模式:请求模式:If XnXDREQ remains asserted, the next transfer starts immediately. Otherwise it waits for XnXDREQ to be asserted.

握手模式:If XnXDREQ is deasserted, DMA deasserts XnXDACK 

深圳龙人嵌入式产品事业部是国内最强最精最专业的开发板集散地包括ARM开发板、ARM9开发板、Xscale开发板、2410开发板(ARM9)2440开发板(ARM9)、44B0X开发板(ARM7)、DSP开发板、单片机开发板、FPGA开发板、CPLD开发板等各类精品开发板!网址:http://www.armlab.net

联 系 电 话:+86-0755-83346939  83662100   余小姐

销 售 Email:beijingshenzhen@126.com

联 系 地 址: 深圳市福田区福虹路世界贸易广场B座13F   邮 编:518033

系统分类: ARM   |    用户分类:    |    来源: 原创

评论(0) | 阅读(147)
发表于:2008-6-26 11:23:35
标签:无标签

1

嵌入式开发技术:wince驱动开发学习笔记

嵌入式开发技术:wince驱动开发学习笔记

文章整理:深圳龙人计算机嵌入式系统开发中心

首先是wince驱动的分类问题。按照书上讲的说CE下驱动分成单体驱动和分层驱动,而看到另一种说法是本机驱动和流式驱动。经过microsun大哥的指点,把这两种分类法分开了。在这里引用一下:

单体与分层只是从代码的形式上做的分类.分层驱动代码上分为PDD与MDD,一般的微软已经实现了MDD,可能也实现了PDD,我们只需要对PDD做些修改就能使用,比如音频的驱动,显示的驱动。单层驱动是把PDD与MDD写在一起,没有做严格的区分,通常这种驱动比较简单,比如:ATADISK。

嵌入式 嵌入式开发 嵌入式系统 wince驱动开发

至于本地驱动和流式驱动是从驱动与系统其它模块(调用者)的接口形式上做的分类.其实,本地驱动这个名称不大恰当,可能叫专用驱动或其它名字更为合适.它是指调用它的模块给它有特定的接口,比如电源驱动和通用LED驱动。而串口,网卡等就是流接口驱动程序.

所以,一个驱动程序可以是单体的流式驱动,例如:ATADISK.也可以是分层的流式: 如OHCI ”

       按照我的理解,单体和分层是驱动实现方式上的分类,而本地和流式则是驱动模型上的分类,所谓本地驱动就是操作系统有保留专门的接口,所谓流式是指编写的DLL文件里可以导出各种流式接口函数。

         第二点:驱动的功能属性。设备驱动程序是操作系统内核和硬件的接口,操作系统定义了一组标准的接口,编写驱动的过程也就是实现这些接口。从应用程序到具体硬件间有如下这些环节起作用:应用程序-调用OS函数-操作系统-驱动接口-驱动程序-硬件操作函数-硬件。在wince里驱动都以用户态的DLL存在,需要通过进程加载到slot里。共有三类系统进程用来加载:Device.exe,GWES.exe,FileSys.exe.绝大多数设备驱动都是通过Device.exe加载的。需要注意的是,不同的OS保留的设备驱动接口是不一样的,如桌面windows和wince就不同。

     第三点:wince下设备的初始化分为两个阶段:Device.exe的初始化;外设的枚举和加载。其流程是:上电-启动bootloader-启动NK-启动注册表init键(Device.exe启动)-初始化数据结构,I/O,电源管理等-加载BusEnum.dll(总线枚举器)-枚举注册表下Driver/buildin的所有子键。这里的枚举过程就是循环调用ActivateDeviceEx()函数加载驱动的过程。在OS启动完毕后,我们可以用PB的Remote Registry Tool查看H_L_M/drivers/active包含的子键,看哪些驱动随启动而加载 。

     第四点:流接口驱动的概念。暴露流式接口函数的驱动即是流驱动,它把外设抽象成一个文件。过程是:应用程序使用文件API对设备进行访问,OS接受API调用FileSys.exe,转到device.exe,调用流接口,与硬件交互。所谓流接口函数有十个,包括XXX_InitXXX_DeinitXXX_OpenXXX_CloseXXX_ReadXXX_WriteXXX_PowerUpXXX_PowerDownXXX_SeekXXX_IOControl,在wince5.0中增加le了XXX_PreClose,XXX_PreDeinit.而我们在应用程序里对应的文件API有CreateFileDeviceIoControl ReadFile WriteFile,CloseHandle,SetFilePointer.  

      第五点:编写流驱动的步骤。有两种实现途径:1。写DLL,做成Project,加入到OS里。2。改BSP,把驱动写在BSP里,再选择那个BSP做OS。第一种方法步骤是在PB中新建一个DLL项目,编写一些输入函数,寄存器,外设的声明,写DLLENTRY函数;实现流接口函数;编写DLL的导出函数文件.DEF;为驱动程序写入注册表项,还需要修改bib文件。 第二种方法就是在platform/BSP/drivers下新建一个目录,然后在drivers目录中的dirs文件中加入新建的目录名。在新建的目录下,新建你的源代码文件,在其中实现DLL函数。新建名称分别为sources, makefile, ***.def的文件;修改platform.regplatform.bib文件

龙人嵌入式开发中心专业提供嵌入式系统开发和嵌入式ARM解决方案服务同时提供ARM9开发板、Xscale开发平台及ARM仿真器http://www.szarm.com

系统分类: 嵌入式   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(68)
发表于:2008-5-24 14:37:27
标签:无标签

1

龙人教你高效率ARM嵌入式程序开发

龙人教你高效率ARM嵌入式程序开发

不需龙人计算机(深圳ARM嵌入式研发中心)说大家都都知道嵌入式系统对应用软件的质量要求很高,在嵌入式开发中须注意对代码进行优化,尽可能地提高代码效率。虽然C编译器都提供了一定程度的代码优化,但大部分由编译器执行的优化技术仅涉及执行速度和代码大小的平衡,不可能使程序既快又小,因而必须在编写程序时采取必要的措施。本文针对高效率嵌入式程序开发提供了一些编程技巧,对实际系统开发具有重要作用。

    在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,嵌入式工程师尤其需要考虑对变量的使用和循环程序的处理。

变量使用

    在进行实际程序开发时,变量的使用至关重要,其中使用全局变量比向函数传递参数更加有效,这样免去了函数调用时参数入栈和出栈的需要。当然,使用全局变量会对程序有一些副作用。

    由此可见,在声明变量时,需要考虑怎样最佳地控制存储器布局。最好的方法是在编程的时候,把所有相同类型的变量放在一起定义。

    通常,工程师设法使用short或char来定义变量以节省存储器空间。在函数的局部变量数目有限的情况下,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。在这种情况下,使用short和char型变量不但不会节省空间,反而会带来其它的副作用。同样完成加1的操作,32位的int型变量最快,只用一条加法指令。而8位和16位变量,完成加法操作后,还需要在32位的寄存器中进行符号扩展。其中,带符号的变量,要用逻辑左移和算术右移两条指令才能完成符号扩展;无符号的变量,要使用一条逻辑与指令对符号位进行清零。所以,使用32位的int或unsigned int局部变量最有效。某些情况下,函数从外部存储器读入局部变量进行计算,这时候,需要把不是32位的变量转换成32位。至于把8位或16位变量扩展成32位后,隐藏了原来可能溢出异常这个问题,需要进一步仔细考虑。

在程序中,经常会使用switch case语句,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要做什么,就浪费了处理器时间。为了提高速度,可以把具体的情况按照它们发生的相对频率排序。即把最可能发生的情况放在第一,发生概率小的情况放在最后,这样会减少代码平均执行时间。

嵌入式程序开发 嵌入式 嵌入式开发 嵌入式系统 嵌入式系统开发

    通常,工程师总是竭力避免使用冗余变量,以精简程序。一般情况下这样做是正确的,但是也有例外,如下所示:

int f(void);

int g(void);              

 file://f()和g()不访问全局变量errs

int errs;            file://全局变量

void test1(void)

{ errs += f();

                errs += g();

}

void test2(void)

{ int localerrs = errs;   

// 定义冗余的局部变量

     localerrs += f();

     localerrs += g();

     errs = localerrs;

}

    在第一种情况test1()里,每次访问全局变量errs时都要先从相应的存储器下载到寄存器里,经f()或g()函数调用后再存储回原来的存储器里面。在该例子中,一共要进行两次这样的下载/存储操作。而在第二种情况test2()里,局部变量localerrs被分配以寄存器,这样一来,整个函数就只需要一次下载/存储全局变量存储器了。尽量节省存储器访问的次数,对于提高系统性能非常有用。

循环程序的处理

    计数循环是程序中常用的流程控制结构。在C中,类似下面的for循环比比皆是:

    for(loop=1;loop<=limit;loop++)

    这种累加计数的方法符合一般的自然思维习惯,所以比下面的递减计数方法使用更多:

    for(loop<=limit;loop!=0; loop--)

    这两者在逻辑上并没有效率差异,但是映射到具体的体系结构中,就产生了很大的不同。

    累加法比递减法多用了一条指令,当循环次数比较多的时候,这两段代码就会在性能上产生明显的差异。分析其本质原因,在于当进行一个非零常数比较时,必须用专门的CMP指令来执行;而当一个变量与零进行比较时,ARM指令可以直接利用条件执行的特性(NE)来进行判断。很多时候循环展开由编译器自动完成,不过应注意对中间变量或结果被更改的循环,编译程序往往拒绝展开,这时候就需要工程师自己来做展开工作了。

    尤其值得注意的是,在有内部指令cache的CPU上(如ARM946ES芯片),因为循环展开的代码很大,往往会出现高速缓冲存储器溢出。这时展开的代码会频繁地在CPU的高速缓冲存储器和内存之间来回调用,又因为高速缓冲存储器速度很高,所以此时循环展开反而会变慢。同时,循环展开会影响矢量运算优化。

    ARM处理器核对NZ(零比较转移)有特别的指令处理,速度非常快,如果你的循环对方向不敏感,可以由大向小循环。需要注意的是,如果指针操作使用了i值,这种方法可能引起指针索引超界的严重错误(i = MAX+1)。当然你可以通过对i做加减运算来纠正,但是如果这样就没有提高效率的作用了。

结语

    本文龙人计算机对高效率嵌入式ARM程序开发总结了一些编程技巧。在实际的嵌入式系统开发中,可以大大的提高系统的性能,特别是在多媒体和通信等复杂度高的应用中,对程序设计具有指导意义。深圳龙人嵌入式产品事业部是国内最强最精最专业的开发板集散地包括ARM开发板、ARM9开发板Xscale开发板、2410开发板(ARM9)、2440开发板(ARM9)、44B0X开发板(ARM7)、DSP开发板、单片机开发板、FPGA开发板、CPLD开发板等各类精品开发板!网址:http://www.armodm.com

系统分类: ARM   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(69)
发表于:2008-5-24 14:36:47
标签:无标签

1

ARM9开发学习-S3C2410开发板上的串口通信编程

ARM9开发学习-S3C2410开发板上的串口通信编程

一、S3C2410开发板上的串口通信编程目的

   串口通信我们并不陌生,我们经常用串口来进行数据传输,可并不清楚它是如何工作

的。那这一节龙人计算机嵌入式事业部就带领你来揭开 ARM S3c2410 UART(Universal Asynchronous Receiver andTransmitter) 串口通信的神秘面纱。

二、代码

   我们先来分析文件 crt0.s

   @ 文件 crt0.s

   @ 作用:设置堆栈指针

   .text

   .global _start

   _start:

    ldr sp, =1024*4

    bl main

   halt_loop:

    b halt_loop

ARM9