音乐播放器的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章绪论
1.1背景
随着电子技术的飞速发展,嵌入式设备在各领域的应用越来越广泛,复杂度也越来越高,对其他开发方法也提出了更多的要求和更大的挑战。

在嵌入式设备系统开发过程中需要将软件应用与操作系统编译连接成一个整体,然后下载到目标机上运行,所以,嵌入式设备的开发过程是一个复杂的过程。

MP3作为高质量音乐压缩标准,给音频产业带来了具大的冲击。

MP3技术使音乐数据压缩比率大,回放质量高。

如CD格式的音乐数据压缩成MP3格式,音效相差无己,但大小至少可压缩12倍。

由于MP3音乐的较小数据量和近乎完美的播放效果使其在网络上传输得以实现。

1995年,MP3格式的音乐文件刚在网络上传播时,主要用Winamp等播放软件进行播放,使MP3音乐无法脱离计算机进行播放,给音乐欣赏带来了不便。

近几年以来,随着MP3播放器的出现及其技术的发展,人们对MP3播放器的要求越来越高,制造商在MP3播放器的选型、设计、开发、附加功能和适用领域等方面做了很多努力,设计了多种方案。

本设计主要是利用ARM技术设计一款新型的MP3播放器。

ARM9是ARM公司的16/32位RSIC处理器,是适用于普通设备的一种高性价比的微控制器。

本设计采用的MCU是三星公司推出的ARM9芯片S3C2440,具有低价格、低功耗、高性能、超小体积等特点主要适用于中高端场合,目前在嵌入式系统中正得到日益广泛的应用。

S3C2440主频高达400M,片上集成了丰富的资源:如IIS(Inter-IC sound)总线与DMA控制器,为与数模转换器(DAC)的连接提供了一种理想的解决方案。

MP3播放器的设计比较复杂且对处理器的要求较高,因而MP3播放器必须仔细设计以降低成本。

本设计是在ARM9平台上设计、实现一个MP3播放器。

第二章系统总体方案
2.1 系统功能
本设计提出了一种基于嵌入式ARM处理器硬件平台的MP3播放器设计方法。

此播放器采用ARM体系结构中的ARM9作为系统控制器,利用外围设备USB 通用串行接口下载MP3歌曲,用flashcard存贮MP3文件。

主要对MP3做了各个方面的功能分析,对硬件设计、软件设计、软件实现、系统编译等方面做了介绍。

系统的主要部分是音频编码与解码,这是系统设计的核心。

MP3播放器设计的突出问题就是硬件控制和软件控制,另外还有硬盘控制、键盘控制、液晶显示,这些控制都是基于一块芯片。

基于ARM9的MP3播放器设计的软件体系结构采用分层模式,它包括软件层、硬件层、驱动层、操作系统层、及MP3播放器应用层。

主要实现歌曲的播放。

2.2 设计指标
页1第
1、MP3工作电压为具有3.3V左右,电流250mA,具有音频解码和播放功能。

2、通过USB接口与大容量外部存储设备进行数据传输,能实现网络播放与下载、触摸屏输入功能。

3. 操作界面统一管理功能,支持mp3格式、wma格式,该MP3播放器除具有播放音乐外还附有歌词同步等功能。

4、MP3在不充电的情况下待机2小时。

2.3 系统总体结构设计
嵌入式微处理器采用三星公司生产的ARM9处理器S3C2440,处理器采用ARM9处理器,它具有小体积、低功耗、低成本、高性能的特点是嵌入式微处理器的理想选择。

同时,ARM9处理器可以运行嵌入式操作系统,处理速度足够软件解码,扩充性好,是目前理想的解决方案。

本设计的系统总体结构如图2.1。

三星公司推出的基于ARM9内核32位RISC嵌入式微处理器S3C2440,最高可运行在200MHz。

该芯片的功能强大,完全能够满足MP3定点或浮点解码程序的实现,还能够将Linux操作系统移植进入该芯片,实现包括播放MP3在内的多进程,多任务处理,是一种理想的解决方案。

