一种通用手持终端的关键技术研究与实现_图文


西南交通大学 硕士学位论文 一种通用手持终端的关键技术研究与实现 姓名:赵淑晶 申请学位级别:硕士 专业:计算机应用技术 指导教师:杨斌 20080701

西南交通大学硕士研究生学位论文

第,l页

捅要
在当前日益信息化的社会中,伴随着计算机技术与行业应用的紧密结合, 通用计算机已经不再是信息产业的主角,嵌入式计算机系统,正逐渐成为计算 机时代的后起之秀。嵌入式技术与手持设备相结合,拓展出许多新的应用领域。 本设计基于¥3C241 0A处理器,开发出~款通用手持终端,并在此基础上实现 了该终端的两项关键技术:TFT-LCD界面显示及PCMCIA/CF接口的WLAN
功能。

本文设计并实现了以S3C2410A核心板为硬件核心的通用手持终端的嵌入 式硬件平台,独立设计的扩展板主要包括:4组DC.DC电源供电模块、JTAG 调试接口、3个UART串口、一个以太网接口、LCD模块电路、PCMCLVCF 接口电路、实时时钟供电模块、复位电路、系统总线驱动及扩展电路、触摸屏
电路等。同时,还支持USB Host/Device接口、SD卡接口。丰富的外设资源以

及高性能低功耗的处理器平台为通用手持终端的实现提供了较好的硬件支持。
本文对SHARP L0035Q7DH01 TFT-LCD模块和¥3C2410A内置的LCD控

制器接口进行了深入的分析,设计了专用的接口电路。采用MAX II系列CPLD 芯片实现了两者接口的时序适配,LCD上电顺序采用¥3C2410A的GPIO进行 管理。详细分析了Linux下帧缓冲区FrameBuffer的操作,并在此基础上完成 了该LCD模块驱动程序的移植。 本文设计了PCMCIA/CF硬件接口并对其软件驱动结构进行了详细的分 析,在此基础上实现了手持终端的PCMCI~CF WLAN功能。 .该通用手持终端经过测试表明其功能正常、运行稳定,具有一定的理论和 实用价值。 关键词:嵌入式系统;手持终端;¥3C2410A;tLCD;FrameBuffer;PCBCI^

西南交通大学硕士研究生学位论文 Abstract

第川I页

In the current increasingly information-based society,as the close combination of computer technology and industry application,general computer systems
are no

longer the main characters in information industry,and embedded computer systems
are

becoming



rising star ofthe computer age.Embedded technology and handheld


devices combine and expand to many new applications.T11is design developed universal handheld terminal based on¥3C241 0A processor,and based implemented two key
on

this

technologies:TFT:LCD Tllis paper designed and implemented the
on

display and universal

PCMCIA/CF WLAN.
hardware

handheld terminal

platform based

S3C2410A

core

board.The extended board designed by myself

includes:4.ch DC.DC,JTAG ICE,3.ch UART’1 0/1

00M王Ⅺ1emet,LCD module,
SD card.All these

PCMCI~CF,RTC and
the same time,this

Reset,bus drivers and extensions,touch—screen circuit.At supplies USB

platform

Host/Device,and
TFT—LeD

make



good hardware support for

handheld terminal.
Module


This paper maalyzed controller interface embedded

SHARP:LQ035Q7DH01

and

LCD

in¥3C241 0A processor in

detail,designed

dedicated GPIOs

circuit.MAX

II;CPLD Was used to adapt the timing interface

and

were used to deal with the power supply sequence in TFT—LeD module.Analyzed Linux FrameBuffer operations in detail and T11is paper
on

this basis completed LeD driver.

designed PCMCIA/CF

hardware interface and explored it’S Linux

driver structures.‘and then implemented the terminal.

PCMCIA/CF WLAN

function in the

The test showed that the terminal works correctly theoretical and practical value.

and

stably.It has



certain

Keywords:Embedded System;Handhe I d Term i PC,NCIA

na

I;S3C241 OA;LOD;FrameBuffer;

西南交通大学 曲南父迥大字

学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校 保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和 借阅。本人授权西南交通大学可以将本论文的全部或部分内容编入有关数据库 进行检索,可以采用影印、缩印或扫描等复印手段保存和汇编本学位论文。

本学位论文属于

1.保密口,在

年解密后适用本授权书;

2.不保密函使用本授权书。
(请在以上方框内打“√’’)

蓄簧产妾蒹荨二声职粕誓翥亍=.

锡斌
7.2-,

西南交通大学学位论文创新性声明
本人郑重声明:所呈交的学位论文,是在导师指导下独立进行研究工作所 得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体 己经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均己在 文中作了明确的说明。本人完全意识到本声明的法律结果由本人承担。
本学位论文的主要创新点如下:

西南交通大学硕士研究生学位论文

第1页

第:I章绪论
伴随着计算机技术与行业应用的紧密结合,通用计算机已经不再是信息产 业的主角,嵌入式计算机系统,正逐渐成为计算机时代的后起之秀。20世纪末 和21世纪初,基于嵌入式技术的手持设备成为信息产业新的经济增长点。人们 在追求手持设备的低功耗、高性能、小体积、易便携的同时,对人机交互的友 好性也提出了更高的要求,同时一些面向高端应用的手持设备还要求实现无线
网络功能。

本文的主要工作就是搭建起一个面向高端应用的通用手持终端硬件平台, 并在此硬件平台上实现手持终端的两项关键技术:液晶LCD(Liquid:Crystal Display)界面显示及WLAN(Wireless LAN)功能。该硬件平台基于¥3C241 0A 核心板构建,自主设计的扩展板实现了液晶显示屏、PCMCIA/CF无线网络接 口、以太网接口、USB接口、SD卡接口、触摸屏接口等丰富的外围设备接口。 软件方面,搭建起该平台的软件开发环境,并完成LCD驱动及PCMCIA/CF无
线网络驱动的平台实现。

1.{l嵌入式手持设备现状及关键技术
1.1.I嵌入式手持设备现状
随着嵌入式技术的不断进步,手持设备因其体积小巧、方便携带等特点, 在生产生活各个领域得到迅猛的发展。针对不同的应用,从低端的手持条码阅 读器、游戏机,到应用于水、电、气、公交等的各种IC卡手持机,再到高端的 手机、手持GPS导航仪、数码相机、PDA等。各种手持设备给我们的生产生 活带来了极大的方便。低端的手持设备因其功能单一、价格便宜主要面向大众 消费,中端手持设备主要面向服务及商业管理应用,而高端的手持设备因其功 能强大、价格昂贵主要面向商业人士和管理人员。 作为一个嵌入式系统,手持设备一般分为两部分:硬件平台和软件系统, 嵌入式处理器为硬件平台的核心,操作系统为软件必不可少部分。本文选用了 Samsung公司基于ARM920T核的¥3C2410A处理器,操作系统选用开放源码
的Linux操作系统。

作为主流32位RISC嵌入式处理器,ARM(Advanced

RISC

Machines)以

其高性能、低功耗的优势占据了很大的市场份额。ARM处理器是一个庞大的 家族,大致可分为如下几个系列:ARM7、ARM9、ARMl0、SecurCore、 StrongARM、XScale等。每个系列也有不同的版本,不同版本的处理器在一些

西南交通大学硕士研究生学位论文

第2页

局部特征上有一定的区别,如是否内嵌硬件乘法器等。ARM9处理器为ARM 核处理器中一款带MMU的处理器,它除了ARM处理器低功耗、低成本等共 性以外,相对以前的产品,其在性能上有大幅度的提升,并且对通用的操作系 统有更好的支持,主要应用在手持产品、视频电话、,PDA、数字消费产品、机
顶盒、家用网关等方面。

当嵌入式处理器的计算能力足够强大的时候,就需要操作系统来对各种资 源进行管理。当前应用于嵌入式手持设备的操作系统主要有Palm?OS、WinCE、
pocket

pc、Windows mobile、Linux等,除Linux外其他几种操作系统都是商业 化产品,其高昂的价格使许多小公司望而却步,而且其源代码的封闭性也大大 限制了开发者的积极性。嵌入式Linux操作系统以源代码开放、功能强大而又 易于移植被广泛应用于各种嵌入式系统,成为嵌入式操作系统里的一只新兴的
力量。

订.1.2关键技术
随着信息化的发展.,人们对嵌入式手持设备提出越来越高的要求,对于面 向高端应用的手持设备,不仅要有基本的功能实现,同时还要支持丰富生动的
界面显示及无线上网功能。本文使用TFT-LCD(Thin

Film Transistor LCD)及

PCMCIA/CF接口的无线网卡来实现通用手持终端的这两项关键技术。 重.界面显示技术 界面显示技术是嵌入式系统的一个重要组成部分,使用者只有通过它才能 知道嵌入式系统内部的运行状态。早期的嵌入式系统内往往采用LED数码管作 为显示简单信息的界面。但随着嵌入式系统的功能越来越复杂,大量人机交互 的功能都需要界面来完成,这也给嵌入式系统的显示界面提出了越来越高的要 求。液晶LCD在20世纪70年代初期实现商用之后,迅速以其轻薄短小和低耗 电量在嵌入式系统得到广泛应用。而今随着技术的不断进步,LCD己从早期的 TN类型发展到第三代的TFT类型。TFT型LCD因反应时间快、显示品质较佳 近年来在手机、PDA、数码相机及摄像机等嵌入式手持设备中得到越来越广泛 的应用。 2.WLAN技术 无线局域网(WLAN)就是在不采用传统电缆线的同时,提供传统有线局域网 的所有功能,网络所需的基础设施不用再埋在地下或隐藏在墙里,网络却能够 随着你的需要移动或变化。无线局域网技术具有传统局域网无法比拟的灵活性。 无线局域网的通信范围不受环境条件的限制,网络的传输范围大大拓宽,最大

西南交通大学硕士研究生学位论文 传输范围可达到几十公里。

第3页

无线接入技术区别于有线接入的特点之一是标准不统一,不同的标准有不 同的应用。目前比较流行的有蓝牙(Bluetooth)标准、802.11标准以及红外(IrDA) 标准。蓝牙系统提供一个快速而安全的短距离无线电连接;IrDA传输速率较低, 且需要一定的对准角度,为点对点的半双工传输,最大传输距离1米;IEEE 802.11标准的颁布,使得WLAN在各种有移动要求的环境中被广泛接受。它是 无线局域网目前最常用的传输协议,各个公司都有基于该标准的无线网卡产品。 因嵌入式手持设备一般对速度要求不是很高,802.11b标准规定的1 1Mbps速率 已能够满足要求,本文通过基于802.11b的PCMCIA/CF接口无线网卡实现通 用手持终端WLAN功能。

I.2本设计的目标及难点
本文的主要目标就是要实现一个以S3C2410A核心板为硬件核心的面向高 端应用的通用手持终端硬件平台,并在此平台上实现TFT—LCD界面显示及 PCMCIA/CF接口的WLAN关键技术。 研究的难点在于:
(1)嵌入式系统硬件设计、制作及调试的复杂性;

(2)TFT.LCD内部结构复杂,一般需要多路驱动电压,且具有众多的驱 动控制信号,这些驱动控制信号有任何的差错都会造成TFT.LCD不能正常显 示画面。由于TFT.LCD生产厂家众多,而TFT.LCD的生产并没有统一的标准, 一般情况下,TFT-LCD液晶模块并不能和处理器很好地适配,因此必须自主设 计TF.T.LCD的硬件接口,实现TFT.LCD与¥3C2410A处理器的无缝连接。 (3)Linux系统下TFT.LCD驱动程序基于FrameBuffer架构,FrameBuffer 驱动程序结构复杂,且由于TFT.LCD型号的多样性,Linux下FrameBuffer驱 动程序并不能支持所有的TFT.LCD模块显示,必须针对所选用TFT.LCD显示 屏对FrarneBuffer驱动程序进行必要的修改。
(4)¥3C241 0A处理器不包含PCMCIA控制器,必须自主设计PCMCIA/CF

接口电路。 (5)Linux下PCMCIA驱动程序结构复杂,不能支持所有的PCMCIA控 制器及每个厂家生产的PCMCIA/CF无线网卡,必须针对硬件选用的PCMCIA 控制器及无线网卡作出相应修改。

1.3论文的研究内容
研究工作主要分成两个部分:通用手持终端硬件平台设计和系统软件设计。

西南交通大学硕士研究生学位论文

第4页

其中,忱D接口及PCMCIA/CF接口的硬件及软件设计为本文的重点。
硬件平台是整个设计的物理实现,本通用手持终端硬件基于¥3C2410A核 心板,自主设计的扩展板提供了常用的外设接口:LCD液晶屏、PCMCIA/CF 接口、以太网接口、USB接口、SD接口等,能满足通用手持终端一般的外设
需求。由核心板及扩展板组成的通用手持终端硬件平台如图1.1所示。

图1-1硬件平台结构图

通用手持终端系统软件的开发分为4部分:引导加载程序Bootloader、Linux 内核及文件系统、相关驱动程序、硬件测试应用程序,如图1.2所示。
Linux移植
u-boot

相关驱动程序
FrameBuffer
h ,一

应用程序

移植

≥ I内核I
文件系统

LCD驱动
PCMCIA/CF

—-^

LCD液晶屏 测试程序 PCMCIA接口 测试程序

无线网络驱动

图1.2系统软件开发流程

Bootloader通过移植U.boot.1.1.2完成,主要完成必要的硬件初始化及加载 Linux操作系统功能;移植的Linux操作系统内核版本为2.4.18,采用文件格式 为Ext2的RAMDISK文件系统;在详细分析驱动程序结构的基础上实现了
Linux下基于FrameBuffer的LCD驱动程序及PCMCIA/CF接口的无线网络驱

动,并编写了LCD及PCMCIA接口的测试应用程序。

西南交通大学硕士研究生学位论文

第5页

第2章通用手持终端硬件整体设计
2.疆硬件总体设计
通用手持终端硬件基于¥3C2410A核心板,独立设计并实现了扩展板,扩展 板通过S0-DIMM200接口与核心板连接。扩展板重点设计了LCD显示电路及 PCMCIA/CF无线网络接口电路,由于是基于Linux的通用手持终端开发,为满 足手持终端的多种不同需求,还扩展了其他一些通用接口(如:以太网接口、 USB主/从接口、SD卡接口等),在实际产品开发中,可以根据手持终端的不同 需求对这些扩展接口进行删减。硬件总体结构如图2-1所示。

PCMCIAJCF接口电路 TFT-LCD显示电路 其他扩展接口电路

~80D1/200》

S3C2410A

核心板

扩展板 图2-1硬件总体结构图

‘¥3C2410A核心板是通用手持终端的控制核心,提供最基本的嵌入式处理器 及操作系统引导和程序运行所必须的系统存储器。扩展板提供通用手持终端所 需要的各种外围接口电路,包括:电源及复位电路、LCD显示电路、PCMCIMCF 接口、JTAG接口、串口、以太网接口、SD接口、USB主/从接口、触摸屏接 口及其他一些接口电路。 由¥3C2410A核心板及扩展板组成的通用手持终端硬件平台功能模块框图如
图2-2所示:

西南交通大学硕士研究生学位论文

第6页

图2.2硬件平台功能模块框图

(1)电源电路为核心板及扩展板提供电源,复位电路提供系统的上电和手 动复位功能; (2)TFT.LCD液晶屏为通用手持终端的显示设备。由于TFT.LCD液晶屏 信号时序与¥3C2410A LCD控制器信号时序不匹配,使用CPLD芯片进行两者
之间的时序转换;

(3)通用手持终端采用PCMCL们F接口的无线网卡实现WLAN功能。
由于S3C24lOA处理器不含PCMCIA控制器,使用PD6710桥接芯片扩展~个
PCMCIM/CF接口。

(4)操作系统内核及文件系统需要通过以太网接口下载,由于S3C2410A 处理器没有集成以太网控制器,采用DM9000E芯片从系统总线上扩展出~个 以太网接口。 (5)硬件平台的调试信息通过串口连接的超级终端显示。由于RS232串口 信号电平与¥3C2410A处理器LVTTL电平完全不同,通过MAX3232芯片实现
两者之间的信号电平转换。


(6)S3C2410A具有2路USB v1.1接口,本文将1路配置为Device接口,

西南交通大学硕士研究生学位论文
另一路通过AU9254 USB集线器芯片扩展出2路Host接口。 2.2

第7页

S3C2410A核心板介绍

基于¥3C2410A处理器的ARM9核心板,采用6层板工艺,具有超强的抗 干扰能力。
核心板的功能特点如下:

(’1).处理器:采用Samsung公司的ARM920T处理器¥3C241 0A,工作频 率高达203MHz,外部总线频率高达100~133MHz。 (2)SDRAM:Rynix公司的HY57V651620,64MB,提供程序的运行空
间。
(3)NAND Flash:Samsung公司K9F1208,64MB,装载操作系统内核及

文件系统。
(4)NOR

Flash:SST公司的SST39VFl601,2MB,装载引导程序Bootloader,

为系统提供自引导功能。 (5)晶振:12MHz晶振,、CPU内部倍频至203MHz,为核心板提供外部
时钟。
j,

(6)电源:单3.3V电源供电,板内自带1.8V LDO芯片。

2.3扩展板硬件设计
2.3.1,LCD显示电路
本文选用SHARP公司的一款3.5寸TFT.LCD模块LQ035Q7DH01作为通
用手持终端显示设备,使用Atera公司的MAX II系列CPLD芯片EPM240T100

实现LCD模块与¥3C2410A处理器的无缝连接。LQ035Q7DH01液晶模块本身 不带有驱动电压电路,因此还必须设计液晶电压电路。LCD显示电路框图如图
2.3所示,具体的电路原理图将在第4章详细介绍。

西南交通大学硕士研究生学位论文
’S3C2410A

第8页

LCD控制器

视频数据信号又



LCD液晶 RGB数据信号
卜\

∥ LQ035Q7DH0 1+

S3C2410A‘

CPLD芯片
卜\

液晶屏
卜\

处理器
¥3C2410A

(EPM240T100)




LCD液晶’/ 抛列“。’于佰芎

LCD控制器
同步时序信号‘

.r……”



液晶电压电路

图2—3 LCD显示电路框图

2.3.2.PCMC l

A/CF接口电路

本文使用PCMCIA/CF接口的无线网卡实现通用手持终端的WLAN功能。 由于S3C2410A处理器没有集成PCMC认控制器,本文选用BASIS公司的 CLPD6710-VC-B桥接芯片扩展出一个PCMCIA/CF接口。PCMCIA/CF接口电 路框图如图24所示,具体电路原理图将在第6章详细介绍。

数据
车—令 总线

《==冷
PDl5—甲DO

《D15 ̄Do


PCMCIA桥接

PAl0 ̄PA0 PIlIOR

驱动


CF接口
y一一

S3C2410A



芯片(PD6710)


PIll0W PnWR
PnOE卜、



处理器

驱动lA24。,

llUL

无线网卡

SKT.VCC IOR PnREG


控制 nWE > 总线 nGCS2 译 》 驱动 码

制 /OW MEMR 线 MEMW



PnCDl/2

图2-4 PCMCIA/CF电路框图

为增强系统的可靠性,在¥3C2410A处理器与PD6710桥接芯片间增加了总
线驱动电路。PD6710芯片为ISA.to.PCMCIA芯片,ISA总线接口中I/O空间

和内存空间是独立寻址的,而ARM体系中,I/O空间和内存空间是统一寻址的,

西南交通大学硕士研究生学位论文

第9页

因此增加了控制线译码电路,将PCMCIA的I/O空间及内存空间读写信号区分
开来。PD6710芯片除了给.CF无线网卡提供必要的数据、地址总线及读写控制 总线外,还提供CF卡所需要的电源线(SKT.VCC)及一些卡操作及卡状态检
测信号线,如PnREG、PnCDl/2等。


2.3.3电源及复位电路
?I.电源电路

扩展板除了要给¥3C2410A核心板提供一组3.3V电源外,其他接口电路还 需要一组3.3V电源(如以太网接口、PCMCIA/CF接口、触摸屏接口、串口等), ,USB接口及LCD接口电路需要一组5V电源,整个硬件系统用12V直流电源 进行供电,通过DC.DC器件LM2672实现电压变换以满足系统多种电压需求。 设计中采用了跳线方式分别拉高或者拉低控制引脚的电平从而实现了每组电源 的单独开关控制。5V供电模块的电路原理图如图2.5所示,其中,,V50为输出 电压,P2为控制电源开关的跳线器。其他供电模块原理相同。
R“
R45


P2

图2.5 DC.DC电源电路

2.复位电路 复位对于一个系统来说很重要,由于各个单元要进入正常工作状态,需要 可靠地复位,正常情况下有上电复位和手动复位。本通用手持终端复位电路如 图2-6所示。为增加可靠性,采用74HC04芯片进行复位信号驱动,复位电路
与PCMCIA/CF接口电路共用一片74HC04。

西南交通大学硕士研究生学位论文

第10页

图2-6复位电路

2.3.4串口电路
UART串口不仅是常用的通信设备接口,也是开发阶段重要的调试信息互 动端口,本通用手持终端硬件扩展了3个9芯串口。 由于RS.232.C标准所定义的高、低电平和¥3C2410A系统的LVTTL电路 所定义的高、低电平信号完全不同,LVTTL的标准逻辑“1"对应2 ̄3.3V电平,
标准逻辑“O"对应O ̄o.4V电平,而RS.232.C标准采用负电平逻辑方式,标

准逻辑“1”对应…5 15V电平,标准逻辑“0”对应+57¨15V电平。本文使
用MAX3232芯片完成两者之间的信号电平的转换,串口电路如图2.7所示。
—。石:

7半4宁;赫。

VCC V+

ICl+ C“

—LJ=!==c#






o-

l啪

kd 1
o--一

丰徽斗‰声 上
':=_ 14





‘=生c9 1 l,“

T“)ln

