站内搜索
发作品签到
我的世界红石_数字方案
专业版

我的世界红石_数字方案

518
0
0
0

简介

通过自研的红石通信协议完成高效通信

简介:通过自研的红石通信协议完成高效通信

开源协议

CERN Open Hardware License

(未经作者授权,禁止转载)
创建时间:2025-08-28 11:34:28更新时间:2025-09-11 09:25:17

描述

我的世界红石_数字方案

一、项目简介

效果演示视频:【Bilibili】@realTiX - 如何在现实中实现我的世界红石?

这是一个尝试在现实中实现 MC 红石的小项目,这次改用了数字方案。本项目主要基于 PY32F002B 进行实现,通过自己设计的红石通信协议来在 一个通信周期 为所有红石元件内传递所有红石信号

本设计采用的是供电与红石源分离的设计,避免因在每个红石源上集成供电部件而造成成本增加。一般只需要在系统的任意位置接入一个供电器即可,供电器通过 CH224k 受电芯片从 Type-C 获取 9V 的电压输出给系统

所有与 py32 相关的软件工具以及使用手册均可从普冉官网或芯岭技术官网下载到

二、开源方式

开源协议:CERN-OHL-S

PCB:本文
代码:

外壳:

三、红石通信协议

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 为本协议的核心,强度越强的会越先拉低,从而无痛实现强度比较

时序样例:

时序样例.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+ 进行指令调试,具体的调试方法可见代码仓库 Readme 文件,此处不赘述

参考内容:

六、常见问题

为什么不用磁吸?

因为 pogopin 很贵,一对四块,四个方向就是十六块,难以承受。另外,本次改用数字方案顺便将排针排母对调了位置,不容易扎手了

为什么不用 stc8?

1、贵,py32f002b tssop20 散买五毛;stc8g1k08 tssop20 散买一块五,8h 散买七毛多
2、py32 HAL 库与 stm32 的 HAL 库使用相同的 API,方便开发;stc8g 的库与 stc8h 共用(或者说完全没考虑 stc8g),先前开发 stc8g 发现需要自己额外参考手册修改部分寄存器的配置,所以对 stc8 的印象不好

为什么使用 rtt 调试而不用串口调试

1、因为 PY32F002B 没有内置 BootLoader,所以不能直接使用串口下载,需要引出 SWD 接口下载,那么再额外引出串口会比较耗费引脚资源
2、rtt 也使用 SWD 接口,其通过共享内存方式实现输入输出,只用读写内存而不需要外设收发,意味着它的速度会非常快
3、rtt 因为是缓存在内存中的,所以即使断开连接一小会儿也能保存未发送的数据,并在连接后一并发过去

没有 DAP-Link,只有 J-Link 可以吗

更可以了,直接使用 Segger 提供的 RTT Viewer 就能调试了,不用弯弯绕绕,但是数据可视化方面可能比不过 Vofa+

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
暂无数据
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航