littlebot
Published on 2025-04-11 / 4 Visits
0

【源码】基于C语言的Pinephone键盘开源固件系统

项目简介

本项目是专门为Pinephone键盘打造的开源固件。采用双固件架构,包含通用库存固件与可定制的用户固件,无需硬件修改即可灵活调整键盘功能。库存固件可直接实现键盘完整功能,还支持通过I2C接口从Pinephone本身进行用户固件的更新或定制。项目基于开源软件,无依赖,仅需sdcc 4.1+即可构建固件。

项目的主要特性和功能

  1. 双固件架构:库存固件实现键盘完整功能,能报告键盘矩阵原始状态;用户固件用于更新或定制,满足硬件修改后的软件支持需求。
  2. 灵活配置:可在键盘驱动中随意更改键映射和组合,无需重新刷写固件。
  3. 低功耗设计:利用MCU掉电功能,闲置时功耗低至9mW,主动扫描模式下功耗20mW。
  4. 多方式刷机:支持通过USB和I2C接口刷机,USB可更新库存固件,I2C可在保留库存固件的同时写入用户固件。
  5. 自我检测:具备自我检测功能,可快速检测键盘矩阵问题。
  6. I2C接口控制:通过I2C接口暴露寄存器,用户可读写寄存器控制键盘固件操作。

安装使用步骤

准备工作

确保已下载本项目的源码文件,且安装了sdcc 4.1+版本。

编译固件

进入firmware目录,执行./build.sh命令编译新固件。

刷机方式

USB刷机

  1. 焊接USB线到键盘控制板。
  2. 保存原始固件:
    • ./ppkb-usb-flasher info > saved-info.txt
    • ./ppkb-usb-flasher --rom-out saved-rom.bin read
  3. 刷入新固件:
    • ./ppkb-usb-flasher --rom-in firmware/build/fw-stock.bin write reset

I2C刷机

  1. 按特殊方式构建用户固件,使其位于代码ROM的0x4000地址。
  2. 刷入新固件:
    • ./ppkb-i2c-flasher --rom-in firmware/build/fw-user.bin write reset

使用操作

  • 修改固件运行方式:可修改寄存器0x20的设置,但设置在复位后不保留。
  • 读取键盘矩阵状态:从地址0x07进行13B的读取事务,通过计算CRC8校验数据。
  • 自我检测:向寄存器0x21写入命令'r'或'c',从寄存器0xff重复读取以获取自检结果。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】