硬件部分软件部分
复USB电位接电口源路初始化、驱动程序LinuxLCD带触摸屏的S3C2440操应用程序作微处理器系音频编解码统图形界面存以太串储口网控模电制芯块路片
图2.1系统总体结构图
第三章硬件详细设计方案
3.1 硬件设计说明
系统设计的硬件部分主要包括电源、ARM微处理器芯片、存储芯片、USB接口芯片以及音频芯片等。

可归结为两个部分:(1) 微处理器S3C2440,及其外围电路,具体包括复位电路,存储模块(包括FLASH、RAM和ROM)、电源。

页2第
(2)系统的外围部分:音频接口、UART、USB接口、带触摸屏的LCD、调试及下载接口。

音频编解码可以采用PHILIPS的UCB1400等芯片。

LCD可以采用320X240的TFT液晶显示器,电源则宜用可充电锂电池。

US带触摸屏LC S3C244数UCB140音微处理以太网控制芯接口功率放大串口SDRAMFLASH电路喇叭硬件系统结构图3.1 图如上图3.1可知,此次设计中,MP3主要组成部分是:CPU、MP3解码部分、在音频放大器、FLASH 存储器及SDRAM 存储器。

我们所设计的MP3播放器以微处理器S3C244O为中心,包括外部存储器、串口UART、音频接口、带触摸屏的LCD、USB接口、复位电路、调试及下载接口。

解码部分由软件完成。

整个播放器整体控制。

此MP3播放器的核心是三星公司的S3C2440芯片。

系统可以分为核心部分、音频编解码部分、音频输出、液晶控制等几个部分,此外还有必不可少的电源管理等部分。

音频编解码可以采用PHILIPS公司的UCB1400芯片。

LCD可以采用试验箱上的TFT LCD显示器。

硬件设计部分主要是S3C2440与UCB1400芯片的连接。

具体的模块说明如下。

3.2 处理器模块S3C2440
S3C2440是三星公司生产的基于arm920T内核的RISC微处理器,其主频可达203MHz,适用于信息家电、PDA、手持设备、移动终端等领域。

S3C2440除具备一般嵌入式芯片所具有的总线、SDRAM控制器和3个串口等外设之外,还具
有TFT LCD控制器、USBSlave、USB Host、I2C总线控制器、SPI控制器、IIS 音频接口、SD&MMC存储卡接口等丰富的扩展功能、AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制。

芯片工作电压3.3/1.8 V,最高运行速度可达200 MHz。

由于它是一款专为手持设备设计的低功耗处理器.因此可以降低手持设备成本,具有较高的性价比。

该芯片是基于ARM9而开发的多功能SOC(signal operation contro1)。

ARM9是一种小型、快速、低能耗、集成式的内核。

页3第
它的功能和特性如下:①具有较高的处理速度,通过内部锁相环,最高可在203 MHz的系统时钟下运行;②具有极低的功耗.其核心供电电压为1.8 V,外围I/O口使用3.3 V电压;③具有3种低功耗控制方式,甚至可关闭CPU中除唤醒逻辑外的所有功能,极大地降低了功耗;④与其他arm器件相比,S3C2410片上集成了更多的外设接口,如外部存储控制器、LCD,DMA,USBl.1,SD,222S音总线控制器、总线控制器和II,。

MC卡控制器、UARTSPI接口、ISCM频
接口、PWM定时器、看门狗、117个外部I/O口、24个外部中断源、A/D转换器和触摸屏接口、实时时钟及片上PLL的时钟产生等。

使用集成接口,有利于功能的扩展。

3.3 存储模块
存储模块由一片64 MB的SDRAM和两片16 MB的Flash组成,可为系统提供足够的存储空间。

Flash存储器是一种可在系统电擦写,掉电后信息不丢失的存储器。

与Flash存储器相比,SDRAM不具有掉电保持数据的特性,但存取速度大大高于Flash存储器,且具有读/写特性。

因此系统中SDRAM主要用作程序的运行空间、数据及堆栈区。

3.4 音频解码/编码模块
决定MP3音质的关键是主控解码器件中的数模转换器(DAC)单元和耳机功率放大器单元。

DAC负责把解码的数字音频流转换成可驱动耳机发音的模拟音频信号;耳机放大器则可把模拟音频信号放大到可驱动耳机的功率。

该系统音频解码/编码模块采用PHILIPS公司的UCB1400芯片,UCB1400的外部接口共有48个管脚,大部分都提供AC Link、中断、音频、ADC、触屏、功率和其它接口。

其接口电路图如图3所示。

UCB1400是一种用于音频处理的20位立体声解码/编码器。

它在一个芯片上集成了音频解码/编码功能、一个触屏控制器和功率管理接口。

10个通用管脚可进行可编程输入/输出,使得主机控制器可执行控制功能和监控运行状态。

在此次设计中,UCB1400主要的作用是音频编解码器与触摸屏控制器,还有就是对电源管理进行监控。

S3C2440可通过IIC音频接口与UCB1400连接。

S3C2440扬声器音频数据音频芯片微处理器内存模块
图3.2 音频模块流程
3.5 网络模块
页4第
S3C2440自身并没有网络控制器,接入以太网时需增加独立的以太网控制器,在此选用DM9000作为以太网控制器。

该器件具有通用的处理器接口、10M/100M 自适应、4K双字节静态存取存储器、低功耗、高处理性能,可支持3.3-5V的容差。

3.6 带触摸屏的LCD模块
显示MP3播放控制界面,通过触摸屏实现对播放和暂停,停止,音量递增,音量递减等功能的控制。

LCD可以采用试验箱上的320*240的TFT液晶显示器。

3.7 USB接口模块
本设计中,主机播放器提供歌曲来源。

MP3接口模块是连接U盘等存储设备为USB是通过主控制器与USB设备进行数据传输的,USB主控制器采用USB2.0标准和开放式主机控制器接口标准,可支持高速和低速的USB设备,具备内置的MCU和内部缓存,与CPU之间有一个静态存储器的接口。

CPU通过这个接口进行读写来完成USB协议要求的控制和数据收发功能。

USB主控制器提供一系列的寄主
控制器的控制。

USB存器,系统通过对这些寄存器可以实现对3.8串口电路
此MP3提供一个串口,用来调试硬件和软件。

Max232用来转换电平。

UART用于开发调试控制和返回调试信息。

3.9系统复位电路
系统时钟输入由24.576MHz的外部晶振提供,而微处理器内核的工作频率为66MHz,S3C2440内部含有PLL电路实现倍频,因此,系统由内部PLL电路倍频至66MHz,供给CPU运行。

系统复位信号由IMP811T芯片提供,并且设计了RESET按钮,可以在系统运行过程中随时复位操作,便于系统调试。

3.10电源模块
系统电源由XC6206P332MR芯片提供,宜用可充电锂电池。

第四章系统软件设计方案
总体上来说,系统软件包括操作系统、驱动程序及播放器应用程序3部分。

4.1 软件总体设计
在此次设计中,MP3播放器的软件体系结构采用分层模式,它包括硬件层、驱
动层、操作系统层及MP3播放器应用层等,软件体系结构图如下所示4.1。

页5第
Applicatio Mp3plaFile Syetem Protocal StackLinuxODiversAudio, USB, HDD, LC Physical LayeHardwar
4.1 MP3播放器的软件体系结构图图
操作系统分为引导加载程序、内核、文件系统Linux从软件角度看,嵌入式Linux,初始化串口、设置部分。

其一用于完成初始化RAM及用户应用程序4其二为特定于具体硬件的定制内核以及内核映像等功能;调用Linux启动参数、存储器设备的控制内核引导系统的参数;其三为含根目录文件的系统建立Flash 文件系统;其四为特定于用户的应用程序,即为播放程序。

硬盘控USB、Linux操作系统。

首先需要设备驱动程序,包括软件的核心是文等等。

然后是文件系统。

该设计采用的是通用的FAT32制、音频控制、LCD Windows平台有很好的兼容性。