TtIN 置10L'r/"

鼬fX

T20LrI"T.-rl■l



一o- o---




R:“A20∞
.va..u".93232 V3剪}* 。J

o-—一
o-
o- I

.I

舒’
vj0C :


C1+

o一


……。I撼¨

—“=些c9】




IOC

、、h一_J一 —√—一
O'--'--

..L


书淼寿滁卜
T¨埘TtIN
&lfN T≥口uT 蔓to矿r T2IN

,:=生=(1l 1

10‘

O'-- ÷

o—
O'--
O-"

—r

Rg

R00W

MAX3232

~9’ _●--一

图2.7串口电路

西南交通大学硕士研究生学位论文

第11页

2.3.15以太网接口电路



以太网在现代嵌入式系统中有着举足轻重的作用,一方面以太网在实际应 用中使用非常广泛,另一方面在系统开发阶段以太网同时作为一个重要的调试 接口。常见的Bootloader和远程调试工具都通过以太网实现主机与目标机之间 的通信。¥3C241A内部没有集成以太网控制器,所以通过系统总线在外部连接 了一个DACICOM公司的DM9000E以太网接口芯片。电路采用16位总线方式 进行控制,数据总线DATA0.DATAl5与芯片的SD0.SDl5连接,地址线也进 行相对应的连接,片选线nGCS3与芯片的AEN相连。以太网接口电路如图2—8
所示。

图2-8以太网接口电路

2.3.为触摸屏接口电路
触摸屏有利于提高人机交互的友好性,¥3C2410A处理器支持触摸屏接口, LQ035Q7DH01液晶模块带有四线电阻式触摸屏。这里直接使用¥3C2410A内 置的触摸屏接EI+ADC进行采样,触摸屏接口电路如图2-9所示。这里U5和 U7是双MOS管(P&N沟道),CON3是连接触摸屏的连接插座。 触摸屏接口电路如图2—9所示。

西南交通大学硕士研究生学位论文

第12页

图2-9触摸屏接口电路
2.3.17

USB接口电路

¥3C2410A具有2路USB.v1.1接口,1路固定为Host接口(下行口),另1 路可配置为Host或Device接口。这两个下行口对应于芯片的引脚为DN0、DP0 和DNl、DPI。本系统中,将DNl、DPI引脚作为USB Device端使用,这样,
DN0、DP0引脚便成了唯一的下行口,无法满足丰富的USB外设要求,为此采

用了MICRO公司生产的AU9254芯片设计了一个集线器电路,通过集线器扩 展出2个USB下行口,基本可以满足通用手持终端的需要。USB接口电路如 图2,10所示,其中U30为AU9254USB HUB芯片,CON7为USB Host外部连 接口,CON8为USB Device外部连接口。

西南交通大学硕士研究生学位论文

第13页

图2—10 USB接口电路

除以上几个主要接口电路外,通用手持终端硬件平台还扩展了SD卡接口、 RTC实时时钟、系统启动选择、系统总线扩展和蜂鸣器等电路。因不是本文重 点,为节省篇幅,这里将不再一一介绍。

2.4硬件平台实物
由S3C2410A核心板和扩展板构成的硬件平台实物如图2.11所示。

图2.11硬件平台实物

西南交通大学硕士研究生学位论文

第14页

第3章通用手持终端软件平台的搭建
通用手持终端软件平台搭建包括系统引导程序的移植及Linux操作系统的 移植。在完成这些工作之前,首先必须构建嵌入式Linux系统的交叉编译环境。

3.疆交叉编译环境的建立
通用计算机系统上,软件开发一般采用本机开发调试、本机运行的方式。
这种方式通常不适合于嵌入式系统的开发,因为嵌入式处理器的性能、内存的

存储空问通常不足以运行开发工具和调试工具。嵌入式系统上的软件开发通常 采用交叉编译方式。先在宿主机(通常是PC或工作站)上建立交叉编译环境, 开发时使用宿主机上的交叉编译、汇编及链接工具形成可执行文件,然后把可 执行文件下载到对应的目标机上运行或调试。 在PC主机上构建嵌入式Linux开发环境,需要安装适合于目标处理器的 交叉编译器和调试器,以及将要使用的嵌入式Linux发行版本源代码。本系统 选用的交叉编译器为CTOSS 2.95.3。在工作目录下解压完工具链
CROSS

2.95.3.tar.bz2后要使用export命令增加编译器路径:

#export PATH=¥PATH:/usfflocal/arm/2.95.3/bin

ARM Linux内核源代码选用linux.2.4.1 8-rmk7-pxal.mz5。

在宿主机上安装完交叉编译工具及Linux内核源代码,交叉编译环境即构
建完毕。

3.2系统引导程序实现
嵌入式系统中,通常是由系统引导程序完成硬件初始化工作。我们把引导 程序称为系统的Boofloader,Boofloader是系统加电后运行的第一段代码。通过 这段代码,我们可以初始化必要的硬件设备,创建内核需要的一些信息并将这 些信息通过相关机制传递给内核,从而将系统的软硬件环境带到一个合适的状 态,最终调用操作系统内核,真正起到引导和加载内核的作用【3】。 Bootloadel"依赖于硬件实现,不同的体系结构和嵌入式板级设备配置所要求 的引导程序是不同的。大多数单阶段的Bootloader应用于简单系统,比如没有 操作系统的系统,主要完成处理器及外围设备的初始化操作。通常多阶段的 Bootloader能提供更为复杂的功能以及更好的可移植性。从固态存储设备上启 动的Bootloader大多数是两阶段的启动过程,也就是启动过程可以分为stage
常都放在stage 1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。


和stage 2两部分。依赖于。CPU体系结构的代码,比如设备初始化代码等,通

西南交通大学硕士研究生学位论文
stage

第15页

2则通常用C语言来实现,这样可以实现更复杂的功能.,而且代码会具有

更好的可读性和可移植性。

在嵌入式系统中常见的Bootloader主要有+U—Boot、VⅣI、Blob、RedBoot、 ARMboot等几种,本文的Bootloader通过移植U.boot-1.1.2实现。
在stagel阶段,u-boot.1.1.2主要完成以下工作:
(1)设置异常向量表;

(2)关闭看门狗,并禁止所有中断; (3)设置CPU的频率,然后禁止MMU和Cache: (4)配置内存控制寄存器;
(5)配置栈空间,并将BSS段清零; (6)复制NAND Flash代码到RAM中; (7)进入stage 2中C代码执行。
Stage

2部分全是由C语言实现,可读性较强,并且可以实现较为复杂的功

能。此阶段主要完成以下工作:
(1)定义初始化函数表:
typedef int(init._fnc_t)(void);

init—fnc—t宰init_sequence[】=<
cpu


产基本 CPU tini./球置设关相

board init, interrupt init,,
env

产基本开发板相关设置聿/
产设置异常宰/

init,

/宰初始化环境变量聿/ etarduab./卑率特波化始初枣/


init serial init,

/幸串行通信设置球/ /宰初始化控制台宰/ 产通知代码已经运行在何处聿/ 产配置有效的RAM组幸/

console init£ display mard,ren ,init ab. display_dram_config, #if

defined(CONFIGJCMA9)fI defined(CONFIG_CMC_PU2)
checkboard,

#endif NULL,

l;

西南交通大学硕士研究生学位论文 (2)配置可用的Flash区,并初始化内存分配;
(3)若有NAND Flash则进行NAND Flash的初始化;

第16页

(4)初始化环境变量; (5)设置P地址及MAC地址; (6)初始化外围设备,并使能中断; (7)进入。U.Boot的命令循环,,接受用户输入的命令.,然后进行相应的工
作。 3.3:L i


nux操作系统移植

复杂的嵌入式系统一般要有操作系统的支持,操作系统移植一般包括操作系 统内核的移植及根文件系统的制作。 1.内核的移植 内核是所有嵌入式Linux系统的核心软件,它负责为程序员编写的应用程 序分配所需要的计算机资源。内核在程序员编写的应用程序和硬件之间扮演一 个协调者的角色。负责为同时运行的程序分配资源,并管理程序所需要的内存 空间,具体点说,是为运行进程和线程分配必要的资源。 本设计移植的操作系统内核版本为2.4.18。 将内核源码解压到安装目录后,就可以开始对内核进行裁剪配置了:
make menuconfig make dep


make zlmage 这样便可得到一个定制的内核映像文件zlmage,即要下载到目标系统的内
核映像文件。

2.根文件系统制作 根文件系统是Linux系统启动的一个重要组成部分,也是操作系统正常工 作时的必要组成部分,在启动时内核需要根文件系统来挂载。在现代Linux操 作系统中,内核代码映像文件保存在根文件系统中,系统引导启动程序会从这 个根文件系统设备上把内核执行代码加载到内存中去运行【3】。 常见的根文件系统有RomFS、JFFS2、EXT2、RAMDISK、‘Cramfs等,其 中RAMDISK就是指使用系统的一部分内存空间来模拟一个用户熟悉的磁盘分 区,用户在RAMDISK上进行的所有操作都与传统的磁盘文件操作一样。 本文采用文件格式为Ext2的RAMDISK文件系统,具体实现上采用一个已 经做好的RAMDISK,然后根据自身系统的实际要求对已有的RAMDISK进行

西南交通大学硕士研究生学位论文 增减,完成RAMDISK的移植。
定制自己的根文件系统方法如下:

第17页

(1)在PC机的Linux操作系统环境下,生成可以虚拟成块设备的文件
init.img。 Sdd if=/dev/zero of=-init.img bs=8 1 92 count=1 024

其中bs*count为块设备大小(字节),生成init.img文件以后,还必须对该 文件进行格式化。
¥mke2fs_mo--F init.img

(2)新建一个文件夹ram,并将ini.img挂接到Tam目录。
¥mkdir ram

¥mount init.img ram/?o loop

这时,读写Tam目录,等效于读写init.img文件,将根文件系统所需的文件
写入到lram目录中,然后使用umount Tam命令卸载init.img,将已写入的文件 保存到init.img中。 (3)将修改过的init.img下载到开发板上。

西南交通大学硕士研究生学位论文

第18页

第4章LCD显示接口硬件设计
本通用手持终端LCD界面显示采用LQ035Q7DH01液晶模块。这款液晶模 块的显示分辨率为240×320,像素显示深度为6bit×3,可视尺寸为3.5寸,带 有4线薄膜电阻式触摸屏,背光采用高亮度LEDt41。本章首先分析了TFT-LCD 液晶的驱动原理,然后设计了LCD电源电路及与¥3C2410A处理器的接口电路, 并完成LCD的上电顺序控制,最后?CPLD编程实现¥3C2410A处理器与液晶模
块的时序适配。 4.1

TFT-LCD驱动原理
TFT.LCD液晶的信号驱动部件一般由LCD控制器、LCD时序控制器、源

驱动器、栅极驱动器构成。TFT.LCD液晶的正确显示有赖于各信号驱动部件的 共同配合完成。由于液晶面板本身并不发光,因此,还需要一个背光源来提供 高亮度且亮度分布均匀的光源。大、中型TFT.LCD~般将LCD时序控制器、 源驱动器和栅极驱动器都集成在TFT.LCD模块里面了,但本文采用的
LQ035Q7DH01 TFT-LCD模块并没有集成LCD时序控制器,因此需要设计专

用的接口电路来完成LCD时序控制器功能,本文采用编程CPLD芯片的方式 实现。本设计中的TFT.LCD驱动部件结构如图4.1所示。
1。一。’一‘一一’。’。‘ 1





同步信号¥==j=[一刁t二≈数据信号

:L—一■■—————◆ :: l LCD控制器l :

;广丙;百]

;¥3C2410A
处理器


图4.1本设计TFT-LCD驱动部件结构图

西南交通大学硕士研究生学位论文
(-I)背光源

第19页

3.5寸ⅡT.LCD背光,大都采用白光LED作为背光源,一般由6个串连的
白光,LED组成,驱动电压大概20V左右,20mA左右电流,是一个耗电量很大 的部件。对于电池供电系统,大都采用升压型DC.DC电路进行驱动。 (2)LCD控制器 本设计中¥3C2410A处理器集成了LCD控制器,它是专门用于处理器和液 晶屏的接口,可以独立地对液晶屏提供同步时序信号和显示数据信号,从而解 除了处理器在显示上的烦琐工作。其中数据信号在本文中是指18位的像素数 据,而同步信号包括:帧同步信号VSYNC(标志一帧扫描的开始)、行同步 信号HSYNC(标志一行扫描的开始)、数据使能信号VDEN和像素同步时钟
信号VCLK。 (3)-LCD驱动器 LCD驱动器主要用来生成TFT.LCD显示所需要的各种驱动信号,分为栅 极驱动器(Gate Driver)和源驱动器(Source Driver)。一般LCD驱动器所需

要的输入时序信号众多,且不同的LCD驱动器所需要的输入时序信号不尽相 同,但以下信号是所有LCD驱动器所必需的,如表4.1所示。LCD驱动器根 据这些输入时序信号生成TFT.LCD所需要的各种驱动信号,通常这些输入时 序信号由LCD时序控制器提供。
表4.1 TFT-LCD驱动器基本输入时序信号表 信号
DCLK





源驱动器数据移位时钟信号j用于锁定像素数据


SPL/S.TH
UP/TP CLS/CPV SPS/STV

行起始信号,标志着一行扫描的开始 行数据锁存信号 栅极驱动器移位时钟信号,用于实现扫描行的更换 帧起始信号,标志着一帧扫描的开始 基板公共电压信号

VCOM

(4)"LCD时序控制器

时序控制器是TFT.LCD信号驱动部件中负责时序管理的控制单元,它直接

控制着TFT.LCD中的驱动部件——LCD驱动器,主要完成LCD控制器与
LCD驱动器间的信号时序转换功能。只有保证其输出正确的控制时序,才能使
前端CPU的数据信号在TFT.LCD屏上正确显示。

西南交通大学硕士研究生学位论文

第20页

4.2:LCD显示接口硬件电路设计
4.2.疆电源电路设计
、LQ035Q7DH01液晶模块需要4组电源电压,分别为VSHA、VSHD、-VDD 和VEE;VSHA是模拟部分的电压,标准值为5V,耗电约为3mA;VSHD是 数字部分电压,标准值为3.3V.,工作电流约为’1.5mA;VDD是面板栅极驱动 正电压,标准值为15V,工作电流约为50uA;VEE是面板栅极驱动负电压, 标准值为一10V,工作电流约为50uA【4J。 液晶模块对各组电源的上电顺序有着较高的要求,因此系统应该具有相应 的电源管理功能,根据电压类型的不同,分别选取了带使能端的LDO和DC—DC 芯片作为其供电电路,电源的打开和关闭都由处理器GPIO端口控制。 t.VSHA及VSHD电源产生电路 液晶模块需要5V模拟电源VSHA及3.3V数据电源VSHD,且要求电源的 打开/关闭可控,按照此要求,本文选用Sipex公司带使能控制端的SP6201 LDO 系列芯片来产生这两路电源。在具体芯片选型上,采用固定输出的电源芯片
SP6201

50及SP6201.33。VSHA电源产生原理图如图4.2所示。根据数据手册

要求,电阻R3为470K;VSHA EN连接到S3C2410A处理器的.GPIO端口.,

用于控制电路的打开与关断;为使输出直流电压更平滑,在输出端连接了一个
1uF陶瓷电容。
V弼
VSHA

GND

GND

图4-2 VSHA电源产生电路图

VSHD电源产生电路与上图4.2原理相同,只是采用3.3V固定输出的 SP6201.33电源芯片,为节省篇幅,这里将不再给出其具体电路原理图。 2.VDD及.VEE偏压产生电路
液晶模块需要15V的栅级正向偏压VDD和.IOV的栅级负向偏压VEE,这

西南交通大学硕士研究生学位论文

第21页

两路电压一般采用升压电路来实现。此外,液晶电源的打开/关闭还要求可控, 因此,必须选用带有使能端的升压电源芯片。鉴于以上考虑,本文选用了Linear Tech公司的LTl945电源芯片,它可同时为液晶模块提供这两路电源,且具有 使能端口,完全满足于设计要求。VDD、VEE电源产生电路原理如图4.3所示。

图4.3 VDD、VEE电源产生电路图

使能信号端VEE EN和VDD EN连接到S3C2410A处理器的GPIO端口,

用于控制电路的打开和关闭。为减小输出纹波电压,在输出端分别连接~个luF 的陶瓷电容;根据数据手册提供的反馈电阻计算公式及所需的输出电压值,计 算得出反馈电阻RIO、R12、R13、R14的阻值分别为151K、22K、89.3K、1M。 3.背光源产生电路 LQ035Q7DH01液晶模块采用白光LED作为背光源,背光LED正向电压 VL典型值为21.6V,电流IL典型值为15mA[41。本文选用Linear Technology公 司推出的一款专为驱动白色LED而优化且带有芯片使能端的LTl932芯片来产 生背光源。液晶LED背光驱动电路如图44所示。

:F
GND

1.5K

图4_4LED背光驱动电路

西南交通大学硕士研究生学位论文
LED

第22页

EN芯片使能端连接到¥3C241 0A处理器的’GPIO端口,控制电路的

打开和关闭。?C2为输入旁路电容,为减小输出纹波电压,输出端连接一个luF 的陶瓷电容。根据芯片数据手册及液晶模块背光LED电流1L典型值15mA,编 程电阻R1阻值为1.50K。芯片SW引脚和LED引脚之间未接LED(电路空载) 时,SW引脚输出端就会产生一个10一15倍输入电压的高电压,这将会超过SW 端的最高电压36V,造成LTl932芯片的损坏。为避免这种情况的发生,在SW
端与LED端连接一个24V的稳压二极管。

4.液晶基板公共电压VCOM产生电路 任何一个TFT-LCD面板都至少需要一个适当调节的VCOM信号,以便为 面板的背板提供一个参考点。如果一直显示静止的图像,液晶电极上的电压就 会一直不变,当撤销电压时,液晶很难恢复原状,容易造成液晶损坏。解决这 问题的方法就是改变液晶的控制电压极性,也就是说即使是静止的图像,液晶 电极上的电压也一直在翻转。一般的LCD都采用行翻转的形式,通过改变公共 电压极性VCOM而达到翻转的目的。时序控制芯片一般会送出~个 M/POL/COM信号,我们用这个信号产生VCOM电压。通过调节VCOM的DC 端,可以改变LCD的色彩,调节AC端,可以改变LCD的对比度【111。本文的 VCOM电压由LQ035Q7DH01液晶模块产生的COM信号叠加一个直流电压形 成。电路原理如图4.5所示。三极管电路用于产生VCOM的直流电压,交流电 压由液晶模块输出信号COM提供,通过调节变阻器R7的值可以调节VCOM 的直流电压值。
V.;n


图4.5液晶VCOM电压产生电路

4.2.2、CPLD电路设计

?

由于LQ035Q7DH01液晶模块没有集成LCD时序控制器部件,因此不能和

西南交通大学硕士研究生学位论文

第23页

¥3C2410ALCD控制器直接连接。除了采用专用的接口芯片,使用,CPLD芯片 实现LCD时序控制器功能是一个经济可行的解决方案。根据系统要求,CPLD 芯片选用Altera公司的MAX II系列EPM240T100,电路原理如图4-6所示。

蕊烂} 絮甚
囊峙一I



DGⅧ;.;——一
MOD

};

…V^.DIj,;t

i承㈠婪
D弑茹,!:

微l;
。要,锈
DG¥,D B,

fj÷———一 、i

苦:罢 引i
g.o.1 i~

哂崤一 D(^Jl。1÷——一

嘴靼
篇:?i

篓j攀

嚆R施* I藿1
41

UJ*XⅢ¨l

戚LK,KD;盎=


图4-6CPLD电路原理图

将¥3C2410 LCD控制器输出的视频数据线、同步时序信号线作为CPLD的

输入信号,.CPLD产生的输出信号连接到LQ035Q7DH01液晶模块,以驱动液 晶显示。为测试CPLD程序功能及LCD硬件电路,引入了一个40MHz的外部 时钟,用于产生各种测试时序信号。KEY引脚连接到一外部按键,作为CPLD 功能的选择信号。默认情况下,CPLD执行S3C2410A LCD控制器与液晶屏间 的时序转换功能,液晶屏输出S3C2410A视频数据信息。按一次按键,.CPLD 开始产生测试时序及测试数据信号,此时输出到液晶屏的信息为测试数据信息。 再按一次按键,又返回到时序转换功能。这种方式,给液晶屏的硬件调试带来 了很大的方便。CPLD程序使用10针的JTAG编程接口下载到EPM240T100芯
片。

西南交通大学硕士研究生学位论文
4.3

第24页

LCD上电顺序控制实现
所有液晶显示器对于上电顺序都有严格要求,如果上电顺序不符合要求,

则不能正常显示,由上电顺序造成的错误一般表现为屏幕全白或者是全黑。 LQ035Q7DH01的数据手册上要求液晶模块的上电顺序如图4—7所示。
vl玲




广鼢,馘/


7f,锻
≤w 铥E

蛾父

j,



;\麟弋

o ; ?2吲3\:
;k

*——争

:K.
∞‰于二,,,



.O;磊T5,/

:o≤T7: ;

钧——————一{魄


!竺厶■————————飞 1魄弋—一
物D

图4.7

LQ035Q7DH01液晶上电时序要求

前面液晶电源电路设计中,我们都选取了带有芯片使能端的电源器件,因 此可以通过S3C2410A处理器的相应GPIO端口对这些电源的打开/关闭进行管 理。此外通过LCD控制器相关寄存器DATA信号也是可控的,将MOD信号也 连接到处理器的GPIO.口进行控制。在系统启动程序Bootloader中将所有LCD 相关电源使能端拉低,禁止使能,同时关闭液晶数据DATA显示,并置低MOD 信号。内核加载LCD驱动程序时,在LCD控制器初始化完成后按照LCD上电 顺序通过GPIO端口控制给液晶上电,在LCD驱动程序卸载时,通过GPIO端
口控制给液晶下电。

上电顺序控制程序实现如下:
≯PowerOn Sequence Control毫|

/宰VSHD_EN(GPC7)一>DataOn(LCDCONl)一>VSHA_EN(GPC6)-> VEE_EN(GPC4)一>VDD_EN(GPC5)一>LED EN(GPB0)->DelayNS(80) 一>MOD(GPCI0) //设置GPB端口功能
幸/

西南交通大学硕士研究生学位论文

第25页

硒PBUP=rGPBUP l(OxO l<<O);
rGPBCON=(rGPBCON&(<0x03《,o)))I(0x01<<0); //设置GPC端口功能

rGPCCON=(rGPCCON&(~(oX删))I(0xaa9a55aa<<0);
rGPCUP:rGPCUP

I(Oxffff);

//设置一GPD口为视频数据VD功能

硒PDUP=rGPDUP I(0xfff0;
rGPDCON=0xaaaaaaaa;

rGPCDAT=rGPCDAT&、(<ox01<<10);//先将MOD置低 rGPCDAT=(rGPCDAT&(~(Ox0 1<<7)))l(0x0 1<<7);//打开VSHD电源 DelayNs(2);
rLCDCONl=rLCDCONl 0x01;

//延时--d,段时间 //打开DATA显示

DelayNs(2); rGPCDAT=(rGPCDAT&(~(Ox01<<6)))l(0x01<<6);//打开VSHA电源 DelayNs(2);

rGPCDAT=(rGPCDAT&(一(oX01《4)))I(0x01<<4);//打开VEE电源
DelayNs(2); rGPCDAT=(rGPCDAT&( ̄(0x01<<5)))I(Ox01<<5);//打开VDD电源 DelayNs(2); rGPBDAT=(rGPBDAT&(~(Ox01<<O)))I(Ox01<<O);//打开LED显示 DelayNs(80);

//延时一段时间(大于2个帧扫描同期) //置高MOD信号

rGPCDAT=(rGPCDAT&( ̄(0x01《1 O)))I(0x01<<1 0);
4.4

CPLD实现TFT-LOD时序适配 LCD控制器分析

4.4.再¥302410A
S3C2410A

LCD控制器用于传输视频数据和产生必要的时序控制信号,如

VFRAME、VLINE、VCLK、VM等。

LCD控制器由REGBANK、LCDCDMA、VIDPRCS和LPC3600组成,如 图4.8所示。REGBANK有17个可编程寄存器组和256*16的调色板存储器, 用来设定LCD控制器。LCDCDMA是一个专用DMA,自动从帧存储器传输视 频数据到LCD控制器,用这个特殊的DMA,视频数据可不经过CPU干涉就 显示在屏幕上。vIDPRCS接受从LCDCDMA来的视频数据并在将其改变到合

西南交通大学硕士研究生学位论文

第26页

适数据格式后经VD[23:0]J差至0 LCD驱动器,如4/8单扫描或4双扫描显示模式。

TIMEGEN由可编程逻辑组成,以支持不同LCD驱动器的接口时序和速率的不
同要求‘13】。TIMEGEN产生VFRAME、,'VLINE、VCLK、VM等时序信号。

图4.8

S3C2410A LCD控制器模块组成框图

FIFO存储器通常位于LCDCDMA。当FWO为空或部分为空时,LCDCDMA

要求从基于突发传输模式的帧存储器中取出数据,存入要显示的图像数据,而 帧存储器是LCD控制器在RAM中开辟的一片缓冲区。当这个传输请求被存储 控制器中的总线仲裁器接收后,从系统存储器到内部FIFO就会成功传输4个 字。FIFO的总大小是28个字,其中低位FIFOL是12个字,高位FIFOH是16
个字。S3C241 0A有两个FIFO来支持双扫描显示模式。在单扫描模式下,只使 用一个FIFO(FIFOH)。’
S3C241 0A支持STN.LCD和TFT-LCD。TIMEGEN产生LCD驱动器的控

制信号,如VSYNC、HSYNC、VCLK、VDEN和LEND等。这些控制信号与 REGBANK寄存器组中的LCDCONl/213/4/5寄存器的配置关系相当密切,基于 LCD控制寄存器中的这些可编程配置,TIMEGEN产生可编程控制信号来支持
不同类型的LCD驱动器。

VSYNC和HSYNC脉冲的产生依赖于LCDCON2/3寄存器的HOZVAL域
和LINEVAL域的配置。HOZVAL和L/NEVAL的值由LCD屏的尺寸决定,如

公式(4.1)、公式(4.2)所示: HOZⅥ山=水平显示尺寸.1
LINEVAL=垂直显示尺寸.1
(4.1) (4.2)

VCLK信号的频率取决于LCDCONl寄存器中的CI.KVAL域。VCLK和 CLKVAL的关系如公式(4.3)所示,其中CLKVAL的最小值是O:

西南交通大学硕士研究生学位论文
VCLK(Hz)=HCLK/[CLKVAL+I)幸2]

第27页
(4?3)

帧频率是VSYNC信号的频率,它与LCDCONl和LCDCON2/3/4寄存器的

VSYNC、'旧PD、:VFPD、:LINEVAL、HSYNC、HBPD、HFPD、HOZ、厂AL和
CLKVAL都有关系。大多数LCD驱动器都需要与显示器相匹配的帧频率,帧
频率的计算方法如公式(44)所示: FrameRate三1/{[VSPW+1)+(VBPD+1)+(LINE、,AL+1)+(VFPD+1)]宰[(HSPW+ 1)+(HBPD+1)+(HFPD+1)+(HOZVAL+I)]宰【2聿(CLKVAL+I)/(HCLK)])
(44)

LQ035Q7DH01液晶模块显示分辩率为240*320,像素扫描频率为 4.5 ̄6.8MHz,行扫描频率为16.5~28kHz,帧扫描频率为58—86Hz。严格按照此 要求,LCD控制器的各时序参数配置如表4.2所示,CPLD编程实现LCD时序 控制器时,将根据这些参数值对计数器进行计数,以产生相应的时序信号。
表4.2 LCD控制器时序参数配置表
参数
CLKV久L

本文取值
8 2






HCLK/[(CLKVAL+1)球2]-像素扫描时钟频率 VSPW+I:帧扫描同步脉冲宽度,以扫描行数计 VBPD+I:帧扫描时,液晶显示区域前不显示行数 LINEVAL+1:液品屏面板每帧所显示行数 VFPD+I:帧扫描时,液晶显示区域后不显示行数 HSPW+I:行扫描同步脉冲宽度,以像素时钟计 HBPD+I:行扫描时,液晶显示区域左边不显示像素时钟数 HFPD+I:行扫描时,液晶显示区域右边不显示像素时钟数 HOZVAL+l:液晶面板每行所显示的像素数

VSPW
VBPD LINE、,AL VFPD

319 1 13 11 13 239

HSPW
HBPD HFPD HOZ、,AL

4.4.2

LCD时序控制器的CPLD实现

LCD时序控制器直接控制着TFT-LCD显示器中的驱动部件一LCD驱动器, 主要完成LCD控制器与LCD驱动器间的信号时序转换功能。本文使用CPLD 实现LCD时序控制器功能,首先对CPLD的输入及输出信号时序进行详细分 析,然后给出CPLD完成LCD时序控制器的编程方法。

1.,CPLD输入时序一S3C2410A:13CD控制器输出信号时序
¥3C2410A的LCD控制器在TFT.LCD模式下的输出信号典型时序如图4.9 所示。其中VSYNC是帧同步信号,VSYNC每发出一个脉冲,都意味着新的 一屏视频数据开始发送。而HSYNC为行同步信号,每个HSYNC脉冲都表明

西南交通大学硕士研究生学位论文

第28页

新的一行视频数据开始发送。而VDEN则用来标明视频数据的有效,VCLK是 用来锁存视频数据的像素时钟。在帧同步以及行同步的头尾都必须留有回扫时 间,例如对于VSYNC来说前回扫时间就是(VSPW+])+(vBPD+1),后回 扫时间就是(VFPD+I)-;HSYNC亦类同。这些信号的时序可以通过LCD控 制器的寄存器进行配置,如设定同步信号的宽度,设定时钟信号的极性等。

