为什么地址是0x13?深入解析ps2-controller背后PS2手柄I2C通信原理
为什么地址是0x13深入解析ps2-controller背后PS2手柄I2C通信原理【免费下载链接】ps2-controller源师兄扩展项目: PS2 | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/ps2-controller在ps2-controller这款源师兄出品的 PS2 手柄 I2C 驱动扩展中所有通信都指向同一个门牌号——0x13。为什么偏偏是 0x13本文用通俗的方式带你从 I2C 寻址、寄存器读写到 6 字节按键数据彻底看懂 PS2 无线手柄与主控板之间的对话过程。先认识 ps2-controller三块积木玩转 PS2 手柄ps2-controller 是一个面向大师兄板的积木Blockly扩展它把整个 PS2 无线手柄 I2C 驱动封装成了 3 个积木块无需手写底层代码积木作用手柄(I2C) 初始化创建驱动实例打开 I2C 总线PS2 按键是否按下查询方向键、△○×□、L1/R1/L2/R2、START 等PS2 摇杆数值(0~255)读取 LX / LY / RX / RY 四路摇杆模拟值扩展的目录与分类配置分别定义在 config.json 和 category.json 中积木与代码生成逻辑集中在 blocksdef.js。核心问题为什么地址是 0x13这是新手最常问的问题答案其实一句话就能说清0x13 不是程序员选的而是手柄内部芯片的硬件身份证出厂即固定软件无法更改。1️⃣ I2C 总线靠 7 位地址认人I2C 是一条共享总线上面可能挂着多个设备。主设备想和谁说话就先在总线上喊出一个7 位从机地址对应地址的设备回应是我其余设备保持沉默。这个机制就像小区广播喊门牌号一样。2️⃣ 0x13 是手柄芯片厂商烧死的PS2 无线手柄的接收端由一块专用芯片负责把按键状态转成 I2C 信号。这块芯片的 7 位地址由内部寄存器在出厂时就锁定为0x13二进制0010011属于厂商的硬件设计和你在代码里写什么无关。所以 ps2-controller 的驱动源码中它只被定义为一个常量地址常量定义PS2_I2C_ADDRESS 0x13一个小彩蛋I2C 在总线上实际传输时地址后面还要拼 1 位读写标志位。所以用逻辑分析仪抓包时你会看到写操作的地址字节是0x260x13 1 | 0读操作是0x27——这正是 0x13 的变身看到它们其实就是同一个地址。手柄开了两扇寄存器大门0xAA 和 0xBB寻址到手柄后主设备还要告诉它读哪块数据。PS2 手柄约定了两个寄存器地址寄存器值内容REG_PS2_ID0xAA模式 ID1 字节用于识别手柄状态/型号REG_PS2_DATA0xBB按键与摇杆数据6 字节定义位置寄存器地址定义一次典型的问手柄现在按了什么流程是主设备向0x13写入寄存器地址0xBB告诉手柄我要读数据区手柄响应主设备连续读出6 字节数据驱动把这 6 字节缓存起来供按键查询和摇杆读取使用。对应的读写动作封装在驱动的writeto/readfrom调用中见 数据读取逻辑。驱动还做了一个贴心设计10ms 内重复查询直接复用缓存避免高频 I2C 读浪费总线带宽。6 字节数据怎么拆一张表看懂按键编码读回的 6 字节并非杂乱无章而是有严格的位定义。前 2 字节是按键位图后 4 字节是摇杆字节内容第 0 字节方向键 SELECT / L3 / R3 / START第 1 字节L1 / R1 / L2 / R2 △○×□ 四个功能键第 2 字节RX右摇杆 X第 3 字节RY右摇杆 Y第 4 字节LX左摇杆 X第 5 字节LY左摇杆 Y完整的按键位映射表见 按键定义表。⚠️一个反直觉的细节PS2 协议中按键按下时该位为 0未按下才为 1低电平有效。所以驱动判断是否按下的逻辑是检查对应位是否为 0见 is_button_pressed 逻辑。很多新手调试时觉得怎么按下去反而是 0其实这是正常协议行为。摇杆则简单直接0~255 的模拟量中位大约是 128见 摇杆读取逻辑。快速上手三步接入 PS2 手柄接线把 PS2 无线手柄I2C 版本接到大师兄板的 I2C 总线驱动使用I2C(1)并以400kHz 快速模式运行初始化代码见 I2C 初始化搭积木放一块手柄(I2C) 初始化积木后面跟上循环写逻辑用PS2 按键是否按下做条件判断用PS2 摇杆数值做摇杆控制。常见问题 FAQQ我能把地址改成别的吗比如 0x10不能。0x13 是手柄芯片的硬件地址代码里改成别的值只会导致喊错门牌号总线上无人应答。Q扫描 I2C 总线却找不到 0x13怎么办先确认使用的是I2C 版 PS2 无线手柄普通有线路由线接法协议不同再检查接线是否接触不良、电源是否供电正常最后确认 I2C 引脚接的是板子的 I2C1 总线。Q为什么读取数据要先写一个寄存器地址因为 I2C 是先说读哪、再读内容的两步协议写入0xBB是在选择数据区随后读出的才是该区里的 6 字节数据。小结0x13 是 PS2 无线手柄芯片与生俱来的硬件地址0xAA / 0xBB 是它的两扇数据大门6 字节报文则完整描述了按键与摇杆状态。理解了这条链路你就能自信地调试任何基于 I2C 的 PS2 手柄应用。【免费下载链接】ps2-controller源师兄扩展项目: PS2 | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/ps2-controller创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