件系统,在对、音频接口芯片AC97播放器所需的物理设备:USB接口、硬件层包括了MP3液晶屏等;设备驱动层包括上述各个设备的驱动程序的编写;操TFT英寸的3.5由操作系统来统一管理各个硬件设的操作系统,Linux2.6作系统层我
们移植了Madplay通过移植开源的我们使用QT设计图形用户界面,备;最上层是应用层,播放器软件系MP3MP3文件的解码,播放、音量增减的控制。

此解
码器实现对部分。

播放器应用程序3统包括驱动程序、操作系统及MP3操作系统的实现4.2
那样的固件程序,因此整个系统的加BIOS在嵌入式系统中,通常并没有像的任务是初始化芯片和主板,来完成。

BootLoader载启动任务就完全由BootLoader
通过修改相应的配置文件和驱动程序就可以实现移植过程中需要创建的开发板
文件。

4.2.1 嵌入式开发环境的搭建XSBASE270试验箱的。

在此次设计
中,硬件平台是基于嵌入式开发环境的搭建主要包括以下几个方面,如下:、虚拟机安装1 安装虚拟机,采用VMware。

系统安装、Linux2 linux操作系统。

安装完毕之后,安装VMware在上安装REDHAT企业版
工具。

VMwareTools 配置3、minicom操作系统,打开linux在启动红帽之前,要设置添加一个串口,设置成功之后,,会出现以下界面:命令在终端执行minicom -s页6第
,硬件流115200port setup,按照以下设置:设置串口,设置波特率为选择serial 控制设为无。

具体如下:
Save setup as dfl 选择minicom 即可启动选择Exit 配置、Tftp4 ftp的一个传输协议。

Tftp是类似于
下被用来下作为子协议。

在目标板上,该协议被会在BootloaderIP和UDP它使用kernel载和文件系统的镜像,传输媒质是以太网,以较高的速度。

包的步骤如下:安装tftp rpm 软件包①安装tftp-server-0.17-9.i386rpm -ivh
tftp-server-0.17-9.i386.rpm 在终端中输入命令:文件,内容如下:②修改
/etc/xinetd.d/tftpservice tftp
{
socket_type = dgram
protocol= udp
wait= yes
user= root
server= /usr/sbin/in.tftpd
server_args= -s /tftpboot
server_args += -s /odm/tftpboot
disable=no
}
文件夹,将要下载的文件放在该目录中即可。

、在根目录下建立/tftpboot5 配置bootp6、的协议。

这种协议允许正在启动的)是一种基于UDP/IPBOOTP引导协议(页7第
主机动态配置而无需用户监督。

BOOTP主要用于客户机从服务器获得自己的IP 地址,服务器的IP地址以及启动映象文件名。

在一个评估板系统中,这些协议通常是和tftp一起使用用来将内核和文件系统从PC上下载到目标板中。

Bootp主要用来获得目标板和主机的ip信息,以便可以使用Tftp协议来传输文件。

①安装bootp-2.4.3-7.i386软件包
在终端中输入命令:rpm -ivh bootp-2.4.3-7.i386.rpm
②在/etc/xinetd.d/目录下建立bootp文件,文件内容如下:
service bootps
{
disable=no
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/bootpd
}
③在/etc/目录下建立bootptab文件,内容如下
test:\
ht= 1:\
ha= 0x123456789a00:\
#ha=0x123456789999:\
ip=192.168.0.50:\
sm=255.255.255.0
④重启xinitd
在终端中输入:/etc/rc.d/init.d/xinetd restart
7、nfs配置
8、交编译环境配置
交叉编译环境的配置总共分为四个部分:配置交叉编译环境,然后将交叉编译工具安装在/opt目录下,试交叉编译环境,测试的时候用file命令查看文件。

4.2.2 Bootloader烧写
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。

因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。

尽管如此,我们仍然可以对Boot Loader 归纳出一些通用的概念来,以指导用户特定的
Boot Loader 设计与实现。

下面介绍Boot Loader的烧写过程,以Linux-2.6.22.10内核为例,我们采用的烧写工具是jflashmm。

具体步骤如下:
将bootloader的映象文件boot拷贝Jflash-XSBase270(jflashmm所在目录),并利用用Jflash-XSBase270目录中jflashmm程序,将bootloader映象文件boot烧写到开发板上。

在Jflash_Xsbase270文件夹下打开一个终端,同时给板子上电,输页8第
boot的烧写。

指令为:./Jflashmm 入命令:boot,即可完成[root@localhost pxa270] #cd Jflash_Xsbase270
[root@localhost Jflash-XSBase270] # ./jflashmm boot
4.2.3内核、文件系统的烧写
Bootloader烧写成功后,接下来就进行内核和文件系统的烧写,具体步骤如下:(1)开发板上电,进入下载模式
打开minicom,已经配置好了,拔掉JTAG下载线。

按空格键,进入下载模式
按空格键,进入下载模式
按菜单0,
51Board>set
myipaddr : 192.168.0.50
destipaddr : 192.168.0.100
myhaddr : 00:02:88:8E:CA:B1
autoboot : load kernel; load ramdisk; boot
页9第
kernelname : zImage
fsname : rootfs.img
delay : 2
按键盘上的0,进入命令行模式:[0]Comanndline mode 51board>set //查看系统状态
将系统属性修改成以上状态
按键盘上的1,进入命令行模式:[1] View current configuration,回车。

然后按2,3,4……等烧写成功后,可看到显示屏亮起来,显示当前的操作系统。

4.4驱动程序的实现
在嵌入式Linux系统中操作设备的方法,是将设备看作一个文件来访问。

用户只需注意对文件的操作。

在嵌入式Linux系统中一个设备表示为主设备和从设备。

Linux系统的设备分为字符设备、块设备和网络设备3种。

字符设备是指存取时没有缓存的设备,块设备的读写都有缓存来支持,并且块设备必须能够随机存取,字符设备则没有这个要求。

典型的字符设备包括鼠标、键盘、串行口等;块设备主要包括硬盘软盘设备、CDROM等,这些设备要想在操作系统下正常运行,必须配置相应的驱动程序。

在本系统中,Flash及USB属于块设备,AUDIO及LCD属于字符设备。

下面是读写Flash存储器的驱动程序的主要代码:
main()
{char buf[4096],buf2[4096];
int fd1,fd2;
if( ((fd1=open(“/dev/dsk5”,O_RDONLY))= = 1)||
(fd1=open(“/dev/dsk5”,O_RDONLY))= = 1)
页10第
printf(“failure on open \n”);
exit();
}
lseek(fdl,8192L,O);
lseek(fd2,8192L,O);
if((read(fd1,buf,sizeof(buf1))= = -1)||(read(fdl,buf1,sizeof(buf1))= = -1)
{
printf(“failure on read \n”):
exit();
}
for(i=0;I < sizeof(buf1);i++)
if(buf1[i] != buf2[i])
{
Printf(“diferent at offset%d\n”,i);
exit();
}
printf(“reads match\n”);
}
MP3解码部分芯片的驱动。

音频驱动程序实现的主要功能是:
(1)系统启动时可以完成芯片的初始化;
(2)具体操作时可以提供给操作系统合适的软件接口。

音频驱动初始化程序如下:
void STA013_Init(void)
{
if(STA013_SendCommand(RESET_REG,0,0x00)) //复位STA013 STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00)) //未激活状态
STA013_PrintError();
if(STA013_SendCommand(PWR_CON_REG,0,0x00)) //上电
STA013_PrintError();
if(STA013_SendCommand(FS_CON_REG,0,
I STA013L_FsValue[SysInfo.SamplingIndex])) //选择采样频率
STA013_PrintError();
if(STA013_SendCommand(IF_CON_REG,0,0x02+(0<<6))) //选择1
6位IIS数据格式
STA013_PrintError();
if(STA013_SendCommand(ANG_CTL_REG,0,0)) // 0x13, 0x12选择DAC 和Line In输入模式]
STA013_PrintError();
if(STA013_SendCommand(DGT_CTL_REG,0,0x00)) // DAC静音
STA013_PrintError();
if(STA013_SendCommand(LHP_VOL_REG,0,0x00)) //左声道音量STA013_PrintError();
if(STA013_SendCommand(RHP_VOL_REG,0,0x00)) //右声道音量
页11第
STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00)) //数据传送激活STA013_PrintError();
}
4.3 音频驱动电路
音频设备驱动程序主要通过对硬件的控制实现音频流的传输,同时向上层提供标准音频接口。

音频接口驱动向上提供2个标准接口:数字音频处理(DSP),负责音频数据的传输即播放数字化声音文件和录音操作等;混音器(MIXER),负责对输出音频进行混音处理,如音量调节等。

这2个标准接口分别对应设备文件dev/sound/dsp和dev/sound/mixer。

整个音频驱动的实现分为初始化、打开设备、DSP驱动、MIXER驱动和释放设备等部分:
⑴设备初始化主要完成对UCB1400音量、采样频率、L3接口等的初始化,并且注册设备、打开设备。

为设备分配DMA通道,根据采样参数计算出缓存内段的大小。

当缓存区和DMA设置好后,读写操作主要对缓存操作。

⑵DSP驱动的实现:DSP驱动实现了音频数据的传输即播放和录音的数据传输。

同时提供ioctl对UCB1400中的DAC何ADC采样频进行控制。

⑶MIXER驱动的实现:MIXER驱动只控制混音效果,并不执行读写操作,通过ioctl函数完成混音效果、音量的增减等功能。

4.4 Mp3播放器软件的实现
本系统使用QT/Embeded制作图形用户界面,利用开源的Madplay解码器对Mp3文件进行软件解码,功能包括打开文件、播放和暂停、快进快退、上下曲、音量加减、显示时间进度、显示歌曲名、总的播放时间、各种状态信息等。

下面就一些重要功能的实现做简要的介绍。

4.4.1 外部事件的响应
当用户通过触摸屏单击某个按钮时,QT的窗口在事件发生后将激发信号如clicked(),可以通过调用connect()函数把这个信号和一个插槽(函数)连接起来,完成对事件的响应,对于其他外部的事件(如按键),可以通过read函数来读取设备的值,并根据返回值转向相应的程序。

4.4.2 MP3文件打开功能
QT中的QFileDialog类提供了允许用户选择文件或者目录的对话框。

我们可以通过继承这个类,调用其中的getOpenFileName函数,实现建立打开MP3文件和选择文件的对话框:
QString fileName=QFileDialog:: getOpenFileName(.,fileFilters,this);
其中fileFilters指文件过滤器,只有符合fileFilters中设置的文件才能被读出。

该函数将返回所选择的MP3文件的文件名和路径名到fileName中。

4.4.3 MP3播放功能
通过调用开源的MADPLAY解码程序对打开的MP3文件进行解码播放。

页12第
MADPLAY程序播放歌曲的命令是:./MADPLAY filename
4.4.4 上下曲功能
实现上一曲播放功能时,利用QstringList类打开MP3存放路径中的MP3歌曲列表:
QstringList files=dir.entryList(*.mp3,QDir::Files);
该函数将返回播放列表,将当前播放的文件与列表中文件一一比较,并且计数,当比较到相同的文件后,将此时的计数值减1,就得到了下一曲的文件名,然后将文件播放。

4.4.5 音量调节功能
通过调用UCB1400的驱动程序的mixer接口的ioctl函数,可以实现音量的控制功能。

此Mp3播放器软件是用C语言编写的,其中函数micSendCommand()够实现mp3文件的播放、暂停、停止。

此函数是采用不同参数取值实现不同功能的方式实现的。

micSendCommand()的形式为:int micSendCommand(int style,file
*pFilename,char *env);其中:style参数取不同值时,所实现的功能不一样,style=1时实现播放;styel=2时实现暂停;style=3时实现停止。

下面列出实现软件播放的主要代码:
void play(file *pFilename,char env)
{ int fd,reva;
if(fd=open(pFilename, O_RDONLY = = 1)
{
printf(“failure on open file \ n”);
exit();
}
reval=micSendCommand(1, pFilename,env);
页13第
附录
图一电路板的正面
图二电路板的反面页14第
pcb图图三页15第
路体图三整电图页16第
页17第。

相关文档
最新文档