图4-9¥3C2410ALCD控制器输出信号时序

2.!CPL'D输出时序—也Q035Q7DH01液晶模块信号时序 LQ035Q7DH01液晶模块的时序信号为液晶驱动信号,信号较多,时序也比
较复杂。LQ035Q7DH01的主要驱动信号如表4—3所示。
表4-3 信号
DCLK CLS SPS LP SPL PS REV

LQ035Q7DH01主要驱动信号表 类型 输入 输入 输入 输入 输入 输入 输入 输入 像素时钟信号 栅极驱动器时钟信号 帧扫描开始信号 行数据锁存信号 行扫描采样开始信号 节电控制信号 反转控制信号,用于产生COM信号 像素f原色数据信号 功 能

RI'5:0]G[5:01 B[5:01

西南交通大学硕士研究生学位论文

第29页

IzQ035Q7DH01液晶模块的行、帧扫描时序如图4.10、4.11所示。
k★ k,

图4.10 LQ035Q7DH01行扫描时序

IW-4噶

图4.I I

LQ035Q7DH01帧扫描时序

3、cPLD编程实现 根据资源需求器件选型选取了Altera公司MAX II系列中的
EPM240T1
00t141。

为液晶模块硬件调试方便,本设计引入了一个外部时钟,作为液晶模块的 像素时钟,以产生液晶模块所需要的测试时序。这里选择了一片40MHz的有
源晶振为其提供时钟,LQ035Q7DH01的像素时钟频率应在4.5MHz到6.8MHz

