# 我的世界红石线_数字方案 **Repository Path**: TiX233/minecraft_redstone_wire_digital ## Basic Information - **Project Name**: 我的世界红石线_数字方案 - **Description**: 使用自研的红石通信协议提供高效通信 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-06 - **Last Updated**: 2025-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 我的世界红石线 **目录:** - [我的世界红石线](#我的世界红石线) - [零、仓库简介](#零仓库简介) - [一、项目简介](#一项目简介) - [二、红石通信协议](#二红石通信协议) - [1、物理连接](#1物理连接) - [2、协议特性](#2协议特性) - [3、协议原理](#3协议原理) - [三、烧录](#三烧录) - [四、调试](#四调试) - [1、连接](#1连接) - [2、调试命令](#2调试命令) - [3、自定义命令](#3自定义命令) - [4、脚本说明](#4脚本说明) ## 零、仓库简介 本仓库属于 [我的世界红石](https://gitee.com/TiX233/minecraft_redstone_repo) 的一个子部分,用于存储 `红石线` 软件相关的内容 为便于管理,代码与电路将分别在以下平台开源: * 代码:gitee/github * 电路:立创开源硬件平台:[我的世界红石_数字方案](https://oshwhub.com/realtix/minecraft_redstone_digital) ## 一、项目简介 本项目主要基于 PY32F002B 进行实现,通过自己设计的红石通信协议来在 `一个通信周期` 为所有红石元件内传递所有红石信号 所有与 py32 相关的软件工具以及使用手册均可从普冉官网或芯岭技术官网下载到 ## 二、红石通信协议 ### 1、物理连接 仅需三根线即可完成通信 * 电源线:输入 5~12V,同时承载同步时钟功能 * 通信线:3.3V 弱上拉,通信时先拉低者红石信号更强 * 公共地 ### 2、协议特性 * 仅需一次通信就能完成所有红石元器件的信号强度计算 * 不会出现类似 java 版中的红石粉大量递归情况 * 接口占用少,包含电源线仅需三根线 * 外设占用小,不需要串口之类的外设,每个方向只需要一个弱上拉的 gpio 即可 * 系统运行资源占用小,只需每个毫秒读写一次引脚电平即可 ### 3、协议原理 **信号同步原理:** 将供电器连接到线路中的任意部分后,它会每两个游戏刻(100ms)关闭电源输出 1ms,各个红石元器件上因为电容的存在,并不会因为电源关闭 1ms 而关机,它们会在检测到电源线上升沿后开始进行数据准备,1ms 后所有设备正式开始通信 **红石强度比较原理:** 整个通信帧有如下 20 个 bit: * bit0:check 位,此位必为高电平,否则视为该线路损坏 * bit1:预留位 1 * bit2:预留位 2 * bit3 ~ bit18:强度位,自身红石强度为 n,则会拉低后 n 个 bit * bit19:ack 位,如果某个方向先拉低了强度位,会拉低该方向的 ack 位以告知对方 一个 bit 占 2ms,偶毫秒用来写引脚,奇毫秒用来读引脚,所以一次通信为 40 ms,在一个游戏刻(50ms)以内 强度位拉低后 n 个 bit 为本协议的核心,强度越强的会越先拉低,从而无痛实现强度比较 **时序样例:** ![t](./Pic/时序样例.jpg) > 表中所有红石元件之间的通信都是同时进行的,并非 a 传完 20 bit 给 b 后 b 再传 20 bit 给 c ## 三、烧录 硬件: 通过 DAP-Link/J-Link/PY-Link 使用 SWD 接口连接电脑与板子 软件: 一般使用 keil5 或者 puya 官方提供的 CoFlash 版本进行烧录, 或者使用 openOCD/pyOCD 详细烧录方法请参考 puya 官方手册 **对于 keil,SWD 速度不能超过 500K** ## 四、调试 如果需要对本项目进行二次开发,那么可能需要一些调试手段 为了便于调试以及节约成本,本项目未引出串口,而是使用 Segger RTT 进行指令调试。当然,并不一定需要使用 Segger 的 J-Link,这里使用的是 DAP-Link 与 Vofa+ 进行指令调试 参考内容: * [@IOsetting:普冉PY32系列(五) 使用JLink RTT代替串口输出日志](https://www.cnblogs.com/milton/p/17112492.html) * [@nnnnichijou:Clion中OpenOCD结合SEGGER RTT高速输出调试信息](https://blog.csdn.net/qq_47288055/article/details/143437171) ### 1、连接 * 下载 puya 官方提供的 openocd,并添加到系统环境变量(可能需要安装 cygwin) * 使用 DAP-Link 通过 swd 接口连接电脑与电路板 * 创建服务端: * 在 `git bash` 使用 `sh openocd_rtt2vofa.sh` 命令来创建服务端 * 如果没有 `git bash`,那么可以使用 `cmd` 输入 `openocd -f rtt2vofa.cfg` * 打开 `Vofa+`,输入下图配置点击连接即可使用命令进行调试 ![vofa](./Pic/Snipaste_2025-07-22_00-23-08.jpg) ### 2、调试命令 命令格式同 MC 的指令,使用 `/` 作为开头,例如 `/hello` 命令, 可以通过 `/help` 命令来查看板子的所有命令以及命令介绍 ### 3、自定义命令 可在 `User/Src/cmdProcess.c` 文件中参照其他命令来添加自定义命令以方便调试 ### 4、脚本说明 * `pyocd_rtt.sh` :用来方便用 pyocd 打开 RTT 的一个小脚本 * `rtt2vofa.py` :用来将 pyocd 的 rtt 输入输出通过 tcp 传输到 vofa+ 的脚本,但是只能输出,不能输入 * `openocd_rtt2vofa.sh` :使用 openocd 创建 tcp 服务端,vofa+ 连接后可以正常输入输出,关联 `rtt2vofa.cfg`