折腾不靠谱的爱国者 PM5936 播放器

这台所谓的“ MP5 ”是同学扔给我的,说这玩意压箱底已经有几年了,没啥用了。于是拆开看看,顺便折腾下固件,看看能不能把 rockbox 塞进去。

P1120245

“ MP5 ”的称号自然只是个眼子,先来看看这个玩意几年前公布在媒体上的参数吧:

  • 内置 4GB 闪存
  • USB 2.0 接口
  • 内置 3.7V 850mAh 锂聚合物电池
  • 15 小时音频播放或者 4 小时视频播放时间
  • 3.0 寸 400 × 240 TFT LCD 屏幕
  • 视频格式支持 AVI 、RM 、RMVB 、DivX 、Xvid 、MS-MPEG-4 v3 、Real 、FLV 、D1
  • 最高 1024 × 576 的视频分辨率
  • 音频格式支持 MP3 、WMA 、FLAC 、APE 、WAV
  • 图片格式支持 JPEG 、BMP 和 GIF
  • 录音格式为 WAV
  • 支持 PlayFX 音效
  • 信噪比 90dB 以上
  • 调频支持 76 – 108 MHz
  • 内置单声道扬声器

总的来说,就是现在能被任何手机秒杀。难怪成鸡肋了。

P1120246

背面,各种标识、序列号,以及内置扬声器的罩子。

P1120248

一侧的螺丝孔、RESET 键和挂绳孔。同学说这机器以前 USB 接口坏掉过,送到楼下修理的时候被顺走了一颗螺丝。

P1120249

另一侧有耳机接口、USB 接口、麦克风和开机 / 锁定键。耳机插孔是 2.5mm 的,和常见的 3.5mm 耳机不兼容,使得这台机器在鸡肋的道路上越走越远。

P1120251

大部分按键被安排在顶部。

P1120253

卸下外壳侧面的两个螺丝,再拆开卡扣即可分离外壳。

P1120254

接着卸下电路板上的两个螺丝即可取出电路板。

P1120255

整台机器的核心是 Rockchip 的 RK2706 ,其参数如下:

  • ARM7EJC + DSP 核心
  • ARMv5TE + Jazelle 指令集
  • 可从内置 ROM 中的引导程序或者外部 NOR 闪存启动
  • DSP 带有 32K 字指令缓存和 32K 字数据缓存
  • ARM 核带有 8KB ROM 和 4KB SRAM ,以及 16KB 缓存。
  • 支持 JTAG 调试 ARM 和 DSP
  • 使用 48MHz 晶体和三个 PLL
  • 最大工作频率:ARM7EJC 200MHz ,AHB 和 APB 总线 133MHz ,DSP 150MHz
  • 电源管理提供正常、低速、闲置、停止和关机 5 种状态
  • 内存控制器支持外部 SRAM 、ROM 、SDRAM 和 NOR 闪存,16 位内存带宽,单片选,16MB 地址空间
  • 8 位 NAND 控制器支持 4 片选,512B / 2KB / 4KB 页面闪存,硬件 ECC 引擎,4 × 512B 的缓冲区和 DMA
  • 符合 SD 1.01 标准的 SD 控制器,3.3V IO ,0 – 25MHz 时钟频率,支持 DMA
  • 最大 300 万像素的图像传感器界面,支持 24 / 48 / 27MHz 时钟,支持 CCIR656 / YUYV / UYVU / YUV422 / YUV420 数据格式
  • 8 位串行或者 24 位并行 LCD 控制器,支持 RGB888 / RGB565 / YUV422 / YUV420 输出格式,内建 2 × 640 × 32bit 缓存,支持 DMA
  • USB Host 和 Device 控制器,支持 USB 2.0 ,12Mbps FS 或者 480Mbps HS
  • SPI / UART / I2C / I2S / PWM / GPIO 接口
  • 32 位定时器和看门狗定时器,内置 RTC
  • 4 路 10 位 1Msps 低功耗 ADC
  • 内置音频 Codec 支持立体声 24 位 Δ-Σ DAC 和立体声 16 位 Σ-Δ ADC