之间,因此在测试时序产生单元中需要对40MHz的时钟进行分频,采用8分

西南交通大学硕士研究生学位论文 频,测试时序产生单元的像素时钟频率为5MHz。
reg[2:0]
clk_cntr;

第30页

.always@(posedge clk)
clk——cntr<--clk_cntr+1;

always@(posedge clk)
1q_dclk<--(clk_cntr<=3)?0:1;

时序设计中使用两个递加计数器,行计数器h cntr及帧计数器v cntr,初 始值均为0,程序根据计数值产生LQ035Q7DH01液晶模块所需的各种行、列 驱动及视频数据信号。 测试时序产生单元中,像素时钟由外部时钟分频提供,根据LQ035Q7DH01 液晶模块时序要求,行计数器h cntr对像素时钟lq dcll【进行模260计数,计 数值满259时清零。帧计数器v cntr对行进行模331计数,计数值满330时清
零。
?

在与¥3C2410A的LCD控制器进行时序适配时,像素时钟为¥3C2410A
LCD控制器像素时钟s2410 elk,这样才能与S3C2410A LCD控制器同步,同 时,行计数器h cntr在输入行同步信号s2410


cnysh_器数计帧,零清沿降下的

cntr在输入帧同步信号s2410 Vsync的上升沿清零。由此产生的液晶所需的

各种驱动信号必然也是同步于s2410 elk信号。

值得注意的是,在计数前,首先要分别将输入行同步信号s2410 hsync、帧 同步信号s2410 与时钟信号 s2410 elk 进行同步处理。在 s2410 hsync cnysv.的 下降沿产生行同步标志信号h
always@(negedge
s24 1 assign s24 1

g,在志标步同帧生产沿升上的 alf. s2410 vsync

信号v flag,程序根据行、帧同步标志信号进行相应的计数器的清零工作。
O_clk)
0__hsync;

0_hsyncr<_s24 1

h_nag=({s2410 hsyncr,s2410 hsync}---2’blO)?l:O;
s24 1

always@(negedge

o_clk)

s2410_vsyncr<--s2410vsync;
assign


flag=({s2410_vsyncr,s2410vsync}~2’b01)?l:O;

本文设计了两个:CPLD功能单元,一个用于产生液晶的测试时序及测试数 据信息,另一个用于实现LCD控制器与液晶模块间的时序转换功能,这两个功 能间的切换通过一个外部按键实现。 CPLD程序使用Vefilog语言设计,使用Quartus II进行综合、仿真和验证,

西南交通大学硕士研究生学位论文 仿真时序如图4.12所示。
]ps 2 525
rL:

第31页

81

9,2

us

163早4

u=

245了6

u:

327々8 u=409卢u=

——]广—]广—]广—]广—]广—]厂]厂—]厂—]



I}堕型啦雪懒婴旦扭!黼。ooo啤回黝ooooI炮舅《|(I{ooool㈣ooo。l粳潲师丽:I_E瓣而丽喘亘狮。l ——]广—]广—]广—]
广] 图4.12 LCD测试时序仿真图

I I

l l I









I I





i i i

1]



西南交通大学硕士研究生学位论文

第32页

第5章基于:ErameBuffer的LCD驱动程序实现
FrameBuffer(帧缓冲)是出现在Linux 2.2.XX以后内核中的一种驱动程序 接口,作为其他高级图形或者图形应用程序的基本函数库。这种接口将显示设 备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像而不必关心其具 体实现细节,只要将其映射到进程地址空间之后,就可以直接进行读写操作, 而写操作可以立即反应在屏幕上。本文的LCD驱动程序基于Linux下 FrameBuffer驱动程序开发。

5.玎FrameBuffer设备驱动分析
5.1.J1

FrameBuffer驱动程序分析

FrameBuffer对应的的源文件在linux/drivers/video目录下。FrameBuffer设 备驱动基于如下两个文件:usr/include/1mux/fb.h和drivers/video/fbmem.c。 1.“Ib.h"分析
(1)fb fix screeninfo fb fix


FrameBuffer主要的结构几乎都是在这个文件中定义的。这些结构包括: screeninfo含有当前FrameBuffer模式的许多信息,其定义了视频板

卡的某些固定的特性[17】。这些信息与硬件密切相关,并且是不可修改的,当选

定了显示控制器和显示器后,它的硬件特性也就定了下来。在这个结构体中最
重要的是smem len和line length,前者指示显存的大小,后者提供了一个显示

行的byte统计数,使显存指针很方便的移到下一显示行。
struct

fb—f”x—screeninfo{ id[163; 严图形设备标识信息木/

char

unsigned long smern_start; u32 smem 1132 type; u32 type u32 visual; u16 xpanstep; u16 u16 len;

产FrameBuffer物理起始地址幸/
产FrameBuffer内存长度木/

/*FrameBuffer类别木/ ;xua./球息信别类助辅产 /幸Visual类别木/ 产默认为0木/ /宰默认为0木/ /宰默认为O珠/ /木每行字节数木/

ypanstep;
ywrapst印;

u32 line length; unsigned long

mmio_start;

严内存映射起始I/O物理地址母/

西南交通大学硕士研究生学位论文
u32 mmio len; u32 accel; u16

第33页

严内存映射I/O长度车/ 严是否加速幸/ 产1保留肆}

reserved[3];

); 固定的屏幕信息可以使用系统调用FBIOGET.-FSCREENINFO获得。
(2)fo—vat—screeninfo fb
var


screellinfo结构描述了显卡的特性‘1刀,这些特性在程序运行期间可以

由应用程序动态改变。成员变量xres和yres定义了显示屏上真实的分辨率;而 xres virtual和yres virtual是虚拟分辨率,它们定义的是显存分辨率。xoffset
表示从什么位置开始显示,例如xoffset--0,表示从显存0列开始显示xres列。
struct

fb—vat—screeninfo{
u32 xres;

,唯可视部分分辨率 严虚拟分辨率

幸/

—鄙2
u32

yres;
xI'eS

yirtual;

幸/

二心2 二心2

yres_virtual;

u32 xoffset; yoffset;

产可视部分和虚拟部分的偏移值术/
;严每个像素的位数 /宰 lexip_rep_

u32 bits u32 grayscale;
struct fb bitfield red;

/唯灰度还是彩色宰/ 户颜色球/

struct fb——bitfield green; struct fb——bitfield blue; struct fb

bitfield

transp;户透明

掌/

u32 nonstd;

严非标准像素格式宰/ 严图像高度(111m)
球/ 靠/

—Iu32

activate;

u32 height; u32 width; u32 accel flags;

/聿图像宽度(衄)
严加速标记
球/

严除了像素时钟,下面的值都是以像素为单位聿/
u32 pixclock; u32 left

户像素时钟(ps)幸/ 产从行同步到显示图像的时间母/

margin; margin;

u32 right margin; u32 upper

产从显示图像到下一行同步时间
/枣从帧同步到显示图像的时间
?/

幸/

西南交通大学硕士研究生学位论文
-u32 lower margin; u32 hsync 1en; u32 vsync 1en;

第34页

产从显示图像到下一帧同步时间 严行同步宽度幸/ 严帧同步宽度宰/

二心2

sync;

二心2 vmode; 二心2 reserved[6]; } 可变的屏幕信息可以使用系统调用FBIOGET VSCREENINFO获得。通过

改变这些值,驱动程序将对这些值进行优化,以满足设备特性(如果设备不支 持设定的值,返回EINVAL)。
(3)fo—info fb

iIl:fo结构定义了当前显卡FrameBuffer设备的独立状态,一个显卡可能

有两个FrameBuffer,在这种情况下,就需要两个fb info结构,这个结构是唯 一在内核空间可见的。在这个结构中有一个fb ops指针,指向驱动设备工作所
需的函数集。
struct

fo_info{

char

modename[40];

产默认的显示方式霉/
MODULE


#define FBINFO FLAG
struct fb ‘struct fb ’struct struct struct

严底层驱动是一个模块聿/

Var screeninfo var; fix screeninfo fix;

严当前的Var幸/ 产当前的丘X幸/

tb_monspees monspecs;

严当前监视器规格宰/

fb_cmap cmap;严当前的cmap木/

fb_ops水fops;严指向设备驱动函数集木/

char*¥creen

struct display木disp; struct

base;产虚拟地址掌/ 严初始化显示变量宰/

vc—data幸display_fg;产在显示器上控制器可视聿/

char

fontname[40];严默认的文字类型宰/


(4)fb_ops

‘fo_ops这个结构就是用来支持通过ioctlO系统调用操作设备的。
struct fb

opS{

西南交通大学硕士研究生学位论文
严打开/释放和使用标记斗/
struct module宰owner;

第35页

int(*fb_open)(struct

fb—info木info,int

user); user);

int+(球fbrelease)(struct iIlt(宰fb—get__fix)(struct 严得到可设置参数聿/

fb__info宰info,int

严得到不可设置参数引
fb—fix—screeninfo枣fix,int con,struct

fb—info宰info); fb—info宰info); fb—info冰info);

int(木fb_getvar)(struct fb—vat—screeninfo木val7,im


con,struct

严得到colormap*/ int(球fb_getcmap)(struct /卑设置colormap*/
int fb cmap聿cmap,int kspc,int COIl,struct

rfb

set

cmap)(struct fb_cmap球cmap,int

kspc,int con,struct

fb—info宰info);


2.

“tbmem.c一分析

“fbmem.C"处于FrameBuffer设备驱动技术的中心位置,它为上层应用程
序提供系统调用,也为下一层的特定硬件驱动提供接口。那些底层硬件驱动需

要用到这里的接口来向系统内核注册。“fbmem.c’’为所有支持FrameBuffer的 设备提供了通用的接口,避免重复工作。这里对“fbmem.C’’比较重要的几个 变量、结构体和函数作一介绍。 (1)全局变量
struct

fb.info幸re百stered_fb[FB_MAX】;

im num_registered_fb;

这两个变量记录了所有fb.info结构的实例,所有设备对应的fb info结构 都保存在数组re百steredjb中,当一个FrameBuffer设备驱动向系统注册自己时,
其对应的fb—info结构就会添加到这个结构中,同时num_registered_fb会自动加
1。

(2)结构体
static
const

struct{
char水name;

hat(*iniO(void); int(木setup)(void);

}fo_drivers[L』t貅{…);

西南交通大学硕士研究生学位论文

第36页

如果FrameBuffer设备被静态的链接到内核,其对应的入口就会添加到这个
表中;如果是动态加载的,即使用insmod/rmmod,就不需要关心这个表。
static struct file_operations

fb_ops={

owner:THIS_MODULE, .read:fbread,
write:fb write, iocfl:fb_ioctl,

mmap:fo_mmap,
open:fb_open, release:fb—.release


fb

ops用来给应用程序提供接口。

(3)函数 registerframebuffer(struct fb—info肆fb_info); unregisterframebuffer(struct
fb—info牛fb

info);

这两个函数是提供给下层FrameBuffer设备驱动的接口,设备驱动通过这两 个函数向系统注册或注销自己。底层设备驱动所要做的几乎所有事情就是通过
fb

inf0结构向系统注册或注销自己。

5.疆.2

FrameBuffer程序的实现方式

应用程序对FrameBuffer的控制,主要有下面三种方式: (1)读/写/dev/fb:相当于读/写屏幕缓冲区。 (2)映射(map)操作:通过映射操作,可将屏幕缓冲区的物理地址映射 到用户空间的一段虚拟地址中,之后用户就可以通过读写这段虚拟地址访问屏 幕缓冲区,在屏幕上绘图。 (3)I/0控制:对于帧缓冲设备,设备文件的ioctl操作可读取/设置设备及 屏幕的参数,如分辨率、显示颜色数、屏幕大小等,ioctl的操作是由底层的驱 动程序来完成的。 因此,FrameBuffer驱动要完成的工作已经很少了,只需分配显存的大小、
初始化显卡控制寄存器、设置修改硬件设备相应的vat信息和fix信息。

编写FrameBuffer程序需要做以下工作:
(1)编写初始化函数

初始化函数首先初始化显卡控制器,通过写寄存器设置显示模式和显示颜

西南交通大学硕士研究生学位论文

第37页

色数,然后分配显卡显示缓冲区,最后初始化一个fb—info结构,填充其中的成 员变量,并调用register_framebuffer(&fb_info),将fb—info登记入内核。 (2)编写结构fb info中函数指针fo spo.数函员成的应对 对于嵌入式系统的简单实现,只需如下三个函数: int(*fb_geLfix)(struct int(*fb_get_var)(struct
fb—fix—screeninfo宰fix,int con,stmct fb—var—screeninfo聿var,int con,struct

fb—info木info); fb—info咏info);

int(幸fb—set—var)(struct fb_var_screeninfo聿vat,hat con,struct fb.jnfo唯info); 这些函数都是用来设置、获取fb证fo结构中的成员变量,当应用程序对设 备文件进行ioctl操作的时候会调用它们。例如,fb__get_fix(),应用传入
fb fix fb—set

screeninfo结构,在函数中对其成员赋值,最终返回给应用程序;
vat0传入fb—var—screeninfo结构,函数中对xre¥,yres,bit_per_pixel等

赋值。 5.2

FrameBuffer驱动程序平台移植
本驱动移植是基于s3c241 0 FrameBuffer驱动,因此主要的修改工作就是根

据通用手持终端硬件平台修改相应的寄存器设置,以适应所使用的LCD显示屏。 主要移植步骤如下: (1)将驱动程序s3c2410fb.C、s3c2410fb.h源程序放到drives/video目录下, 有了这两个文件,还需要在编译时能够将它们编进内核。 (2)修改S3c2410fb
math

info结构。

修改这个结构中定义的所用显示屏的一些信息,如LCD时序信息等。


#ifdefCONFIG一¥3C2410一SMDK
static struct s3c24 1 0fb—mach—info pixclock: 1 74757,

xxx—sm—info——initdata={
bpp: 1 6,

#ifdef CONFIG——FA——LCD—.2432
XI'CS:

240, 320,

yres:

#ifdefCONFIG—F入1CD一2432
hsync_len


14,

vsync_len

:3,

left_margin: right_margin-

1 2,

uppermargin:5,

1 4,lower_margin:2,

0,

cmap_static:1,

西南交通大学硕士研究生学位论文
reg:{
lcdconl:LCDl一BPP一1 6T LCDl—PNR。TFT

第38页

LCDlzCLKVAL(8),

lcdcon2:LCD2__VBPD(4)I LCD2_VFPD(1)I LCD2-ySPW(2), lcdcon3:LCD3_HBPD(1 1)l LCD3_HFPD(1 3),

lcdcon4:LCD4_HSPW(13)l LCD4_MVAL(13),
lcdcon5:LCD5一FRM565 LCD5一HWSWP LCD5__PWREN, ), (3)修改linux/drivers/video/fbmem.c’在fb drivers结构声明前,添加代 码:
extem hat s3c2410fb_init(void); extem int s3c241 0fb_setup(char木);

LCD5一INWLINE

LCD5一INVVFRAME

在fb drivers结构里,添加如下代码作为¥3C2410 FrameBuffer驱动入口:
#ifdef CONFIG——FB——¥3 C24 1 0

{’fs3c2410”,s3c2410fb_init,s3c2410fb_setup),
#endif

内核通过这个文件调用相应的fb驱动。

(4)修改drivers/video/MakeFile文件,进行video目录内的编译,通过文 件选择决定把哪些模块编入内核。
在声明驱动的区域添加: obj一¥(CONFIG_FB一¥3
C24 1 0)—仁s3c24 1 0fb.O

(5)修改drivers/video/Config.in,这个文件包含一些配置信息,在顶层目
录#make menuconfig时,与显示相关的配置从这个文件中读取,要在配置时能 识别¥3C2410 FrameBuffer,需要作如下修改:

添加:
if[I.¥CONFIG—FB¨=”Y”];then if[”¥CONFIG—ARM”="y1’];then
dep_tristate ’¥3C241 0 LCD support’.CONFIG—FB一¥3C241 0

¥CONFIG..ARCH—.S3C2410 dep_bool


ZSJ

240聿320

LCD

Module

support’

CONFIG——FA——LCD——2432¥CONFIG—.FB——¥3C2410

这表示如果配置了CONFIG FB¥3C2410,就可以选择本设计240*320 的支持。

LCD

4CONFIG FB_¥3C24 1 0=y

CONFIGFA
tCD

LCD 2432--y

筹筘麓篙蒜僦舞涎:,
直接写屏应用程序开发

E 5?

“1…%门厂口1。。


调用驱动层菡甄■≤品F
一,_getvar等获取显示设备特性





结束

图5-1应用程序操作FrameBu腑流程

西南交通大学硕士研究生学位论文

第40页

本文设计了一个应用程序在液晶屏指定位置上显示一幅图片,用来测试 FrameBuffer驱动程序移植的正确性。程序流程如图5.2所示,测试结果见本文
7.1.2节。

图5-2图片显示程序流程图

西南交通大学硕士研究生学位论文

第41页

第6章PCMC:IA/CF接口硬件设计及驱动程序实现
自从802.11无线局域网标准制定以来,基于WLP,N技术的无线通信得到了 迅速发展。人们对WLAN技术的应用不仅仅局限于通用的笔记本无线联网,嵌 入式系统手持终端实现无线通信成为应用的热点。本文通过PCMCIA/CF接口 的无线网卡实现通用手持终端的WLAN功能。本章首先分析了PCMCIA/CF接 口的特点,进而设计了通用手持终端PCMCIA/CF硬件接口电路,最后在详细 分析Linux系统下PCMCIA驱动程序结构的基础上,完成了硬件手持终端的 PCMCIA/CF无线网络驱动程序的移植。
i6.1

PCMCIA/CF接口特点
PCMCIA(Personal
Computer

Memory,Card

International

Association)总线技

术旨在发展一种只有信用卡大小的计算机外部设备,因其具有灵活性和可扩展 性,,被PCMCIA组织命名为PC卡(PC Card)。PC卡根据功能分为两大类:
(1)数据存储卡:包括Flash Memory(快闪存储器)卡、RAM卡、IDE—ATA 卡等; 驱动器卡等。
CF(Compact


(2)外部扩展(i/o)卡:包括FAX/MODEM卡、各种网卡、硬盘卡、光盘 Flash)卡标准和PCMCIA卡标准非常类似,接口一共有50

针,和PCMCIA接口的68针相比只是少了一些地址线和Vpp电源而已。 作为PCMCIA接口的精简和延伸,,CF接口更适合嵌入式系统应用:.CF卡 的尺寸只有PC卡面积的1/3,更小巧,移动性更强;CF卡支持5V/3.3V.供电, 且多数接口卡均工作在3.3V,相对于很多老式PC卡所需要提供的5V电压更 省电,使嵌入式系统的持续工作时间更长。正因为这些优点,CF卡在嵌入式系 统得到了非常广泛的应用。 疆.,PCMCIA/CF与嵌入式系统接口方式 大多数嵌入式系统不能直接接口PCMCIA/CF卡,需要一个桥接适配器 (HBA)来实现嵌入式处理器到PCMCIA/CF的转接。桥接器肩负“翻译者” 的角色,一方面要匹配嵌入式处理器总线逻辑,与7CPU总线直接挂接,另一方 面要配置PCMCI~CF总线逻辑,与插卡进行接口。在CPU对PCMCIA/CF进 行操作时,桥接器则负责总线逻辑信号的翻译和转换,实现CPu与插卡的透明 连接。嵌入式系统中PCMCIA卡的接口方式如图6.1所示。在这里,桥接适配 器要实现的功能很多,诸如存储空间窗口的映射、卡电源管理、PCMCIA/CF 总线访问时序的初始化、插卡中断的检测、卡上中断的路由以及FIFO缓冲的

西南交通大学硕士研究生学位论文
管理等等,逻辑非常复杂。

第42页

主机总线

图6.1 PCMCIA/CF与嵌入式系统接口方式

由于支持多种类型接口卡,因此系统须具备识别卡类型的能力。 PCMCIA/CF内部有一个属性内存空间(ClS),专门用于存放卡的信息。在 PCMCIA/CF适配器读写属性内存空间之前,适配器并不知道插入的 PCMCIA/CF卡是什么类型的,支持的速度是多高,这些信息都需要读取属性
内存空间的CIS才能知道。

2.1PCMCIA/CF接口的工作方式 PCMCIA接口的工作方式可分为两种.,一种是Memory Only方式,一种是 I/O方式。Memory Only方式只提供对存储区域的存取,为老式存储卡所采用。 I/O方式提供对I/O接口的操作,因为卡的配置信息在存储区中,所以I/O扩展 卡上需要同时支持I/O方式和Memory方式。
(1)Memory Only方式 Memory Only接口支持存储卡,这种方式下接口信号不包括FO卡所需要

的信号。它提供READY、WP和BVD[2:I]接口信号。在PCMCIA 2.0之上版

本中还支持RESET或WAlT信号所提供的功能。
当加载了电源Vec或采用RESET信号对接口重启时,插槽和卡都采用
Memory Only接口方式作为缺省的工作方式。卡信息结构CIS被成功解析后,

卡和插槽可以作为I/O接口方式工作,否则还将继续配置成Memory Only方式。 存储卡中的存储空间分为通用存储空间(Common Memory)和属性存储空 间(Attribute’Memory)。属性存储空间最大为64M字节,是存储卡内与通用

存储空间完全不同的一段存储区域,通过接口的REG信号来区分CPU对这两
个区域访问。

西南交通大学硕士研究生学位论文
(2)IO方式

第43页

IO方式的接151卡包括除了READY、WP和BVD[2:I]之外的所有Memory Only方式下的信号。除了这些信号之外,还支持中断申请Ⅱ迎Q,IO端口位宽 指示IOISl6,IO读写lORD和IOWR,输入确认INPACK,音频信号SPKR和 卡状态改变信号STSCHG。

6.2托MC狐/CF接口电路设计
本文欲通过PCMCIA/CF接口的无线网卡建立起通用手持终端的802.1 1b无 线局域网。由于S3C241 0A处理器没有集成PCMCIA桥接控制器,为了连接 PCMCIA/CF接口的无线网卡,必须设计专用的接口电路,从处理器的外部数 据地址总线上扩展出PCMCIA/CF接口。实现方法基本上有2种:一种是专用 芯片,一种是用组合逻辑。专用芯片实现PCMCn接口的优点是:从硬件角度 看,芯片可靠性高、一致性好;从软件角度看,每一种商用控制芯片都配有BIOS
厂商以插槽服务程序(Socket Service)方式提供的设备驱动程序,应用起来十分

方便。缺点就是会增加成本。综合考虑,本文PCMCLVCF接口的实现采用第 一种专用芯片的方式,芯片选用BASlS公司的专用ISA-to.PCMCIA芯片
一CL-PD671 0.VC.B。

PD6710芯片构建PCMCIA/CF接口的电路原理如图6.2所示。 (1)电源管理采用TI公司的TPS2211芯片,该芯片其实就是根据输入信 号来选通给PCMCIA接口供电的PC卡工作电压SKT.VCC。 (2)PD6710芯片的中断信号有两个: INTR和取O。其中INTR信号报 告的中断是关于PCMCIA接口管理的,比如卡的拔出和插入、电池电量报警或 是READY信号的变化等,本设计中将此管理中断信号连接到处理器的INT3 端口。而IRQ信号报告的中断是关于PCMCIA插槽里面PC卡的操作中断。IRQ 的中断路由有多个,可以通过设置PD6710芯片的寄存器来决定使用哪一个中 断路由,本设计中使用IRQ3,将它连接至处理器的EINT8端口,用于报告PC
卡的操作中断。

(3)ISA总线接口中,I/O空间和内存空间是独立寻址的,因此它们有各 自不同的读写信号。但是在ARM体系中,I/O空间和内存空间是统一寻址,因 此电路设计的时候用高位地址线(ADDR24)来区分I/O空间和内存空间的读 写,为此,用组合逻辑增加了一些译码的电路(74HC04、74LV32电路)。当 ADDR24为逻辑1(高电平)时,对Bank2总线操作时可对PD6710的I/O空 间访问;当ADDR24为逻辑0(低电平)时,对Bank2总线操作时可对PD6710

西南交通大学硕士研究生学位论文
的内存空间访问。

第44页

图6-2 PCMCIA转CF卡接口电路

西南交通大学硕士研究生学位论文
6.3,PCMC;I

第45页

A/CF驱动程序实现

{6.3.疆PCMCIMCI了接口软件构架
:Linux系统下PCMC队子系统由三层构成,由底至顶分别是Socket
Service

(卡槽服务)层、Card Service(卡服务)层和Card Client(卡客户)层,应用 程序处于PCMCIA三层驱动的上层。每一层都通过标准API接口为上层提供服 务,最上层的应用软件也是通过应用层API函数实现对PC卡的读写和操作。 其软件结构如图6-3所示。
应用层


l戍用科序
Card

I I


Client(PC卡客户层):


Card

超级用户

Service(卡服务层)



Socket

Service(卡槽服务层): 物理层

(PCMC队主总线适配器) PCMCLVCF接口软件结构



圈6-3

(1)Socket Service层.
Socket

Service层是处理最底层硬件的软件层,包含了对PCMCIA控制器的

具体操作函数集合,并向Card Service层提供硬件无关的统一的API接口。配 置多个PCMCIA控制器的系统相应的也需要多个Socket Service支持,以保证 PC卡的驱动程序与PCMCIA插槽无关。在PCMCIA标准中,每一个对应的
Socket

Service都被称为一个“实例"(instance)。但是卡服务层只有一个,所

有的Socket Service“实例’’都为同一个卡服务(Card Service)工作。
(2)Card Service层
一Card Socket

Service是PCMCIA子系统中最大的一个组件,提供对于操作PC卡和
Service

Service层的标准API。它的实现采用客户机/服务器(Client/Server)结

构,可以同时为多个Card Client提供服务。上层用户(Client)通过Card
管理PC卡。

西南交通大学硕士研究生学位论文
(3),Card

第46页

Client层

-CardtClient是使用Card Service提供的接口函数实现的对于具体PC卡的驱

动程序,这一层中的Driver Service模块提供了PC卡的驱动程序和用户模式的 应用程序(cardmgr、cardctl等程序,用来记录、跟踪PC卡的插入/取出,并且 加载/移去相应的Card Client驱动程序)之间的链接。在卡插入和拔出的过程中
Driver

Service永久的绑定在所有的sockets上,并根据“事件’’(events)的触

发,通过BindDevice函数将普通客户驱动链接到对应的卡上,因此,Driver
Service也被称为“超级用户"。

通常我们将Socket Service和.Card Service称为HBA(主总线适配器)的驱 动程序,而将Card Client称为PCMCIA卡的驱动程序。 当PCMCLA/CF卡插入适配器插槽后,驱动程序的运行过程如下: (1)PnCDl和PnCD2信号触发HBA的中断服务程序(Socket Service); (2)HBA的中断服务程序发现有卡插入后,通过VS信号判断该卡的供电 电压,、然后给PCMCIA/CF卡上电,并复位卡,直到PCMCIA/CF卡初始化完 毕并给出READY信号; (3)HBA的驱动程序向系统申请一个比较小的空间,并将此空间分配给

PCMCWCF卡的属性内存空间;
(4)HBA读取PCMCIA/CF卡属性内存空间的?CIS信息,并根据CIS信 息的长度不断调整分配给PCMCIA/CF卡的属性内存空间大小,直到所有的:CIS 信息都被读出来; (5)HBA的驱动程序(Card Service)根据CIS信息对设备的具体描述加载
相应的PCMCIA/CF卡的驱动程序;

(6)PCMCIA/CF卡的驱动程序(Card Client)加载后,通过HBA的驱动 程序完成对卡的配置,接着开始从HBA的驱动程序手中接管PCMCIA/CF卡的 控制权。 完成以上过程后,PCMCIA/CF卡便可开始正常工作。
£6.3.2

PD6710编程结构

在开发PD6710驱动程序之前,需充分掌握芯片内部编程结构,对PD6710 的编程主要通过对其内部寄存器的操作来实现。 澶.PD6710内部寄存器访问机制 PD6710芯片所占用的系统空间可分为2个部分:一部分空间是PD6710芯 片自己的寄存器所占用的空间,这部分空间只有2个字节,地址是0x3E0和

西南交通大学硕士研究生学位论文 片的驱动程序向系统申请并分配给PCMCIA卡。

第47页

0x3E1;另一部分空间是分配给PCMCIA卡的空间,这部分空间由PD6710芯 。PD6710自身只有两个地址空间,而内部的寄存器却占用多达64个字节的 空间,如果仅仅通过仅有的两个系统空间的地址直接访问所有的寄存器显然是 不可能的。对于此,PD6710采用了索引访问机制,即对所有内部寄存器的访 问都是通过一个8bit的索引寄存器和一个8bit的数据寄存器来实现。
内部寄存器

V T。O V 歌A A



张艄艄O O圹 V『

DL叱黾

邶删硎舣

l,o地址空间



图6-4 PD6710内部寄存器索引访问机制

如图64所示,在读PD6710内部某个特定的寄存器之前,需先往索引寄存 器(地址为0X3E0)内写入该寄存器的索引号,然后紧接着读取数据寄存器的内 容(地址为0X3E1),读得的内容即为被索引的寄存器值。同样,在对PD6710 内部某个寄存器进行写操作之前,也需先往索引寄存器内写入要进行写访问的 寄存器索引号,然后紧接着往数据寄存器写数据,被索引的寄存器即可被写入。 一个简单的实现如下:
#define PD67 1 0——IO——BASE
#define PD671 0 INDEX #define PD6710 DATA #define PD67 1 0 IO 0x l 1 000000 0x3E0 0x3E1

//索引寄存器

//数据寄存器

PORT(poft)| char水)(PD67 1 0一IO—BASE+poft)) index)

(*(volatile

unsigned

unsigned char PD67 1 0_Read(unsigned char

{ 0一IO—PORT(PD67 0_INDEX)=index; return(PD67 1 0——IO——PORT(PD67 1 0_DATA));
PD67 1 1


void

PD671QNrite(unsigned char index,unsigned char

data)

西南交通大学硕士研究生学位论文

第48页

1 0一-IO—PORT(PD67 0_INDEX)=index; .PD67 1 0;IO—PORT(PD67 1 0_DATA)=data; PD671



2.PD6710窗口映射机制 PD6710芯片支持2个I/O窗口和5个内存窗口的映射。 如图6.5所示,以内存窗口映射为例,通过PD6710进行地址空间映射需要 3个地址:系统内存起始地址、系统内存结束地址以及卡内存偏移地址。举例 而言,如果在PCMCIA卡内的内存偏移量为Ox00100000的地方有一块4MB的 内存空间,PCMCIA的驱动程序向系统申请了起始地址为Ox00800000的一块 系统空间分配给它,那么就可以将这3个地址分别设为0x00800000,
0x00BFFFFF和0x00 1
00000。

Pc卡内存地址空间

IsA内存地址空间
16M

84M

系统内存映射截 止地址寄存器 系统内存映射起

.,,. .,,.

始地址寄存器
B用ⅢA仔地 ,。.囊,;●毪, .

ISA内存窗口可以映射到 昔遭内存或者属性内存

, .。数不斛闻埽嘲晰雌 知髓 卡潜

,一∥~ 蜘一

图6-5 PD6710芯片内存映射不慈

6.3.3

PD6710内部寄存器介绍

与硬件相关的Socket Service层驱动程序,主要是对PCMCIA控制器的内

部寄存器进行操作。按照功能的不同,PD6710内部64个寄存器分为以下5组: 重.芯片控制寄存器组(CHIP,CONTROL疆冱GISTERS) 此组寄存器主要包括与PD6710芯片控制相关的寄存器。
(1)芯片版本寄存器(Chip Revision)

PD6710芯片是否兼容82365系列PCMCIA控制器,芯片所支持的接口类

西南交通大学硕士研究生学位论文 型(I/O卡、存储卡还是I/O&存储卡) (2)接口状态寄存器(Interface Status)

第49页

驱动程序通过此寄存器读取/设置接口的工作状态,如电源状态信息、PC 卡插入信息、PC卡是否写保护、RDY/REQ引脚状态、PC卡是否上电以及编
程电压Vpp是否有效。

(3)电源控制寄存器(Power

Contr01)

驱动程序可以通过此寄存器设置PC卡的供电方式(直接供电或通过检测 CD2和CDl引脚状态自动供电),并结合Misc】控制寄存器以相应方式给
PC卡供电。

(4)中断和通用控制寄存器(Interrupt PD6710具有多个用于PC卡RDY/

and General?Contr01)

QEm_,线号信请申断中的源断中脚引

驱动程序通过此寄存器设置采用哪个mQ中断信号线向CPU提出中断申请。 此外,此寄存器还用于配置PC卡管理中断的产生方式(编程方式或通过INTR 引脚方式)、PC卡接口模式(存储卡接口模式或I/O卡接口模式)。 (5)PC卡状态改变寄存器(Card
Status Change)

此寄存器用于表示产生卡管理中断的中断源,发生卡管理中断时,驱动程 序通过此寄存器得到中断源,进而转入相应的中断处理程序运行。 (6)PC卡管理中断配置寄存器(Management Interrupt、Configuration) 用于配置是否使能各种卡中断源产生的卡管理中断。
(7)映射使能寄存器(Mapping Enable)

用于配置是否使能各个I/O窗口或内存窗口的地址映射。 2.吖。窗口映射寄存器组(I,o.WINDOW MAPPING,REGISTERS) PD6710支持2个I/O窗口的映射,此寄存器组用于配置2个I/O窗口映射 地址的起始地址、结束地址及偏移地址,同时配置数据访问宽度(8位或16位)
以及访问周期时序产生定时器。

3.内存窗口映射寄存器组(MEMORY。WINDOW MAPPING
REGISTERS)

PD6710支持5个内存窗口的映射,此寄存器组用于配置5个内存窗口映射 地址的起始地址、结束地址及偏移地址,同时配置数据访问宽度(8位或16位)
及访问周期时序产生定时器。


4.扩展寄存器组(,EXTENSION REGISTERS) 此寄存器组用于配置PD6710芯片的一些扩展功能,此组寄存器中的常用 寄存器有Misc l控制寄存器、Misc 2控制寄存器及芯片信息寄存器(Chip

西南交通大学硕士研究生学位论文
Information)。
qVlisc

第50页

1控制寄存器用于检测PC卡的供电电压(5V或3.3V),并结合电源

控制寄存器(Power!Contr01)给PC卡供电。同时此寄存器还用于设置中断的 触发方式(电平触发或脉冲触发)。qVlisc 2控制寄存器主要用于配置jPID6710 内部时钟相关信息。芯片信息寄存器(Chip Information)的最高2位被写入后 的第一次读取会返回“,第二次读取会返回00。可用这种方法检测总线上是否


存在PD6710芯片。

5.时序配置寄存器组(TIMING REGISTERS) 此寄存器组用于配置数据访问时序,包括访问周期大小以及每个访问周期 的数据建立(Setup)时间、命令(Command)时间和保持(Hold)时间。

f6.3.4,P,CMCIA硬件驱动接口分析

由PCMCWCF接口软件结构可知,Socket Service是PCMCIA系统中唯一
和PCMCIA适配器交互的部分,因此,编写这一层驱动也是系统跨硬件平台移 植时的主要工作,主要是对上节所介绍的各个寄存器进行操作。 澶.硬件AM接口函数分析
Socket


Service负责管理系统中的PCMC认卡插槽,配置PCMC认卡上的

硬件资源,为上层Card Service提供操作硬件的统一API接口,使得Card Service

层与硬件无关。该API接口封装在一个结构体内,如下所示:
struct pccard

snoitarepo.{

int(木get_state)(unsigned im sock,socket_state_t咏state);‘ int(木set_state)(unsigned
int

//获取接口状态
∥配置接口状态

sock,socket—state—t宰state);‘
int sock,struct pccard io int sock,struct pccard io sock,struct

int(宰get_io_map)(unsigned int(木set—io map)(unsigned

map宰io);H获取IO映射 map木io);//建立IO映射

int(木get_mern_map)(unsigned int int(宰set_rnem_map)(unsigned

pccard_mem_map木mem);

//获取内存映射
int sock,struct pccard

mem_map木mem);

//建立内存映射
void(*proc_setup)(unsigned
int sock,struct proc dir

entry*base); .∥在PROC中注册

};

西南交通大学硕士研究生学位论文

第51页

编写Socket Service层驱动程序就是实现这些操作硬件的API函数,这些 API函数通过操作相关硬件寄存器实现。本文PCMCIA控制器PD6710的硬件
API函数如下:
static struct pccard operations pd67 init, pd67 suspend, pd67 register callback, pd67 inquire socket, pd67 get status, pd67 get


pcicoperations={ //PCMCIA接口初始化 //挂起处理
//注册,Call BaCk函数

//询问接口能力 //获取接口状态

tekcos.置配口接取// 获
//设置接口


pd67 set socket, pd67

// 获取 IO MAP io map teg.数函置设 set io map,


pd67

//设置IO MAP处理函数 pam_mem// 获取 MEMORY MAP .数函置设 //设置MEMORY MAP处理函数

pd67 get ,pd67 set mem

map,

pd67_proc_setup

);

编写完硬件接口API函数还要将这些API函数注册到5Card Service层,以 供上层调用,同时PCMCIA驱动程序卸载时也要在Card Service层注销这些API
服务函数。Card Service层通过一张函数表来记录已登记的Socket Service层的

函数,函数表是以链表的形式在/driver/pcmcia/cs.c文件中创建并维护的。注册 和注销这些API服务的函数也在/driver/pcmcia/cs.C中做了如下声明:
extem hat

register
ss

ss

entry(ira
ss

nsock,struct

pccard_operations’‘‘ss_entry);

extem void’unregister

entry(struct pccard_operations宰ss entry);

entry()用来注册一个Socket Services层的接口函数。其中第 一个参数nsock指定硬件平台的PCMCIA插槽号,由于系统可以支持多个
函数register

PCMCIA插槽,因此必须指定所登记的函数是针对哪一个插槽的;第2个参数
8S

entry为一结构指针,该结构就是Socket Services层的API接口函数。 函数unregister
SS

entry()用来注销指定接口函数,表明Socket Services层不

再提供这个服务。 2、:PD6710初始化过程 PD6710驱动程序中的init__pd6700()函数完成PD6710硬件的初始化,将

西南交通大学硕士研究生学位论文

第52页

PD6710带到~个正常的工作状态。PD6710的初始化过程如图6-6所示。Linux 通过module.觚t(iI迎』d6700)以模块的形式将PD67109驱动程序插入到内核中运
行。

申请卡管理及PC卡中断资源 (调用set_external—irq())

增加一个PCMCIA接口

设置中断处理函数

注册一个Socket Service入口 (调用register
ss

entry())

中断轮询,中断发生时进行相 应中断的处理

图6-6PD6710初始化 6.3.5

PCMCIA/CF无线网络驱动程序移植

由以上分析可知,PCMCIA/CF无线网络驱动程序的实现包括两部分: PCMCIA主总线适配器HBA的驱动程序(Socket Service和Card Service)的实 现和无线网卡(Card Client)驱动程序的实现。 1.HBA驱动程序实现 HBA驱动程序中,只有Socket Service层驱动程序与硬件PCMCIA控制器 紧密相关,而PD6710这类经典的PCMCIA接口芯片驱动程序在许多开发板软 件包中都已提供,如Samsung公司的¥3C2410评估板¥3C2410 SMDK,我们

西南交通大学硕士研究生学位论文

第53页

将原有驱动程序针对于PCMC队接口的地址、中断等实际情况略加修改,便可
以拿来使用。 在/include/asm-arm/arch.s3c241 0/smdk.h文件中修改开发板PCMCIA的接口

地址及中断端口。
#define :fi}defme



mQ
IRQ

INS // 定义卡管理中断为 EINT3 FCn_口端 mQ EINT3 CF RDY

mQ

tEINT8

//定义卡操作中断为EINT8端口

/聿PCMCIA.nGCS2:0xl 0000000~Ox 1 8000000—1聿/
#defme pCF_MEM_BASE Ox 1 0000000

//定义CF卡内存映射物理基地址
#define VCF

MEM

BASE

0xdl 000000

∥定义CF卡内存映射虚拟基地址
#define pCF—.10——BASE 0x l 1 000000

∥定义CF卡IO映射物理基地址
#define vCF—.IO—.BASE 0xd2000000

//定义CF卡10映射虚拟基地址 修改完成后,将驱动程序重新编译,以模块的形式加载到内核。 2.无线网卡驱动程序移植 无线网卡驱动程序属于PCMC队协议栈Card Client层,我们采用移植第三 方驱动程序的方式实现。
本文使用的Wireless LAN卡是基于Intersil Prism芯片组的,选用的无线网

卡驱动程序为linux-wlan项目的linux-wlan.ng驱动程序,源码版本为 linux.wlan-ng.0.2.0版,该驱动程序支持多种基于Prism芯片组的卡,且支持
linux.wlan

API并部分支持Wireless

Extensions。

以下是具体移植步骤: (1)进入工作目录,将linux.wlan-ng-0.2.0.tar.gz文件解压:
S tar xvzf Iinux-wlan?ng一0.2.0.tar.gz


(2)解压后将在当前目录生成文件夹linux.wlan-ng-0.2.0/,进入该文件夹 配置并编译驱动:
Build Prism2.X

PCMCn Card Services(._cs)driver?(y/n)[y]:y

(3)编译linux-wlan—ng:
¥make a11

编译完成后在linux.wlan—ng-0.2.0/src/p8021 1/文件夹下生成p8021 1.o,在

linux.wlan.ng.0.2.0/src/prism2/driver文件夹下生成prism2

cs.

0.,件文

西南交通大学硕士研究生学位论文
linux.wlan.ng-0.2.O/src/wlanctl/文件夹下生成wlancfl文件。
p8021 1.o和pnsm2

第54页

CS.O文件可以以模块的形式插入到Linux系统内核执行。

当插入Intersil芯片组的无线网卡时,卡服务程序解析卡属性内存空间的CIS信

息并上传给应用程序cardmgr,然后cardmgr再根据/etc/pcmcia/config文件的配 置信息加载适当的设备驱动程序(这里为prism2 CS.o)。因此,这里还需要对 config文件进行配置,添加一组关于绑定prism2 cs驱动程序和本设计所选用的
无线网卡的信息,如下,:
device‘'prism2 cs’’module‘'prism2
cs'’
一 ’

card“ISL37 1 00P Eval—RevA

Wlan

1 1

MbpsPC—Card一3.0”

manfid OxOOOb.Ox7 l OO bind‘'prims2_es’’

(4)在文件系统/lib/modules/下创建文件夹wireless/,然后将p8021 1.o、
prim2 CS.O文件复制到wireless/文件夹;并将wlanctl文件复制到/sbi彬文件夹。

(5)修改modules.dep文件,添加如下内容:
/lib/modules/wireless/prism2_cs.O

这是由于当PCMCIA卡插入时cardmgr应用程序通过modules.dep文件加载
prism2 CS.O模块。

(6)启动linux系统,然后分别加载PCMCn HBA驱动程序、PD6710驱
动程序及p8021 1.o模块,并运行cardmgr程序。

(7)配置AP路由器,使其口地址为192.168.0.235,设置SSD名称为 linux.wlan,并为广播方式不加密。将主机IP地址配置为192.168.0.37,并连接
到AP路由器上。 (8)使能无线网卡,并将其配置为AP模式,同时禁止默认的以太网卡和 设置无线网卡的口地址为192.168.0.73。
样wlancfl wlanO lnxrep_ifstate ifstate=enable 群wlanctl wlan0

lnxrep_autojoin

ssid=linux-wlan authtype=opensystem

撑ifconfig eth0 down 撑ifconfig wlan0 1 92.1 68.0.73 netmask 255.255.255。0 broadcast 1 92.1 68.0.255

这里要注意:“ssid=linux—wlan”中linux.wlan需要与AP的SSID字段一致, 用于表示同一个无线网络,区别于其他无线网络。 完成以上配置,即可用ping命令检测手持终端是否已经实现无线网络接入。 检测结果见本文7.2.2节。

西南交通大学硕士研究生学位论文

第55页

第7章系统调试与测试
调试是任何项目开发过程中必不可少的一部分,特别是在软硬件结合非常 紧密的嵌入式系统开发中。而系统开发完成后,需要对系统各模块和整体运行 性能进行完整的测试,以验证系统功能是否达到了即既定目标,运行是否稳定
可靠。

本文硬件调试使用Wiggler JTAG仿真器+H—JTAG调试代理+AXD调试器 方式,使用ADS(ARM Develop Suit)软件工具编写程序,通过JTAG接口将 生成的执行程序下载到SDRAM中进行调试。 Linux应用程序的调试采用NFS文件系统的方式进行,将在主机上编泽通 过的应用程序mount到嵌入式硬件平台系统下进行调试。
7.1
7.1.1

LGD显示系统测试
CPLD程序功能测试

LCD信号需要遵守严格的时序关系,如果有一点偏差则会造成无图像显示 或者图像错位的情况。在CPLD内部设计了一个LCD测试时序产生单元,使 用该单元可以准确的验证时序的正确性,如果时序关系正确,屏幕上则会在正 确的位置显示相应的直线,如图7.1所示。如果直线没有出现在屏幕的边缘和 其他相应的位置,就可以根据直线的位置判断行信号和列信号是提前了还是滞 后了,以此来修正CPLD内部程序模块的设计。

图7-1 CPLD程序功能测试图 7.1.2

LCD驱动程序测试

基于FrameBuffer的LCD驱动程序移植后,要进行测试,以验证是否成功

西南交通大学硕士研究生学位论文

第56页

移植。重新编译FrarneBuffer LCD驱动程序移植后的Linux内核,并将其下载 到手持终端硬件平台中,启动Linux操作系统后,在LCD屏的左上角会出现一 个小企鹅图像,如图7—2所示。
“i鬈i荔蔫:i荔嚣~i蔫霸藤§凝磊≯4

这并不代表驱动程序完全移植成功,还要编写GUI应用程序进行进一步的 测试,因为某一个或几个参数不正确,仍然能够看Nd,企鹅,但显示图形时就 有问题了。本文编写一应用程序,对FrameBuffer直接写屏,首先进行 FrameBuffer内存映射,将屏幕内存映射到自己的应用程序,然后向映射内存中 写入一幅图片信息。程序运行后,LCD屏幕显示如图7.3所示,说明FrameBuffer LCD驱动程序移植成功。



7.2
7.2.1

PCMCIA/CF接口测试
PD6710硬件电路测试

硬件焊接完成后,要编写测试程序对PD6710硬件电路进行测试,以验证 硬件电路连接的正确性。PD6710测试程序分为3个部分:PD6710芯片的初始

西南交通大学硕士研究生学位论文 化、PCMCn卡的初始化和,CIS信息的读取。

第57页

PD6710芯片的初始化首先完成对PD6710芯片管理中断及PCMCIA卡中断 的对应GPIO设置、PD6710芯片所在的bank(这里是+bank2)数据宽度及访问 速度的设置,然后设置了PD6710芯片内部寄存器使能一个属性内存空间以便
于后面的42IS信息读取程序能够访问PCMCIA卡属性内存空间内的CIS信息,

最后初始化时序设置寄存器,设置芯片的访问周期为300ns。PD6710芯片有~
个:CHIP INFO寄存器(INDEX为0xlF),这个寄存器的最高2位被写入后的

第一次读取会返回11,第二次读取会返回00。这里我们使用这种方法检测总线
上是否存在PD6710芯片。

i坟(PD6710_Read(PD67』HIP_INFO)&0xcO)!=0xc0
(PD6710_Read(PD67_CHIPjNFO)&0xc0)!=0x00) { puts(”PD67 1 0
return O:
,一

I|

hardware indentification error!”);

:> puts(”PD6710
hardware founded!”);

PCMCIA卡的初始化过程首先通过读取内部Misc
上电。

Control

1寄存器判断

PCMC认是5V供电还是3.3V供电,然后根据PCMCIA卡上电时序给PCMCIA
PCMCIA卡初始化完成后就可以读取PCMCIA卡CIS信息了,图7.4显示

了插入PCMCLVCF无线网卡后的PD6710芯片测试情况。从图中打印的CIS
信息可以看出这是一个1 1Mbps的无线网卡,供电电压为3.3V,说明PD6710

芯片工作正常,硬件电路连接正确。

西南交通大学硕士研究生学位论文
文件(E)编辑(曼)查看(y)呼叫(£)传透(工)帮助(旦)

第58页

圈鼢叠曩lj臻蘩雹鬟静辫嘲i司§谰l
D瞎


零iD哿留


l l
l,

l{






test for reading pc—card CIS】 PD6718 hardware founded! Card is found. 3.3V card is detected. Card init finished. 【Card lnformalion Structure】 CISEnd=8~9a 00.03,00,00,ff.17,0‘,67,5a,08,ff.1d,05,03,67,5a,//.......gZ.....gZ

【PD6718

08,ff,15,2f,01,00.57,‘c,‘1,‘e,00.31,31,‘d,62,70,//.../..WLRN.11Mbp
73,5f,50。‘3,2d,‘3,61,72,6厶,5f,33.2e,30,00,49,53,//s—PC—Card一3.8.IS




‘c,33,37,31,30,30,50,00,厶5,76,61,6c,2d,52,65,76,//L37108P.Eual—Reu




l l





41,00.ff,20。0‘,0b,00,00,71,21,02,06,00,22,02,01,//f1......q 7...”.. 07,22。05,02,‘0,‘2,0f。00,22,05,02,88,8/,,le,00,22,//.“..@B..“......” 05,02,60。ec,53.00,22,05,02,c0,d8,a7,00,22,02,03,//..’.S.”......”.. 87,22,08,0‘,06,00,02,6f,3b,56,a1,22,02,05,01,1a,//.“.....O;V.”.... 07,03,01,e0,03,00,00。01,1b,10,c1,01,19,77,b5,1e,//.............W.. 35,b5,3c,36,36,85,66,ff,ff,ff,ff,









i15200 8-N-i




l己连接0:15:自动检测

NUM

图7_4

PD67]O硬件电路测试结果

7.2.2无线网络连通测试
为验证无线网络模块是否可用,要进行网络连通性测试。将PCMCIA
HBA

驱动程序及无线网卡驱动程序交叉编译后,以模块的形式插入到Linux内核中, PCMCIA/CF无线网络驱动程序便可以使用了。将手持终端IP地址设置为 ]92.168.0.73,插入PCMCIA/CF无线网卡,然后在控制终端上输入ping命令便 可以检测无线网络状态了,如图7.5所示。由图中可以看出,手持终端的无线 网络地址被配置为1 92.168.0.73,可以ping通局域网的另一台主机 (192.168.0.37),这表明无线网络接入已经得以实现。

西南交通大学硕士研究生学位论文

第59页

■■a‘舀■Il■昌■F冀髟月i毫5西1潮■括露弘。喇

文件(E)编辑(曼)查看(Y)呼叫(£)传送(工)帮助(基, D亩 零-[3臼留
【root@zylinux/】tt ifconfig州1anO H14addr 00:02:6F:3B:56:日1 wlanO Link encap:Ethernet Bcast:192.168.0.255 Mask:255.255.255.0 inet addr:192.168.0.73 NTU:1500 NetriC:1 UP BR0flDC闩ST RUNNING WULTICRST R}{oackets:301 errors:0 droooed:0 oMerrurls:0 frame:0 T》{oackets:320 err-ors:0 dropped:0 oMet-Puns:0 carri er:0 collisiOtis:0.【xqueuelen:100 R}{bytes:21576(21.0 kiB)TX bytes:14216(13.8 Interrupt:36 【root@zylinu×/】辑ping 192.168.0.37 PIRG 192.168.0.37(192.168.0.37):56 data bytes 6‘bytes from 192.168.0.37:icmp—seq=0 ttl=64 time=2.7 ms 6‘bytes from 192.168.0.37:icmp..seq=l ttl=6‘time=2.3 ms 6‘bytes from 192.168.0.37:icmp seq=2 ttl=6‘time=3.5 Ills 6‘byles from 192.168.0.37:icmp seq=3 ttl=6‘time=2.3柚s 6‘bytes from 192.168.0.37:icmp—seq=‘ttl=6‘time=4.2 mS --D--192.168.0.37 ping 5 packets transmi t ted.5 oackets Feceived.0%packet Found—trip min/aug/max=2.3/3.0/厶.2饥s 【FOOt@zvlinux/】抖


一}

kiB)

statistics…

loss

”。


}已连接0:04:ANslw
115200 8—H一1 、Ⅲ邢





图7—5无线网络连通测试

7.3功能综合测试
为进一步验证通用手持终端的LCD液晶显示及无线网络功能,设计了一个 综合测试程序,可以同时验证这两项功能。 综合测试程序基于socket编程,包括PC主机端的数据发送程序及通用手 持终端的数据接收程序。PC主机端循环发送15幅图片数据,通用手持端不断 接收从PC主机发来的图片数据,然后通过直接写屏技术写入LCD的帧缓冲区, 将接收到的图片显示在LCD液晶屏上。 在发送数据的同时,我们可以通过PC主机端的windows任务管理器查看 无线网络的传输速度,大致在3Mbps左右。

西南交通大学硕士研究生学位论文

第60页

总结和展望
本文设计了一款基于¥3C2410A核心板的嵌入式通用手持终端,个人独立 完成手持终端硬件扩展板的设计、制作与调试,搭建了软件开发平台,并对关 键模块LCD显示模块及无线网络模块进行了深入的研究与探讨。在本论文的研 究过程中,主要完成了如下工作:
】.系统总体方案的设计和论证;‘ 2.使用Altium
Designer

6完成了系统硬件平台原理图及PCB板的设计;

3.硬件电路的制作和调试工作;
4.系统软件平台的搭建;

5.液晶屏时序转换CPLD逻辑设计,取代了昂贵的专用时序匹配芯片,具
有较高的应用价值;

6.基于FrameBuffer的LCD驱动开发; 7、PCMCLadCF无线网络接口的硬件设计及软件驱动程序实现; 8、系统测试。 本系统基本上达到了设计要求,但仍有一些有待改进之处: 1、本文只是设计了一个通用手持终端硬件平台,后续还有很多工作要做,
如平台上应用程序的开发等。

2、LCD的电源驱动电路相对简化,没有实现LCD对比度的温度补偿电路,
显示效果没有达到最优状态;

总之,本文从硬件设计实现到软件平台的搭建,再到驱动程序的开发,为 嵌入式通用手持终端提供了全套的解决方案和实例,相信经过后续工作的完善, 能够成为真正的手持终端设备。本设计在工程应用中具有一定的实用价值。

西南交通大学硕士研究生学位论文

第61页

致谢
首先我要向三年来给予我悉心教导和热心关怀的恩师杨斌老师致以最衷心
的感谢和最诚挚的敬意!

本文是在他的悉心指导和关怀下完成的。在这三年的研究生学习期间,杨 老师严谨的治学态度和渊博的专业知识对我的一生都有着非常深远的影响,激 励我不断努力学习和工作,向着更高的人生目标奋斗。在此,再次向杨老师致 以我衷心的感谢! 感谢我的家人。多年来,是他们给予我精神上和物质上的关怀与支持,使 我能够专注于研究和学习,得以顺利完成学业。 感谢实验室的同学们。和他们一起度过了三年快乐的时光。生活上,他们 给我热情的帮助;学业上,大家也给了我很多热心的指导。我的每一点进步都
有他们的功劳。

最后,衷心感谢论文评审和答辩过程中付出辛勤汗水的各位专家。

西南交通大学硕士研究生学位论文

第62页

参考文献
【1]田泽.嵌入式系统开发与应用.北京航空航天大学出版社,2005

【2]李驹光.ARM应用系统开发详解一基于¥3C45 10B的系统设计.清华大学出
版社,2004

【3】李亚锋,欧文盛.ARM嵌入式Linux系统开发从入门到精通.清华大学出版
社,2007 [4]Sharp.LQ035Q7DH01
Samsung Electronics,1 999 Device Specification.Sharp corp.2003 Channel TFT-LCD Gate

[5]Samsung Electronics.KS0647(256 【6]Samsung Electronics.KS0670(8

Driver)Data

Sheet.

Bit 384/402 Channel TFT-LCD Source

Driver)

Data Sheet.Samsung Electronics,1 999

【7】李维靛,郭强.液晶显示应用技术.电子工业出版社,2000
[8]Sipex.SP6201 【9]9 【1 0】Linear
Data Sheet.Sipex.2004 Linear Tech.LTl 945 Data Sheet.Linear Tcch.2003 Tech.LTl 932 Data Sheet.Linear Tech.2003

【11】王国强.TFT-LCD使用心得.2006 [12】刘永智,杨开愚等.液晶显示技术.电子科技大学出版社,2000
[1 3]Samsung
Electronics.¥3 C24 1 0A Data Sheet.Samsung Electronics,2004 II CPLD User’S

【14]Altera.MAX

Manual.Altera

corp.2005

【15]周晓光,王永明,祝明德.基于,CPLD的液晶显示屏与嵌入式处理器的接口
设计.电子测量技术,2006 [16】王金明.Verilog HDL程序设计教程.人民邮电出版社,2004


【17】于明俭,陈向阳等.Linux程序设计权威指南.机械工业出版社,2001 【18】于明,范书瑞,曾祥烨.ARM9嵌入式系统设计与开发教程.电子工业出版社,
2006

【19】张嵛.32位嵌入式系统设计与调试.机械工业出版社,2005 [20]华清远见嵌入式培训中心,孙琼.嵌入式Linux应用程序开发详解.人民邮
电出版社,2006

【21]孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南一基于ARM9
处理器.电子工业出版社,2005 【22]周立功,陈明计,陈渝.ARM嵌入式Linux系统构建与驱动开发范例.北京航 空航天大学出版社.2006

西南交通大学硕士研究生学位论文

第63页

[23】车京春,韩晓东.Protel DXP印刷电路板设计指南.中国铁道出版社,2004 【24】张伟,吴红杰,徐海鹰.电路设计与制板:Protcl DXP高级应用.人民邮电出
版社,2004

【25]杰诚文化.精通Protel DXP:入门提高篇.中国青年出版社.2005 [26】柯常志,柯长仁.精通Protel DXP:系统设计篇.中国青年出版社,2005
[27】刘小伟,刘宇,温培和.Altium Designer。6.0电路设计实用教程.电子工业出 版社,2007


【28】王诚.Altera FPGA/CPLD设计:基础篇.人民邮电出版社.2005

[29】马或,王丹利,王丽英.CPLD/FPGA可编程逻辑器件实用教程.机械工业出
版社,2006

[30]李洪伟,袁斯华.基于Quartus

II

FPGA/CPLD设计.电子工业出版社,2006

【3 l】任爱锋.基于FPGA的嵌入式系统设计.西安电子科技大学出版社,2004

[32]杜慧敏,李宥谋,赵全良.基于Verilog的FPGA设计基础.西安电子科技大
学出版社,2006

[33]毛德操,胡希明.Linux内核源代码情景分析(上册).浙江大学出版社,2001

[34】徐虹,何嘉,张钟澍.操作系统实验指导一基于Linux内核.清华大学出版社,
2004

[35】陈莉君.深入分析Linux内核源代码.人民邮电出版社,2002 [36】钱能.C++程序设计教程.清华大学出版社,1999 【37]严蔚敏,吴伟民.数据结构:C语言版.清华大学出版社.1997 [38]张瑕,刘政林,邹雪城,郭旭.中、小尺寸TFT-LCD系统时序控制模块的设计.
计算机与数字工程.2007
‘ ?

【39】陈金龙,韩雁.液晶显示时序控制电路的设计及验证.杭州电子科技大学学 报,2006 [40]胡二勐,胡晨,刘坤.TFT-LCD在,GPS导航仪中的应用.电子元器件应用,
2006

【4l】s3c2410一lcd&t臣amebuffer驱动分析
._httD://www.cnitblog.com/luofuchong/archive/2007/1

【42】基于嵌入式Linux的图形界面显示系统的设计(framebuffer) h__ttt)://www.hzlitai.com.cn/article/yejin-article/sys.tem/2006 1 0 1 [43]s3c2410 LCD驱动程序移植及GUI程序编写
3 1,——0——8——.——h————t—,—m—1.

0/一30/—3—5—5—7—0—.h—tml.

h!_tp://www.dzkf.cn/html/qianrushixitong/2006/1228/1298,一html [44]Cirrus

Logic.CL.PD67 1 0/’22 Datasheet.Cirrus Logic。1 997

西南交通大学硕士研究生学位论文
[45】PCMCIA/JEIDA.PC‘Card
Standard.Release

第64页
999

7.0.PCMCIA/JEIDA,1

[46】曾俊轩.嵌入式系统中PCMCIA接口研究与应用:硕士学位论文.华中科 技大学.2005 【47]刘少阳.基于嵌入式Linux的WLAN终端设计与实现:硕士学位论文.国
防科学技术大学,2006

【48】杜旭,陆志刚,赵梦欣.基于PCMCIA的无线局域网驱动程序设计.计算机 工程.2007


【49]王玉东,张效义.基于ARM的PCMCIA接口设计.微计算机信息,2005 【50]濮琼.嵌入式系统PCMCIA协议分析及WIMAX接入:硕士学位论文.信 息工程大学,2006 【51]Linux无线网络技术:WLAN深入分析
http://www.1upaworld.corn/action viewstutorial itemid 7003.html,

西南交通大学硕士研究生学位论文

第65页

攻读硕士学位期间发表的论文
第一作者发表论文:

[1】赵淑晶,周延颖,杨斌.基于;CPLD的双屏LCD时序控制器设计.微计算机 信息,2009年1月

一种通用手持终端的关键技术研究与实现
作者: 学位授予单位: 赵淑晶 西南交通大学

相似文献(0条)

本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1346107.aspx 下载时间:2010年1月15日


相关文档

客户常见问题(手持终端)
DWMS手持终端系统与调度系统的研究与应用
手持终端常见问题及处理方法汇总(一)
应用于手持终端的嵌入式操作系统的研究与实现
无线视频监控手持终端的研究与设计
基于ARM的嵌入式系统在无线手持终端中的应用研究
探究常见环境对GSM手持终端在1800MHz下信号强度的影响
供电企业基于移动手持终端的现场电子作业的研究与实践
手持终端点菜系统在餐饮业中的研究与设计
奶牛信息论文:基于RFID与WSN的奶牛信息采集手持终端研究与开发
电脑版