从能开机到能日常用:PSP Pi Mod 的三代工程迭代
发布时间:2026/9/4 23:35:25 作者:尧图编辑部 阅读量:1,286

PSP Pi mod 在掌机改造圈已经很常见把 PSP 的旧主板拿掉换成树莓派保留原本的外壳、按键、摇杆、屏幕位置让一台硬件已经老旧的主机获得新的 Linux 软件生态。真正难的并不是第一次开机成功而是如何让这台改装掌机在 v1、v2、v3 的迭代里越来越接近一台可以日常使用的机器。本文会从这类 PSP Pi mod 项目里最常见的几个工程环节出发讲清楚每一次“更好”到底改了什么、怎么验证、怎么排错以及如果你也想做类似的改造应该按什么顺序推进。这些内容不只对某一台造价昂贵的改装机有效。换到你自己手里的 PSP 外壳、树莓派版本或目标模拟器平台思路是一样的先确定升级主线再拆成硬件结构、信号链路、电源链路、软件配置和回归验证几个子问题最后用数据和录像把每次改进固化下来。下面按这个顺序展开。1. 一版到三版 PSP Pi Mod 到底在升级什么1.1 一条技术主线把“能开机”推向“能日常使用”很多第一次接触 PSP Pi mod 的人会以为改造项目的目标就是“在外壳里塞进一台树莓派然后开机进游戏”。实际上能点亮屏幕只是万里长征第一步。原始 PSP 的电池、按键、摇杆、音量开关、耳机孔、读卡槽全部都有自己的电气定义和结构约束。把树莓派装进去之后需要重新解决的不只是空间问题还有供电、散热、IO 电平、输入映射、关机不掉电、电池电量显示等一堆问题。所以判断一台 PSP Pi mod 是否“更好”不能只看它的游戏画面。常见的判断维度包括是否还能用原来的电源键和按键组合完成开机、休眠和关机电池供电时能否稳定跑完一整局而不是因为电流不足直接重启按键扫描是否有延迟、抖动、串键音量调节、屏幕亮度调节是否好用机身发热是否还能手持拔掉电源或低电量关机时文件系统会不会损坏下一版做改动时是否只改一个模块就能回归测试其他功能。这篇文章谈的就是这些维度而不是简单地罗列某台机器的零件清单。1.2 每次迭代通常会改四个子模块一台 PSP Pi mod 可以拆成四个独立但互相影响的子模块机械结构、电路连接、电源管理和软件配置。机械结构负责树莓派、电池、屏幕驱动板、按键排线在 PSP 外壳里的摆放。电路连接负责把这些部件的信号线走到正确的引脚。电源管理要回答充电、放电、低电量保护、多路电压输出各自怎么协调。软件层则需要把按键变成了 Linux 输入事件把屏幕驱动起来把关机时序和充电状态接入系统服务。四个模块的成熟度往往不同。v1 通常用飞线和 3D 打印支架验证功能v2 会针对发热和结构强度做改进v3 才开始出现真正的定制承载 PCB把原来堆在一起的一捆线变成一个可复制的模组。社区里那些“just keeps getting better”的视频本质上是作者在每个版本都挑出了当前最影响体验的一两个问题并解决掉。1.3 为什么用 PSP 外壳而不直接买一台开源掌机这是对这个项目最常见的疑问。直接买一台现成的模拟器掌机当然省事但 PSP 这类经典设备有两点不可替代一是外壳结构和按键手感经过了原厂大量测试改装者不需要从零设计外设布局二是 4.3 英寸 480x272 的屏幕窗口、肩键位置、摇杆位置都已经固定做出来的机器有非常强的辨识度。代价也很明确原厂 BMP、充电管理不一定能被树莓派直接复用按键矩阵接口电平也不一定兼容改装者必须绕过或替换原机主板的部分功能。因此 PSP Pi mod 本质上是一个“结构复用、电子重建”的项目比直接买开源掌机复杂得多也更能积累工程经验。2. 决定硬件选型时真正要看的细节2.1 树莓派型号选型不能只看性能在常见 PSP Pi mod 方案里树莓派型号通常不会优先选择标准尺寸板因为它们的长宽高都不适合放进掌机壳。常用候选集中在树莓派 Zero 系列和 Compute Module 系列两者的取舍非常直接。对比项Zero 系列Compute Module 系列典型尺寸小巧适合直接塞进掌机核心板很小但需要搭配载板GPIO 数量够用但引脚密集取决于载板设计和引出的接口性能余量适合轻量模拟和 2D 游戏更强配置适合需要更多算力的场景供电需求较低对电池压力小高负载下需要更稳的供电链路集成难度相对简单适合初版验证能做出整洁成品但改动难度更高具体选哪一个建议先看你手上 PSP 型号的内部空间再查对应树莓派型号的外形尺寸和电源需求。不要只看 CPU 型号还要考虑模块高度、天线位置、排线弯曲半径和散热器厚度。很多改造做到一半才发现树莓派装得下但屏幕排线没有空间走或者电池和主板叠放之后厚度超出后盖这些都是选型阶段要算好的。2.2 原装屏幕、按键和摇杆该如何接入PSP 原装屏幕不是 HDMI 输入驱动方式比较特殊。能不能直接用取决于是否找得到对应的驱动转接板或资料适配不同 PSP 型号的屏幕排线定义很可能不同。很多 PSP Pi mod 会改用第三方小尺寸 HDMI 或 MIPI 屏再通过定制支架贴合在原先屏幕窗口这可以大幅降低驱动难度但会牺牲原屏的观感和待机功耗需要改装者自己权衡。按键方面PSP 的按键本质上是一个矩阵电路。把它接进树莓派时需要注意电压问题树莓派 GPIO 工作在 3.3V按键矩阵只是通断信号但排线附近可能有原机其他电路直接把原机接口输出接到 GPIO 之前要先确认电位和是否共地。摇杆比方向键更麻烦一些因为它是模拟信号通常需要树莓派外接 ADC 或使用自带模拟输入的微控制器作为协处理再把结果通过串口或 USB 上报给树莓派。越早确定这一条信号通路后续软件层就越容易写。2.3 电源链路是 v1 最容易出问题的地方改装掌机最常见的故障不是“开机失败”而是“低电量瞬间系统崩溃”或“插电后树莓派反复重启”。原因是树莓派对 5V 电压波动的容忍范围有限而 PSP 原装电池和充电管理电路并不是为树莓派设计的。在硬件迭代中最好一开始就把电源抽象成下面几个问题电池电压是多少伏厂商默认终止电压和保护电压是多少哪一路给树莓派供电哪一路给屏幕背光供电是否共地从电池到树莓派 USB 输入之间有没有低压差稳压器拔掉外接电源那一瞬间背光电流会不会把 5V 拉到安全阈值以下低电量保护触发后系统是否来得及执行关机脚本。在这几个问题没有搞清楚前不要急着用飞线把 5V 直接接上去。推荐先用可调电源限流供电逐步加大负载观察电流曲线和电压跌落再决定是否需要增加电容和稳压模块。3. 电路实现先让按键矩阵把键值可靠送到系统3.1 手工飞线、洞洞板和承载 PCB 的差别v1 阶段几乎所有 PSP Pi mod 都长得很乱。飞线直连的好处是改起来快问题是你很难从一团焊点里判断是哪根线虚焊。洞洞板能把线整理得稍微清楚一些但高密度双面走线仍然很考验耐心。到了 v3 阶段常见做法是把按键接口、屏幕排线接口、电池接口、GPIO 接口、稳压电路全部放到一块定制 PCB 上树莓派通过排针或板对板连接器插在 PCB 上。PCB 这一阶段不一定要自己从零画复杂的 4 层板简单的两层板加接口标签就足够。关键是每个接口都要标注端子编号和信号名不然过两周回来维护时你会忘了 J3 排线是屏幕还是按键。3.2 用一个最小矩阵扫描程序验证按键通路PSP 按键很多逐根 GPIO 读取非常浪费引脚常见做法是矩阵扫描把按键排成行和列每次拉低一行再去读所有列如果读到低电平说明该行该列交叉位置有按键被按下。下面是一段用于理解原理的示意代码实际项目里需要根据你的引脚定义修改行和列。import time import RPi.GPIO as GPIO ROWS [5, 6, 13] COLS [19, 26] # 实际 PSP 按键数量更多这里只做最小演示 KEY_MAP { (0, 0): cross, (0, 1): circle, (1, 0): square, (1, 1): triangle, } GPIO.setmode(GPIO.BCM) for row in ROWS: GPIO.setup(row, GPIO.OUT, initialGPIO.HIGH) for col in COLS: GPIO.setup(col, GPIO.IN, pull_up_downGPIO.PUD_UP) def scan_matrix(): pressed [] for row_index, row_pin in enumerate(ROWS): GPIO.output(row_pin, GPIO.LOW) time.sleep(0.0005) for col_index, col_pin in enumerate(COLS): if GPIO.input(col_pin) GPIO.LOW: key KEY_MAP.get((row_index, col_index)) if key: pressed.append(key) GPIO.output(row_pin, GPIO.HIGH) time.sleep(0.005) return pressed while True: key_list scan_matrix() if key_list: print(key_list)这段代码适合接好线后先验证按键通断不建议直接把它作为最终驱动。原因是它缺少按键去抖、长按判断、重复上报和系统输入事件转换。也就是说能打印出cross只代表硬件链路通了想让模拟器识别还需要把结果上抛到 Linux 输入子系统。3.3 手动接线阶段最容易踩的电气坑按键矩阵的一侧直接接 5V 引脚会把 GPIO 打坏正确的排查方式是先用万用表确认触点一侧没有错误电压。树莓派和屏幕驱动板没有共地结果按键和信号全部不稳定接好 GND 后再测试。扫描频率太快或没有延时导致按键按下瞬间被漏读每行切换后保留几百微秒的电平稳定时间。多根排线靠得太近按键动作影响屏幕显示这是信号干扰优先缩短线长并让按键线和屏幕线分边走。4. 系统层配置把整机变成一个可靠的 Linux 掌机4.1 系统镜像和基础启动配置硬件接线完成后软件配置的总体目标只有一个开机自动进入模拟器前端按键能被识别关机不掉文件系统。对 PSP Pi mod 来说一般不建议用完整桌面版镜像它占空间大、启动慢、内存开销高。在零系列或计算模块上更合适的基座是精简版镜像加 RetroPie、RecalBox、Lakka 之类的开源前端或者自己手动安装轻量级桌面和启动器。这里涉及一个原则越面向功能的精简系统越容易做快速迭代。因为你可以把精力集中在按键映射、网络配置、音频输出和关机脚本上。修改任何系统配置前先养成备份习惯sudo cp /boot/config.txt /boot/config.txt.bak.$(date %s) sudo nano /boot/config.txt常见启动配置里需要确认三块内容第一是屏幕或显示驱动相关的dtoverlay第二是音频输出的默认设备是否指向你的声卡第三是是否关闭不必要的蓝牙、WiFi 节能策略以减少对音频和按键的干扰。不要直接照抄别人的config.txt同一型号树莓派、不同屏幕驱动板、不同系统版本配置都可能不同。4.2 用一个 GPIO 安全关机服务防止低电量丢数据树莓派在掌机里最怕的是直接断电。游戏存档写入一半时断电轻则存档损坏重则文件系统异常。解决思路是用一个硬件关机按键或电量报警信号触发系统正常关机。下面示例的思路是把低电报警信号或物理关机键接在一个 GPIO 上平时引脚被外壳电阻拉高触发时拉低脚本等待 800ms 确认不是抖动然后执行系统关机。#!/usr/bin/env python3 import time import subprocess import RPi.GPIO as GPIO SHUTDOWN_PIN 26 LOW_BATTERY_PIN 5 GPIO.setmode(GPIO.BCM) GPIO.setup(SHUTDOWN_PIN, GPIO.IN, pull_up_downGPIO.PUD_UP) GPIO.setup(LOW_BATTERY_PIN, GPIO.IN, pull_up_downGPIO.PUD_UP) def should_poweroff(): # 物理关机键被拉低或电池板输出低电量信号 if GPIO.input(SHUTDOWN_PIN) GPIO.LOW: time.sleep(0.8) return GPIO.input(SHUTDOWN_PIN) GPIO.LOW if GPIO.input(LOW_BATTERY_PIN) GPIO.LOW: return True return False while True: GPIO.wait_for_edge( SHUTDOWN_PIN if True else LOW_BATTERY_PIN, GPIO.FALLING, bouncetime200 ) if should_poweroff(): subprocess.run([systemctl, poweroff])把脚本放到/usr/local/bin/psp-pi-power.py后用 systemd 让它开机自启[Unit] DescriptionPSP Pi Safe Shutdown [Service] ExecStart/usr/bin/python3 /usr/local/bin/psp-pi-power.py Restartalways [Install] WantedBymulti-user.target保存为/etc/systemd/system/psp-pi-power.service然后执行sudo systemctl daemon-reload sudo systemctl enable --now psp-pi-power sudo systemctl status psp-pi-power这一步对整机稳定性的提升非常明显。至少能保证在低电量或手动关机时系统有足够时间卸载文件系统和关闭进程。4.3 把扫描结果上报成 Linux 输入事件只会在终端打印cross是不够的模拟器默认只读取/dev/input/event*。如果不想深入内核可以用 evdev 的 UInput 接口创建一个虚拟手柄把矩阵扫描结果转成标准按键事件。这个方案的好处是硬件层和输入事件层解耦后续想换按键电路不需要改模拟器配置。示意代码如下import time from evdev import UInput, ecodes as e # 虚拟手柄名称可以自定义 ui UInput( events{ e.EV_KEY: [ e.BTN_SOUTH, # cross e.BTN_EAST, # circle e.BTN_NORTH, # triangle e.BTN_WEST, # square ] }, namepsp-pi-pad ) def report_key(linux_key, pressed): ui.write(e.EV_KEY, linux_key, 1 if pressed else 0) ui.syn() # 把上一节的 cross 映射成 BTN_SOUTH report_key(e.BTN_SOUTH, True) time.sleep(0.1) report_key(e.BTN_SOUTH, False)在完整实现里你需要把矩阵扫描线程的结果翻译成按键事件并处理长按、连按和多个按键同时按下的场景。测试时先使用模拟器自带的输入配置页做自动识别确认按键名正确再进游戏验证延迟。5. 验证一台改进后的 PSP Pi Mod 好不好用5.1 每个版本出版前先跑同一套最小用例很多改装视频会给人一种“改完就成功”的错觉。实际项目和开发软件一样每次改动后都要回归测试。最简单的方法是在电脑上维护一个本地测试清单包含十到二十项固定操作。测试项建议覆盖三块开机序列按电源键开机后能否 20 秒内进入前端关机键是否生效输入序列方向键、四个主按键、肩键、音量键、开始/选择键逐一按下是否映射正确同时按两个键是否产生串键电源压力满电量无线连接打 30 分钟记录温度、电流、是否低电量误关机。无论 v1 还是 v3都跑同一套测试这样你才能量化地说“这一版比上一版启动快两秒”或“扬声器不再有滋滋声”。5.2 用命令和工具留下可比较的数据简单的手感问题用文字不够准确要尽量留下数据。Linux 下可以通过jstest或evtest直接查看手柄事件sudo apt install joystick evtest jstest /dev/input/js0正常输出会显示类似这样的信息Driver version is 2.1.0. Joystick (psp-pi-pad) has 6 axes and 12 buttons.按键按下时对应 Button 的值会从 0 变成 1模拟摇杆的 Axis 会在 -32767 到 32767 之间变化。如果某个轴只能输出 0 和 1说明摇杆被映射成了数字按键而不是模拟量需要回到驱动层检查。功耗和温度可以用 USB 电流表、万用表和热电偶记录。每次记录尽量固定条件屏幕亮度 80%、音量 50%、运行同一款游戏、WiFi 打开。否则你很难区分温度上升是因为版本改动还是因为环境温度升高。5.3 视频记录的意义在于追踪回归而不是展示成果标题里的视频元素其实反映了很多改机作者的工作习惯。视频不只是展示成果而是一种精细的回归证据。上一版按键存在迟滞录下来这一版调整了扫描代码再录一段同样按键节奏的画面两段视频放在一起问题是否解决一目了然。这里建议在保存录像时使用统一命名规范比如v3-test-input-20250107.mp4、v3-test-power-15min.csv。如果只有一个视频文件名几天后很难回忆起这个片段对应哪次修改。数据文件建议统一放在一个test-logs目录并按版本建立子目录。这套习惯能让你的“更好”有依据。6. 常见故障排查表和迭代方向6.1 先看现象再查链路最后改配置结合这类 PSP Pi mod 项目常遇到的问题可以用下面这张表作为排查入口。问题现象常见原因检查方式处理建议插电没反应电流表显示为 0充电接口、电池保护板或电源开关断开用万用表从电源入口逐段量电压先确认 5V 是否到达主控再补焊或更换线材开机卡在开机画面镜像损坏、存储卡接触不良、config 配置冲突查看存储卡在另一台设备上能否正常挂载优先重新烧录镜像逐行检查 config.txt 改动按键按下但偶发漏键矩阵扫描速度太快或线材松动用上一节扫描程序连续按住按键 10 秒看输出降低扫描周期增加去抖重新压紧排线两个按键同时按会串键列线或行线短路或扫描逻辑没有处理多键用万用表检查相邻排线间阻值检查焊点飞线代码中用按键状态表记录多键状态游戏过程突然重启电池瞬时电流不足5V 跌落接可调电源观察大负载时电压是否低于 4.8V增加稳压电容或更换低内阻电池低电量没有自动关机电量报警信号没有接到 GPIO或脚本未运行systemctl status psp-pi-power查看服务状态重新确认报警线电平和脚本触发条件屏幕开机后有波纹或花屏屏幕排线和按键线互相干扰开机后转动排线位置看现象是否变化分开走线给关键信号加屏蔽缩短线长音量键调节生效但耳机无声声卡默认设备不是输出设备aplay -l查看声卡设备编号调整 asound.conf 默认声道排查原则是沿着信号链路从输入到输出逐级确认先量电源再看接线然后看系统日志最后才动软件映射。不要一上来就重刷镜像否则真正的硬件问题会被掩盖。6.2 后续版本还能扩展的方向当基础功能稳定后一个 PSP Pi mod 项目通常还有不少改进空间。常见方向包括加入 ULPI 或 I2C 电量计让系统能读取真实剩余电量并显示在界面上使用外部微控制器统一管理按键、摇杆和电源状态降低树莓派 GPIO 负担优化散热结构在高负载下把温度控制在手持舒适范围调整整机重量配平让握持手感接近原装掌机。如果追求更强的性能可以从 Zero 系升级到性能更高的 Compute Module 并重新设计载板但这会带来更大的发热和电流需求属于整机重新设计而不只是换一块板子。7. 落到自己项目里的工程建议7.1 三个容易走弯路的坑第一不要低估迭代成本。改装项目很容易在 v1 阶段堆积大量临时方案比如用胶带固定飞线、用软件曲线解决硬件缺陷。如果每代版本都保留临时方案后续工作量会指数级上升。建议在任何临时方案上标记一个到期时间并明确下一版要替换成什么正式结构。第二不要围绕模拟器配置做改造。配置模拟器当然能让画面和手感变好但把时间全部花在调菜单上系统一旦要更换镜像或存储卡所有经验都会失效。更值得投入的是通用层按键如何作为输入事件上报、电源如何可靠切换、温度如何采集。这些知识在更换前端后仍然可用。第三不要为了追求视频效果隐藏风险。很多改机展示只录操作顺利的部分不展示存储卡损坏和过热重启。如果你在写自己的项目笔记建议把失败过程也记录下来因为它往往比成功画面更能帮助下一版优化。7.2 可复用的版本发布前检查清单下面是一份可以直接用于 PSP Pi mod 项目的发布前清单建议每完成一个版本都逐项确认整机能从冷启动进入前端时间与上一版对比有记录电源键能执行安全关机低电量信号能触发系统关闭十字键、主按键、肩键、音量键全部映射正常两个按键同时按下不串键长按不会误触发重复动作屏幕亮度调节有效显示无花屏关闭背光后可正常恢复扬声器和耳机至少有一条输出链路正常电池从满电到低电量全程无意外重启高负载运行 30 分钟后机身温度可以接受存储卡镜像有备份系统关键配置在版本控制或备份目录中测试视频和数据文件已按版本归档所有飞线焊点已经固定并再次检查没有裸露焊点和尖锐边缘。7.3 软件和内容版权边界这一类改装项目最终都会涉及运行哪些程序的问题。建议所有软件包、模拟器前端和使用的系统镜像都从项目官方源或可信分发渠道获取。需要自备内容时优先使用明确允许使用的自制程序、开放协议游戏或你持有的合法内容。不要为了还原“开机即玩”效果而去下载来路不明的镜像或资源隐藏脚本和恶意硬件后门在掌机改装场景里同样存在。玩 PSP Pi mod 真正值钱的部分是你能独立完成结构适配、信号接入、电源管理和软件集成这一整套闭环。守住内容合规的边界这个项目才能长期迭代下去也才值得拿出更多精力继续改进。