华为云与腾讯云怎么选?从云原生到信创的全场景决策指南

华为云与腾讯云怎么选?从云原生到信创的全场景决策指南

前阵子有个朋友找我做选型咨询,他们要做一个面向连锁餐饮企业的数据分析中台,既要卖软件又要做交付,甲方那边点名要“信创”。朋友打开两个网页问我:华为云和腾讯云到底差在哪?参数表我看得头晕,你直接告诉…

2026/9/25 3:29:49 阅读更多 →
Sliver 仓库中的 logtail 日志服务 API:Collection、Instance 与日志存取配置接口详解

Sliver 仓库中的 logtail 日志服务 API:Collection、Instance 与日志存取配置接口详解

网络安全 【免费下载链接】sliver Adversary Emulation Framework 项目地址: https://gitcode.com/gh_mirrors/sl/sliver 点击查看 免费下载 Sliver 仓库的 vendor/tailscale.com/logtail 目录内置了 Tailscale Logs Service 的完整客户端库与接口文档(…

2026/9/25 3:28:49 阅读更多 →
Hippy-Vue 终端扩展组件详解:animation、dialog、swiper 与 waterfall 的完整用法及源码解析

Hippy-Vue 终端扩展组件详解:animation、dialog、swiper 与 waterfall 的完整用法及源码解析

跨平台移动开发前端 【免费下载链接】Hippy Hippy is designed to easily build cross-platform dynamic apps. 👏 项目地址: https://gitcode.com/gh_mirrors/hi/Hippy 点击查看 免费下载 扩展组件(Native Components)是 Hippy …

2026/9/25 3:28:49 阅读更多 →

最新新闻

VisiData 列系统深度指南:Column 计算引擎、类型系统与聚合器实战

VisiData 列系统深度指南:Column 计算引擎、类型系统与聚合器实战

数据分析CLI数据可视化 【免费下载链接】visidata A terminal spreadsheet multitool for discovering and arranging data 项目地址: https://gitcode.com/gh_mirrors/vi/visidata 点击查看 免费下载 导读:本文围绕 VisiData 的 Column 体系展开&#…

2026/9/25 6:04:47 阅读更多 →
Plannotator External Annotations API:把外部工具的标注实时推送到活动评审会话

Plannotator External Annotations API:把外部工具的标注实时推送到活动评审会话

【免费下载链接】plannotator Annotate and review coding agent plans and code diffs visually, share with your team, send feedback to agents with one click. 项目地址: https://gitcode.com/gh_mirrors/pl/plannotator 点击查看 免费下载 Plannotator 的 E…

2026/9/25 6:04:47 阅读更多 →
pylibcudf 字符串 API 实战指南:capitalize / title / is_title 的用法与底层原理

pylibcudf 字符串 API 实战指南:capitalize / title / is_title 的用法与底层原理

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 cuDF 的 pylibcudf 是 libcudf 的 Cython 绑定层,为 GPU 上的字符串处理提供直接且低开销的 Pyth…

2026/9/25 6:04:47 阅读更多 →
Kubebuilder 项目路线图全景解读:2024–2026 战略规划与源码落地

Kubebuilder 项目路线图全景解读:2024–2026 战略规划与源码落地

开发者工具代码生成CLI云原生后端 【免费下载链接】kubebuilder Kubebuilder - SDK for building Kubernetes APIs using CRDs 项目地址: https://gitcode.com/gh_mirrors/ku/kubebuilder 点击查看 免费下载 本指南以仓库 roadmap/ 目录中的官方路线图文档为核心&a…

2026/9/25 6:04:47 阅读更多 →
Xred木马深度剖析:传播链路、窃密行为与终端应急响应实战

Xred木马深度剖析:传播链路、窃密行为与终端应急响应实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:04:47 阅读更多 →
Atlas 300V Pro部署YOLO实战:昇腾推理卡模型转换与调优指南

Atlas 300V Pro部署YOLO实战:昇腾推理卡模型转换与调优指南

一块Atlas加速卡,到底算不算“运算加速卡”?这个问题我在不少群里见人问过,尤其是当你说到“atlas 300V 24G”这个型号的时候,很多人第一反应是:24G显存,那是不是类似游戏显卡那样做渲染加速的?…

2026/9/25 6:03:47 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →