|
感谢关注耳机俱乐部网站,注册后有更多权限。
您需要 登录 才可以下载或查看,没有账号?注册
x
事先声明,纯属转帖。为免大家猜疑,声明也非当红炸子鸡——
http://bbs.hifi168.com/showtopic-200671-7.aspx
窥一斑而知全豹,通过蛛丝马迹来分析高清播放机的系统架构
时下,各种品牌多种价格的高清音乐播放器,如雨后春笋般出现在市场上。本人就是一穷烧,面对网络上浩瀚如海的无损资源,禁不住诱惑,于是乎开始勒紧腰带,扎紧脖梗,终于积攒了一点小钱。由于这点小钱来之不易,所以出手格外小心。高清播放器的理论我不懂,但可以学习,有了网络,学习变得不再是难事。看测评,拜帖子,这是最常用的手段了,再加上自己的分析,最终确定了自己的购买目标,买到了自己感到满意的播放器和解码器。在此,将相关经验与诸位烧友分享。
注:本文不涉及任何厂家、任何个人,不涉及任何产品。请诸位切勿对号入座,如有巧合,纯属偶然。
下面就分享一下我的做法,不当之处,请诸位专家斧正。
11.jpg (320.83 K)
2012-1-17 20:36:11
3、固件内容分析。
固件内容分析的目的,就是从固件中的有关文件中查找对我们有帮助的蛛丝马迹。比如开发商,硬件相关的信息等。既然是播放器,我们就把注意力放在那些文件名与音乐、视频相关的文件上,比如:hifi,mv,player,audio之类名称的文件,当然也可能用yinyuebofang之类的汉语拼音设置文件名。固件内容分析要用到的一个工具,就是UltraEdit,简称UE,这是个编辑器,使用方面很简单。
我先打开一个名字hiendplayer的文件,UE打开该文件后,左边显示的16进制代码,右边显示的ASCII字符,我们所要关注的不是左边的天书,而是右边的字符。拖动窗口垂直滚动条或者按键盘上的翻页键,可以往前或往后查看。由于程序设计过程中不可避免的要输出某些信息,比如出错后的提示信息、厂家的版权信息等,这些信息可以为我们分析系统架构提供指导。翻动过程中,我发现了一行信息 “Jz47 alloc frame failed: can not mmap the memor”,很显然这是一个错误提示。
2.JPG (212.99 K)
2012-1-17 20:36:11
等等!Jz47,我的昂达VX989+,主控不是Jz4725吗?难道是君正的方案?再找找看,文件中多次出现了JZ字符,现在可以暂定该播放器是采用的君正方案。
查阅官方资料,进一步分析架构
先到君正官网上了解一下当前常用方案,君正现在推荐的芯片有:JZ4750,JZ4755,JZ4760,JZ4770,依稀记得播放器官网中提到升级后的产品CPU更快,而且支持浮点运算,好了,这又是一个切入点
看一下官方的产品概述
以下文字完全引用自君正官网:
http://www.ingenic.cn/product.aspx?ID=57
JZ4755是一款高性价比多媒体处理器SOC,主要适用于中低端PMP等便携式消费电子产品。JZ4755基于君正创新的XBurst CPU微体系架构,CPU主频达到360MHz,集成了丰富的外部设备接口。JZ4755 集成了君正创新的视频处理单元,支持多格式720P解码。
http://www.ingenic.cn/product.aspx?ID=58
JZ4760是一款高性能、高集成度、超低功耗的应用处理器芯片,内置强大的视频引擎和图形引擎, 适用于智能手机、平板电脑、GPS导航仪和电子书等移动设备。JZ4760芯片基于君正创新的XBurst CPU微体系架构,CPU主频可达600MHz,支持SIMD和浮点指令,集成了丰富的通用外设接口。JZ4760支持Android、Linux、WinCE、RTOS等多种操作系统,支持WiFi/3G/BT/TV模块,可以提供流畅的移动互联网体验。
http://www.ingenic.cn/product.aspx?ID=78
JZ4770是一款高性能、高集成度、超低功耗的应用处理器芯片,内置强大的视频引擎和图形引擎, 适用于智能手机、平板电脑、GPS导航仪和电子书等移动设备。JZ4770芯片基于君正创新的XBurst CPU微体系架构,CPU主频可达1GHz,支持SIMD和浮点指令,集成了丰富的通用外设接口。JZ4770支持Android、Linux、WinCE、RTOS等多种操作系统,支持WiFi/3G/BT/TV模块,可以提供流畅的移动互联网体验。
根据官网资料,自JZ4760开始支持浮点运算了。下一步就专门针对JZ4760的性能参数进行检索,与播放器厂家提供的相关指标进行对比核对,以进一步确定是否是采用的这一方案。
我们从官网上下载JZ4760的Datasheet,链接是:ftp://ftp.ingenic.cn/2soc/4760/JZ4760_ds.pdf,下载后用PDF阅读器打开。通过查看芯片文档,我们可以了解该芯片的性能指标,用途及其结构模块。君正官网上对JZ4760芯片产品的性能及用途介绍如下:
JZ4760是一款高性能、高集成度、超低功耗的应用处理器芯片,内置强大的视频引擎和图形引擎, 适用于智能手机、平板电脑、GPS导航仪和电子书等移动设备。JZ4760芯片基于君正创新的XBurst CPU微体系架构,CPU主频可达600MHz,支持SIMD和浮点指令,集成了丰富的通用外设接口。JZ4760支持Android、Linux、WinCE、RTOS等多种操作系统,支持WiFi/3G/BT/TV模块,可以提供流畅的移动互联网体验。(以上内容完整引用自君正官网http://www.ingenic.cn/product.aspx?ID=58)
看来,播放器仅仅使用了这款芯片的音频及外部接口。正因为此播放器是HIFI级音乐播放器,所以,我也只对其音频部分以及其外部接口感兴趣。
重头戏开场了:
先看一下官网上JZ4760的结构框图
4.JPG (71.77 K)
2012-1-17 20:42:24
官网上对外部接口的类型罗列如下:
Peripherals:AC97/I2S/SPDIF, Audio Code, LCD-IF, TV Encoder, EPD-IF, Camera-IF, Touch ADC, 1-wire, PCM,;I2C, SPI, UART, SIM-IF, SD/MMC/SDIO, USB Host, USB OTG 2.0, TS-IF
看来功能蛮强大的(注:功能不等于性能)
再来看JZ4760的Datasheet (ftp://ftp.ingenic.cn/2soc/4760/JZ4760_ds.pdf)
我们依旧只关注其音频和外设部分
On-chip audio CODEC
– 24-bit DAC, SNR: 95dB
– 24-bit ADC, SNR: 90dB
– Sample rate: 8/9.6/11.025/12/16/22.05/24/32/44.1/48/96kHz
– L/R channels line input
– 2 MICs input, differential or single-ended
– L/R channels headphone output amplifier support up to 16ohm load
– Capacitor-coupled
– Mono differential line out
– Mono 450mW amplifier for speaker out for 8ohm load
AC97/I2S/SPDIF controller
– Supports 8, 16, 18, 20 and 24 bit for sample for AC-link and I2S/MSB-Justified format
– Support 2/4/6/8 channels data out for I2S
– Support compress data format for SPDIF
– DMA transfer mode support
– Support variable sample rate mode for AC-link format
– Power down mode and two wake-up mode support for AC-link format
– Programmable Interrupt function support
– Support the on-chip CODEC
– Support off-chip CODEC
– Support off-chip HDMI transmitter audio
PCM interface
– Data starts with the frame PCMSYN or one PCMCLK later
– Support three modes of operation for PCM: Short frame sync mode, Long frame sync
mode, Multi-slot mode
– Data is transferred and received with the MSB first
– Support master mode and slave mode
– The PCM serial output data, PCMDOUT, is clocked out using the rising edge of the
PCMSCLK
– The PCM serial input data, PCMDIN, is clocked in on the falling edge of the PCMSCLK.
– 8/16 bit sample data sizes supported
– DMA transfer mode supported
– Two FIFOs for transmit and receive respectively with 16 samples capacity in every
Direction
简单总结一下Datasheet中音频及接口部分:
内置音频编、译码器(CODEC):采样频率最高支持96K,24Bit DAC 信噪比95dB,24Bit ADC信噪比90dB,2路MIC输入,内置功率放大电路和耳机驱动电路
AC97/I2S/SPDIF 控制器:支持在线和离线编译码器接口(即内置和外置DAC),SPDIF音频接口方式支持压缩数据,I2S接口支持:2/4/6/8 通道数据输出
PCM 接口:具有PCM 串行输入和PCM串行输出两种接口。
外部设备接口主要有:SD/MMC/SDIO, USB Host, USB OTG 2.0
好了,我们对JZ4760的音频接口功能和外部设备接口已经有了初步了解,现在再来看看固件对应产品的部分指标:
1.支持最高32Bit/358.2KHz的数码流播放
2.支持数据流硬盘录音(24Bit/96KHz)
3.支持WAV/FLAC/ACC等数字音频格式
4. 支持2路USB2.0 接口
5. 不支持SATA接口硬盘,不支持IDE接口硬盘
6. 不支持DSD解码
现在,将JZ4670和固件对应播放器的主要功能、指标建立起联系,一一分析是否能够建立对应关系:
1) 播放器最高支持32bint/358.2KHz数码流播放,而JZ4760只支持24Bit/96KHz数码流播放,这一点二者并不矛盾,JZ4760的AC97/I2S/SPDIF 控制器支持在线和离线式编译码器,也就是说,只要驱动外置DAC,可以播放更高规格的数字音频文件。
2) 数字录音功能,JZ4760,具备PCM 串行输入接口,也就可以将PCM流保存至储存载体。但由于内置CODEC最高支持24Bit/96KHz,因而,更高规格的PCM数据输入对于JZ4760来说,是无法或者说是没有必要支持的。播放器提供的数字录音格式恰巧也是24Bit/96KHz
3) 接口方面,播放器支持的外部存储设备恰巧也在JZ4760提供的范围之内
4) DSD编码,播放器和JZ4760均不提供支持
JZ4760的Datasheet中提到的其他一些功能,诸如:触摸屏控制,红外线接口,视频解码等功能,在播放器上均有所体现。喜欢探个究竟的朋友可以自行对比分析。
至此:根据固件剖析该播放器的工作基本完成,现对该播放器架构简单总结如下:
主控部分:使用的是JZ4760芯片,并且,对芯片的提供的视频、摄像头、话筒录音等功能进行了屏蔽。
解码部分:舍弃了芯片本身的DAC,而通过I2S或其他接口,将数据流送至离线(外部)DAC解码输出。受架构限制不支持SATA硬盘,更无法实现DSD解码。
本文旨在为各位烧友提供一种分析思路和方法,文中提到的数据,除芯片数据引用自君正官网数据外,其他数据均为虚构,请厂家和个人切勿对号入座。文中观点仅代表个人观点,与任何厂家、团体无关,不当之处,请诸君斧正,大家共同探讨共同提高。
一、目前,常见的高清播放器,多为嵌入式系统,操作系统大都是Linux或Android,而Android也是一种以Linux为基础的开放源码操作系统。至于系统架构的有关知识,在此不再讨论,大家可以自己上网搜索资料学习。
二、需要用的工具软件:
1、Winrar -压缩解压利器
2、WinImage – 功能较强的磁盘镜像工具
3、UltraEdit32 - 强大的文件编辑器,可以打开任何类型的文件,显示其内容
4、IDA 4.8,强大的静态反汇编工具,可以将可执行文件、动态链接库反汇编成汇编代码,支持Linux 下可执行文件的反汇编(IDA4.8因相对比较专业,在此不作讨论)
三、操作步骤及分析
大家知道,不论系统封装的如何严密,系统升级终究是要通过发布固件,由用户来进行升级这种形式来实现的。也就是说,你拿到手的固件,最终会写到系统的内部。这就为我们提供了一个有效的切入点。
目前,固件大都是通过软件打包的方式封装成一个文件来发布,也就是说发布的固件表面上看起来是一个文件,其实它是一个软件包。那么,如何来将软件解包,解压出包内文件呢?请随我来。
1、固件包
固件打包,固件包要么是使用通用软件将文件打包,要么是厂家自己开发的封装工具来打包。我们今天只讨论通用软件打包这一方式的解包办法。目前,压缩文件的格式常用的有.RAR、.ZIP、.GZ、.tar,还有一种磁盘镜像格式:.IMG。在嵌入式系统中最使用的操作系统是Linux,而Linux中最流行的压缩格式一般为.tar和.gz。这两种格式的压缩包,在windows操作系统下,用Winrar均可以解压。.IMG格式的封包,可以用WinImage打开并提取出来保存。
2、解压固件
我们就开始想办法把固件解包。这一过程可能比较繁琐,也需要碰运气,折腾半天,有可能一无所获,实在解不开的话,只能从自己的RP方面找原因了。固件大家可以到有关高清播放器官网去下载官方提供的固件升级包,一般厂家的固件都是以压缩包的形式提供的。下载以后,用Winrar之类的解压工具解压到任意目录即可。固件压缩包中一般会有一个或几个文件,包括升级用固件、升级说明甚至是此版本固件有哪些改进等等。我们关心的就是升级用固件。我从某网站下载了升级用固件包,文件名:“20121221末日版fireware.rar”,用Winrar解压缩到20121221末日版fireware目录后,进入目录,目录中只有一个名为:“20121221末日版 update_firmware.bin”的文件,这个文件是要放在U盘上由播放机的系统软件来读取并写入播放机来完成升级的。前面已经提到Linux下常用的封包格式,我们来碰碰运气,先把扩展名bin改成tar试试,文件扩展名改完后文件图标就变了,不要管他,双击试试Winrar能否打开,运气还不错,Winrar成功把文件打开了,打开一看,包里又只有一个文件:20121221末日版 update_firmware,不去管他,直接解压,解压后,给这个文件再加上个扩展名:.tar,继续用Winrar解压,解压后的目录里终于出现多个文件了,其中有一个文件是压缩格式,文件名为:update-files.tar.gz,再次将其解压缩,解压缩后,包中有个usr目录,目录中包含多个目录和文件。至此,固件解包完成了。 |
|