导读
用完的一次性电子烟,还能拿来架网站。开发者 Bogdan Ionescu 在开源项目 semihost-ip 中,把拆出的普冉微控制器变成了一台微型网页服务器:只有3KB内存,靠调试接口与电脑交换网络数据。代码和搭建方法都已公开,硬件爱好者可以查看完整实现。
3KB内存里,塞进一个网站
作者拆机时发现,电路板上藏着一颗标有“PUYA”的芯片。它拥有24MHz的 Arm Cortex-M0+ 内核、24KB闪存和3KB内存。作者最初按 PY32F002B 识别,后来在博客脚注补充:实际型号是与之基本相同的 PY32C642。
作者展示的拆机实物,电路板上可见PUYA芯片及USB-C接口。图源:Bogdan Ionescu 项目博客。
这点资源能做什么?项目用轻量级 uIP 协议栈处理 TCP/IP,再运行一个小型 HTTP 服务。网页文件随固件写进闪存,浏览器请求到来时,由芯片返回内容。
代码还提供了一个 JSON 状态接口,能返回首页访问次数、芯片标识和运行时间。
没有网卡,就借调试接口传数据
关键是把联网的“路”接出来。
作者选择 SWD 调试接口,通过 semihosting 机制,让芯片借助调试器读写电脑端的数据。电脑上的 pyOCD 负责转发,socat 把通道变成虚拟串口,再由 SLIP 把串行数据接入IP网络。
可以把它理解为:电脑搭桥,芯片接单、处理并返回网页。运行时需要连接调试器和电脑。
从20多秒,优化到零点几秒
最初,打开简单网页要20多秒。问题在于逐字节读写,每传一个字节都要付出调试通信的开销。作者加入接收缓冲,并把发送改成批量处理。
仓库 README 给出的默认配置数据是:网页加载约400毫秒,使用1496字节RAM和8632字节闪存;增加缓冲、占用更多内存后,简单网页可缩短到约150毫秒。
想看它如何实现,仓库里的 main.c、SLIP实现和 Makefile,分别给出了芯片端处理、数据打包和电脑端桥接的完整路径。
参考资料
https://github.com/BogdanTheGeek/semihost-ip
https://bogdanthegeek.github.io/blog/projects/vapeserver/
https://github.com/BogdanTheGeek/semihost-ip/blob/main/src/main.c
https://github.com/BogdanTheGeek/semihost-ip/blob/main/Makefile