功能足以做一台小平板了(图像传感器界面实在是太眼子了,至今没看到带摄像头的 PMP 成为主流),但是运算能力非常捉鸡。H.264 就别想了,这玩意能跑动 MPEG-4 ASP 我都觉得很神奇。

P1120257

收音机模块,核心是国内收音机芯片大厂 RDA 的 RDA5800C 芯片,I2S 输出,带 32Ω 耳机驱动器,使用 I2C 总线控制,可工作于 TEA5767 兼容模式。另外上面还有 RDA5800C 使用的 32768Hz 晶体。

P1120258

两个 4V 22μF 钽电容,用于耳机输出耦合。

P1120259

内置的麦克风。

P1120269

开关 / 锁定键。

P1120289

角落里一只疑似 LDO 的东西,看 marking 像是 Richtek 的芯片。

P1120260

RK2706 使用的 24.000MHz 晶体。采用筒晶而非贴片振荡器本应是山寨厂的做法,如今却在以前的国内 MP3 巨头身上落实了。

P1120261

两个 SOT23-5 封装的电源管理芯片,左边是一个 1.8V 的 DC-DC 降压芯片,型号不明,旁边带有两个钽电容和一个功率电感。右边是一个线性锂电池充电芯片,型号同样不太明确。

P1120262

锂电池原本被设计成以接插件连接,后来可能因为体积或者成本的问题改成直接焊上了。

P1120264

内置的里聚合物电池采用的是台湾聚力的 AE583248P 电池,典型容量 900mAh ,最低不少于 850mAh ,重量 19 克。聚力的锂聚合物电池在国产 PMP 里非常常见。

DSC_0401

据同学说这台机器已经闲置两年了,到手以后已经没电开不了机了。这种情况下电池初次充满仍能有这个容量真是不错了。

P1120267

内置的 8Ω 0.5W 小扬声器,音质和音量都不比 Acer 的本子差(没错我就是在黑 Acer )。

P1120270

接下来看电路板的另一面。

P1120272

屏幕的 FPC 连接线。屏幕应该是台湾信利的产品,似乎是定制的型号。

P1120278

屏幕背面的喷码。

P1120280

屏幕背面的铁壳可能原本是为 4:3 的屏幕制造的。

P1120281

电路板背面除了屏幕以外主要还有闪存和内存。

P1120282

三星的 4KB 页面 MLC NAND 闪存,双管芯单片选,容量 4GB 。

P1120283

三星的 LVTTL SDRAM ,2M × 16bit × 4 banks = 16MB ,这也是 RK2706 支持的最大的内存容量。后面的 UC60 后缀说明这颗内存颗粒的最高时钟频率为 166MHz 。

P1120286

国内某厂商带关断功能的 BTL 功放,用于驱动内置的单声道扬声器。这块芯片在 3.3V 供电下有 400mW 的输出功率,电源抑制比可达 62dB ,THD + N 可小于 1% 。

P1120287

屏幕的排线下面还有一些东西。

P1120288

SN3210 屏幕 LED 背光驱动器,四路恒流输出,PWM 输入,使用电阻调节电流。也许是 LinearTech LTC3210 的阉割版,只不过阉割得比较厉害,引脚都少了一半。

接下来该想办法弄清楚 RK27xx 的固件是怎么回事了。经过一阵搜索以后,我找到了 PM5936 的固件下载,以及常见的调出 RK27 用于存储固件的隐藏分区的方法——将一个约定好的任意内容的文件放入数据分区的根目录下,通常是“ rkusb.tag ”,然后重启机器即可。但是试了一阵之后常见的文件名都没奏效,接下来该怎么办呢?

出现这种状况的原因显然是爱国者修改了固件,把“ rkusb.tag ”换成了其他名字。为了得到这个名字,我只能从现有的固件下手。网上下载下来的 PM5936.RKW 是 2.0 版本的,机内固件是 1.3 版本的,但是影响应该不大。更重要的是从体积上看 RKW 并未被压缩过,内部可以搜索到一些字符串也证明这个文件没有被 XOR 处理过。于是终端里输入“ strings PM5936.RKW | grep “\.” ”,在结果里找到了个“ PM5936.TAG ”,应该就是它了。试了一下,果然成功地出现了系统盘——和一些量产过的 U 盘一样,插上电脑以后有两个 LUN 。于是顺手备份了 1.3 版本的固件。后来的尝试告诉我 RK27 的所有固件程序和数据都在这个隐藏分区里,引导程序启动的文件是 /SYSTEM/BASE.RKW 或者 /SYSTEM00/BASE.RKW 。

接下来该编译 rockbox 玩玩了。

根据 rockbox wiki 上的信息,它对 RK27xx 的支持已经相当不错了,只不过机内闪存暂时还无法使用,只能用于带 SD 卡的机种——也就意味着在这台机器上基本会以杯具收场。不过还是值得玩一玩的,RK27 的 ROM Code 比较靠谱,变砖的可能性不大,到时候还可以刷回来。

首先需要获取 rockbox 的源码,在终端中输入

git clone http://gerrit.rockbox.org/p/rockbox

即可,顺便赞下 rockbox 服务器的网速。然后运行 rockbox/tools/rockboxdev.sh ,下载、编译并安装 arm-elf-eabi 工具链(如果机器上有现成的 arm-elf-eabi 工具链的话可跳过这一步)。然后在 rockbox 目录下新建一个 build 目录,cd 之,输入

../tools/configure --target=180 --ram=16MB --lcdwidth=400 --lcdheight=240 --type=n

然后

make && make fullzip

即可,会得到 rockbox-full.zip 和 rockbox.rkw 两个文件。

接下来需要把 rockbox 固件写入到播放器里。将 rockbox-full.zip 的内容(一个名为 .rockbox 的目录)解压到播放器数据存储分区的根目录下,然后将 rockbox.rkw 重命名为 base.rkw 放入固件分区的 SYSTEM 和 SYSTEM00 目录下。接着卸载两个分区,然后捅一下播放器的 RESET 键。

P1120298

我本来就不指望这玩意能在只有内置 NAND 的机器上工作。果不其然,启动以后显示“ ATA Error -4 ”并且有些随机出现的像素点,按任意键以后进入 debug 模式,显示 GPIO 和 ADC 的状态。好在屏幕是正常工作了。

在 configure rockbox 的时候也可以选择编译一个 bootloader ,不过把那个玩意扔进来以后连这屏东西都出不来。

接下来的问题比较棘手了,由于 rockbox 不会认 rkusb.tag 然后调出固件系统分区,因此我们需要用别的手段刷机。RK27 有一个 DFU 模式,在找不到固件时会自动进入。rockbox 带的 rk27utils 似乎无法在固件已经运行的情况下调出 DFU 模式,后来试了下 Rockchip 自己的工具也不行,可能是 bootloader 更新导致的。由于 RK27 ROM Code 的设计,只要闪存里面有任何可以运行的固件就会无条件执行,所以我们只好临时制造一下闪存不可用的假象来进入 DFU 模式。

Nandreset

拿一个回形针或者类似的东西短路一下上图中的 D0-D3 中的任意两个引脚,然后连接 USB 后再松开,如果 lsusb 看到 VID:PID 是 071b:3201 而不是 071b:3203 的话,就说明 RK2706 已经进入 DFU 模式了。如果失败了则可以多试几次。接下来可以把设备挂到虚拟机里,用 Rockchip 的 RK27 Device Manager 烧入固件。

这样,这台鸡肋的折腾之旅基本就结束了。目前这玩意还没啥意思,等 rockbox 完善 RK27 平台的 NAND 支持吧。

《折腾不靠谱的爱国者 PM5936 播放器》有4个想法

  1. 感谢博主。我手头也有个压箱底比较坑的纽曼播放器,同为 RK2706 的方案,欲知其详,但资料不全,这篇文章帮助太大了。

    不过这个机器的原厂固件已经无处可寻(硬件修订版本很多),所以在 Rockbox 对于内部储存的 Hacking 完成之前,恐怕是连主题也无法修改了(真想拿到源码以后改几个纠结的地方啊 ^_^)。

    另外显而易见的是,这些固件都是水平极差的人写的,系统分区里甚至还有坦克大战的 Demo 和永远没用的音效,以及 Codepage 的说明文档……额,不过能播放 FLAC,而且 CJK 不会乱码,其实已经很不错了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注