摘 要:本文介绍了以TI的DM320为主芯片,基于嵌入式Linux的PMP系统的设计与实现。设计实现包括软件和硬件两个部分,其中重点在软件部分。采用本设计方案的PMP系统可以实现高质量的音频、图片、视频效果,以及其他一些辅助功能。

关键词:PMP;嵌入式Linux;音/视频编解码

PMP系统简介

便携式多媒体播放器(PMP),也就是通常人们所说的MP4,已成为继MP3以后消费类产品的一个新热点。PMP的主要优点是:携带方便,能够直接播放高品质音/视频文件;也可以浏览图片,以及作为移动硬盘、数字银行使用;此外,还有FM、游戏等功能。PMP播放器不仅需要对机体大小有所限制,更重要的是需要一种压缩效率更高、画面质量更高的视频压缩技术,以及相关编解码芯片。本文介绍了此PMP系统的软、硬件设计,重点在软件设计,此PMP系统方案现在已经进入量产阶段。

PMP系统的硬件设计

现阶段PMP内部核心架构,大多都是采用CPU搭配DSP的方式。其中,DSP负责编/解码工作;CPU则是针对文件管理、存取,以及使用接口、周边组件的控制等进行处理。另外,还需考虑整合硬盘、存储卡及LCD显示屏等组件,以及与外部USB接口、操控按钮间的搭配等问题。

为符合上述要求,PMP的设计需要内建视频编/解码芯片,作为模拟与数字两种信号间转换之用。另外,设计还需要考虑:用来连接视频译码器与DSP的总线;LCD显示屏的驱动电路;IDE接口与硬盘控制芯片间的沟通等。

图1 DM320的结构图

本系统整体方案是建立在TI DM320基础之上的。DM320 是一款支持视频编/解码的带有双CPU核的处理器。针对多媒体器件做专门的处理,

它可以直接支持视频输入/输出, 可以方便的扩展音频的输入/输出, 支持USB ,SDRAM,FLASH,CF/SD/MMC/MS/MS

Pro 接口。DM320的结构图,如图1所示。

TI DM320将C5409与ARM926整合,即将CPU与DSP同时集成在DM320核心内。芯片采用32MB或64MB容量的SDRAM,以及4MB的闪存,用作加载与存放操作系统。DM320本身已内建LCD控制器、USB2.0

OTG接口控制器,同时让CCIR-656格式信号经由总线在视频译码芯片与DM320间传送。由于NTSC/PAL编码器也被整合在其中,因此也可直接进行复合视频输出。

图2 DM320硬件系统的整体框架图

另一方面,DM320还可支持CCD/CMOS感光组件的连接,使得未来PMP要导入DSC、DV等更为容易。对于存储卡的兼容性部分,除现阶段主流的CF、SD及MMC外,还包括Memory

Stick。此外,此芯片还提供2组RS232串行端口、1组JTAG接口,能支持更多的外围设备。DM320硬件系统的整体框架图,如图2所示。

图3 PMP软件设计框图

PMP系统的软件设计

因为要兼顾到高质量的音视频效果、多种外设和有限的系统资源,PMP软件系统的设计变得相对复杂。系统设计将软件分为三层结构,如图3所示。

该系统的最底层是操作系统层,其中包括bootloader引导程序,主要完成系统从FLASH的启动,LOGO的显示,以及OS的引导。嵌入式Linux主要包括适合在TI

DM320上运行的Linux操作系统,以及各种外围设备的驱动程序。第2层为CODEC和MMI核层,MMI核包括第3层主GUI和各种应用程序所依赖的各种框架结构和数据结构,如窗口管理,定时器管理等。CODEC部分包括音频的编解码程序(主要由ARM实现)和图像的编解码程序(主要由DSP实现)。最上层为主GUI和各种应用程序。应用程序包括:FileManager(用来浏览存储器中的文件),VideoPlayer(播放视频文件),AudioPlayer(播放音频文件),ImageViewer(浏览图片),FM(收音机),Games(游戏),Resumes(重新播放音/视频文件)。

嵌入式Linux操作系统

本系统采用的Linux内核是对从Internet上下载比较稳定的Arm-Linux内核进行相应的修改,并编写相关外围设备的驱动程序,使之成为一个适合TI

DM320开发的操作系统环境。之所以称为嵌入式,是因为其操作系统运行的环境并不是普通的PC,而且嵌入在非PC构架的电子设备中。

关于内核修改Kconfig文件

Kconfig文件是用来对你所要加载内核内容进行配置的文件。比如,当在控制台上敲入make menuconfig,就会看到内核配置的窗口,可对其中的内容进行选择。选择[*]表示把此内容编入内核,选择[M]表示把此内容当成模块编译。Linux支持动态加载内核模块的功能,甚至可以在运行操作系统一段时间后再加载内核模块。由于DM320框架并未列入内核中,所以我们需要把DM320框架加入内核。首先,就要在内核目录下./arch/arm/Kconfig加入DM320的配置选项,这样才能在执行make

menuconfig配置内核时看到DM320框架。修改的部分内容如下所示:

choice

prompt "ARM system type"

default ARCH_DM320_20 file://在配置ARM系统时,默认的就是DM320框架。

source "arch/arm/mach-dm320-20/Kconfig"把DM320框架下的配置选项也引入。

同时,去掉其他CPU框架。如:

#source "arch/arm/mach-clps711x/Kconfig"

#source "arch/arm/mach-integrator/Kconfig"

其中,“#”表示此行内容为注释内容。

最后,就是要把内核配置选项中对DM320开发有用的项选进来。比如:

source "drivers/char/Kconfig"

if (!ARCH_DM320_20)

source "sound/Kconfig"

endif file://选择开发字符设备的驱动,而不需要声音的支持。

因为要把CODEC编入内核,所以我们还要加入支持CODEC的配置选项:

source "codecs/modules/Kconfig"

同时,如果我们要加入一个新外围设备,也需要在Kconfig文件中加入对应的内容。比如说,要加入一个三星的4英寸TFT

LCD的驱动,我们可以修改./drivers/char/Kconfig文件,并加入以下内容:

config DM320_SAMSUNG_ 4_LCD

tristate "DM320 SAMSUNG 4.0 inch 16:9 TFT LCD"

depends on ARCH_DM320_20 && BOARD_400H

default y

help

This driver provides support for SAMSUNG 4.0' 16:9 TFT LCD for

DM320.

其中,config DM320_SAMSUNG_4_LCD表示增加一个新的配置入口。一旦这个配置选项被选中就会在./include/linux/autoconf.h:有:#define

CONFIG_DM320_SAMSUNG_4_LCD 1的定义。

这样的话,我们在整个内核源码树中都可以使用CONFIG_DM320_SAMSUNG_4_LCD来进行特定的选择。

在tristate "DM320 SAMSUNG 4.0 inch 16:9 TFT

LCD"中,引号里的内容为出现在配置选项中的提示文字。tristate表示三态,意思是除了可以选择[*]、[ ]外,还可以选择[M],表示把当前内容当成模块编译。

depends on ARCH_DM320_20 && BOARD_400H表示如果前面配置平台框架时选择了ARCH_DM320_20,并在选择型号时选择了BOARD_400H,我们就可以看到这个对于三星4英寸TFT

LCD的配置选项。

default y表示默认把此驱动编入内核。help的内容为当我们对内核进行配置时,选帮助所看到的内容。

Makefile文件

简单地说,Makefile是用来进行项目配置和管理的。我们要把Linux编译、链接最后生成可执行的内核映像,Makefile文件是必不可少的。

在该PMP设计开发中,只需要把外设驱动模块加入相应的内核源码树就可以完成对Makefile文件的修改。以加入三星4英寸TFT

LCD驱动为例,只需要在./drivers/char/Makefile加入如下内容即可:

obj-$(CONFIG_DM320_ SAMSUNG_4_LCD) += dm320_lcd_samsung4.o

PMP系统设计中两个必须的驱动以及要注意的问题

LCD驱动程序

在一个PMP设备中,LCD显示屏是必备的。在LCD驱动程序的设计过程中,主要是要选好时钟源、分频系数以及时钟极性。比如在DM320中,时钟控制器有以下几个外部输入:PCLK、SYSCLK、MXI、M48XI,其中除了M48XI外其余均选择27M外部晶振。LCD的时钟频率DCLK在本系统中是由VENC(Video

Encoder Clock)确定,而VENC又可以通过系统的PLL分频而确定,所以说首先要选好时钟源和恰当的分频系数,然后通过设置VENC的寄存器就可以设置时钟的极性。

FrameBuffer驱动

FrameBuffer是把显存抽象成一个设备,通过对这个设备的读写就等同于直接对显存进行操作。这种操作是抽象的、统一的。用户不必关心显存的物理位置、换页机制等具体细节,这些都是由FrameBuffer设备驱动程序来完成的。

FrameBuffer对应的源文件在linux/drivers/video/目录下。全部的抽象设备文件作为fbcon.c与各种显卡驱动程序相关的源文件放在该目录下,如笔者所进行的针对DM320的FrameBuffer源文件dm320fb.c。在源文件我们要设置相应屏幕的长、宽以及每一个像素点的位数等等,还有一些与DM320

OSD(On-Screen Display)相关的寄存器的设置。因为涉及内容较多,在此不再赘述。

结语

本PMP方案设计的产品已经进入量产阶段,经过大量的用户测试,证实了整个设计是切实可行的。同时,其设计思路对于其他类似产品如车载GPS,都有一定的参考价值。

ti嵌入式linux设计外包,基于嵌入式Linux的PMP系统设计与实现相关推荐

  1. 嵌入式linux图片浏览器,基于嵌入式Linux图片浏览器的设计与实现.doc

    基于嵌入式Linux图片浏览器的设计与实现 PAGE PAGE II 本科学生毕业论文(设计) 题目(中 文): 基于嵌入式Linux图片浏览器的设计与实现 (英 文): The design and ...

  2. linux下网络收音机,基于嵌入式Linux的流媒体网络收音机系统的设计与研究

    摘要: 本文研究并设计了基于嵌入式Linux系统的流媒体网络收音机,让广大的普通家庭,特别那些不习惯于操作PC的儿童或中老年人,也能享受到网络,数字媒体,计算机技术所带来的乐趣.该系统在高性能32位处 ...

  3. 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计

    金融安全支付系统是专门针对金融领域应用需求,实现小型化.便捷.安全的自助交易的软硬件平台,能够为多种应用提供高速安全服务,解决目前交易信息在传输过程中存在的各种安全问题,实现金融信息的安全交易.基于该 ...

  4. linux图片浏览器设计目的,基于嵌入式Linu图片浏览器的设计与实现.doc

    基于嵌入式Linu图片浏览器的设计与实现 本科学生毕业论文(设计) 题目(中 文):基于嵌入式Linux图片浏览器的设计与实现(英 文):The design and implementation o ...

  5. iptv linux 安卓 盒子,基于嵌入式Linux的IPTV机顶盒设计

    摘要: 随着人们生活水平的提高和Internet技术的发展,IPTV开始走进人们的生活,IPTV是一种集网络.多媒体.通讯等多种技术于一体,向用户提供包括数字电视在内的多种交互式服务的崭新技术.作为I ...

  6. 充电桩用linux系统吗,基于嵌入式Linux的电动汽车交流充电桩的设计

    基于嵌入式Linux 的电动汽车交流充电桩的设计 张 琳1,任鸿秋1,苏 新2 (1.太原理工大学电气与动力工程学院,山西太原030024:2.华北电力大学电气与电子工程学院,河北保定071003) ...

  7. 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发

    O 引 言 随着以计算机技术.通信技术和软件技术为核心的信息技术的发展,嵌入式系统在各个行业中得到了广泛的应用.嵌入式系统已成为当今IT行业的焦点之一.而在嵌入式系统中,键盘是重要的人机交互设备之一. ...

  8. linux 农业分析,基于嵌入式Linux的农业信息采集系统设计与研究

    摘要: 精准农业是现代化农业发展的方向,将嵌入式数据采集技术应用到农业生产过程中,既可以节省人力物力成本,还可以提高农作物产量和质量,减少农药污染和提高生产效率.在精准农业生产过程中,需要采集和监测农 ...

  9. 嵌入式基于Linux电机控制,基于嵌入式arm+linux平台的直流电机调速控制系统.pdf

    2012--2013 学年第 二 学期 物电 学院期末考试卷 嵌入式系统与应用 学号 : 姓名 : 班级 : 成绩: 评语: 装 订 (考试题目及要求) 嵌入式大作: 采用实验箱上的电位器作为信号输入 ...

  10. 嵌入式linux界面开发,基于嵌入式Linux平台实现GUI系统的设计方案

    描述 嵌入式图形用户界面( GUI, Graphic UserInterface)系统作为嵌入式系统中的一大关键技术,为用户提供设备的控制接口,其性能的好坏,界面的美观程度,影响着用户对产品的购买意愿 ...

最新文章

  1. R语言之斐波那契数列
  2. hdoj 1269-迷宫城堡解题报告
  3. oracle批处理参数调用,bat调用jar包并传入多个参数
  4. 开发自己的 chart - 每天5分钟玩转 Docker 容器技术(167)
  5. VS2013怎么给实体类的属性自动生成set和get方法
  6. SAP CRM调查问卷的评分和图表显示功能介绍 1
  7. Linux Ubuntu终端“@”前后的含义及修改(修改用户名及主机名)【试用办法,部分不可行】
  8. MySQL查询结果导出到文件
  9. UWA发布 | 2017 Unity手游体检蓝皮书 — ARPG篇
  10. 那个准点下班的人,比我先升职了...
  11. Web前端面试指导(十四):如何居中一个元素(正常、绝对定位、浮动元素)?
  12. 【原创】微信支付遇到的各种坑及解决方案随笔记录,invalid signature, “errMsg“:“chooseWXPay:fail“
  13. Json字符串和Java对象互相转换
  14. 计算机硬件检测与维修理论试题,计算机硬件检测与维修理论试卷(A卷)
  15. Snapshot使用
  16. python实现气象数据分析实验报告_Python 气象数据分析
  17. MQTT-Eclipse paho mqtt重连机制
  18. 一文总结Keras的loss函数和metrics函数
  19. sql: expected 0 arguments, got 1
  20. Cocos Creator Layout组件

热门文章

  1. 苹果新操作系统realityOS曝光
  2. 曲线救国:提高github下载速度到2MB/s
  3. 别用Date了,Java8新特性之日期处理,现在学会也不迟!
  4. 面试遇到“一问三不知”的,真替他老东家捏把汗
  5. 怎么实现单点登录?面试必问!
  6. 张亚勤:终日“闭关”读论文,思考终极算法
  7. 饿了么:日订单量超900万的架构设计及演进之路
  8. 代码中的一个分号,引发程序员的疯狂热议
  9. 月薪三万,依然买不起房
  10. 微信小程序视图层WXML_小程序事件