1. 为什么要在 W5500-EVB-Pico 上折腾 FUZIX 的 Telnet
W5500-EVB-Pico 这块板子有意思的地方在于,它把 RP2040 双核 MCU 和 W5500 硬件 TCP/IP 协议栈芯片塞进了树莓派 Pico 的经典外形里。RP2040 负责跑逻辑,W5500 通过 SPI 接管以太网链路层和网络层,主控不用再软实现一遍 TCP 状态机。FUZIX 是一个面向 8 位和 16 位小机器的类 Unix 系统,资源占用低,进程模型和文件系统都保留了 Unix 的味道。把这两者凑在一起,你得到的就是一台能跑多任务、带 shell、能联网的复古小终端。
Telnet 客户端是验证这套组合是否真正可用的关键一步。串口能通只说明内核启动没问题,网络能 ping 通只说明 W5500 驱动挂上了,但 Telnet 会话要求从 socket 建立、TCP 三次握手、字符流收发到终端回显整条链路都稳定。一旦 Telnet 能连上远端服务器并正常交互,说明 FUZIX 的网络栈、W5500 驱动、SPI 时序和中断处理都达到了可用状态。
这篇文章面向已经能把 FUZIX 在 W5500-EVB-Pico 上跑起来、但还没打通网络会话的开发者。我会给出可复制的网络配置片段、W5500 驱动适配要点、TaoToken 统一 Key/API 通道的 config.toml 骨架,以及完整的连通性验证动作。目标很明确:让 Telnet 会话在这块硬件上稳定跑起来。
2. TaoToken 前置准备:统一 Key 与 API 通道
在开始改 FUZIX 网络配置之前,先把 TaoToken 的接入信息准备好。TaoToken 在这里的角色是统一管理你的 API Key 和模型通道,后续如果你想让 FUZIX 终端里的脚本调用模型对话或编码能力,可以直接复用同一套 Key,不用在每台设备上重复配置。
你需要先拿到一个可用的 API Key。打开 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 创建或复制你的 Key。这个 Key 后面会写进 config.toml 骨架里,作为统一凭证。
如果你只是想先验证模型通道是否通,可以打开模型对话页面 https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 发一条测试消息,确认 Key 有效、通道正常。这一步不依赖 W5500-EVB-Pico,在 PC 浏览器里完成即可。
对于长期在 FUZIX 上做编码或跑 Agent 的场景,建议看一下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,它适合需要持续调用、按周期计费的用法。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有完整的 API 路径和参数说明,后面写 config.toml 时会对照它。
注意:TaoToken 的 API 基地址是 https://taotoken.net/api ,不要加 UTM 参数,直接用于程序请求。
3. FUZIX 网络配置与 W5500 驱动适配
3.1 W5500 驱动适配要点
W5500 通过 SPI 与 RP2040 通信,FUZIX 侧需要正确配置 SPI 引脚、时钟极性和片选信号。W5500-EVB-Pico 的默认接线是 SPI0:GP16 为 MISO,GP17 为 CSn,GP18 为 SCK,GP19 为 MOSI,另外还有 INT 和 RST 引脚。你需要在 FUZIX 的板级配置里确认这些引脚定义与硬件一致。
驱动适配的核心是三个部分:SPI 读写函数、W5500 寄存器访问、socket 缓冲区管理。W5500 的寄存器分通用寄存器和 socket 寄存器,通用寄存器管 IP、子网掩码、网关、物理地址,socket 寄存器管每个 socket 的模式、端口、状态。FUZIX 的网络层通过驱动暴露的接口收发帧,驱动内部把帧写进 W5500 的 TX 缓冲区,再从 RX 缓冲区读出来。
一个容易踩的坑是 SPI 时钟频率。W5500 支持的最高 SPI 时钟是 80MHz,但 RP2040 在 FUZIX 下的 SPI 分频如果设得太高,长线缆或劣质杜邦线会导致数据错位。实测下来,先降到 1MHz 到 4MHz 之间调通,再逐步往上提,比较稳妥。
3.2 可复制的网络配置片段
下面这段是 FUZIX 启动后设置网络接口的配置片段。假设你的 Telnet 服务器在 192.168.2.133,端口 23,W5500-EVB-Pico 分配 192.168.2.150。
# 设置 W5500 网络接口参数 ifconfig eth0 192.168.2.150 netmask 255.255.255.0 up route add default gw 192.168.2.1 # 确认接口状态 ifconfig eth0执行后你应该看到 eth0 的 IP、掩码、MTU 和 flags 信息。如果 ifconfig 报错说接口不存在,说明 W5500 驱动没有在启动时注册网络设备,需要回到内核配置检查驱动是否编译进去。
接下来验证链路层是否通:
# 查看 ARP 表,确认网关可达 arp -a # ping 网关 ping -c 3 192.168.2.1ping 通网关说明 W5500 的物理链路、SPI 通信和基本收发都正常。如果 ping 不通,先检查网线、交换机端口和 IP 网段是否一致。
3.3 TaoToken config.toml 骨架
FUZIX 本身不直接读 TOML,但你可以把这份骨架放在宿主机的共享目录或通过串口传进去,供终端里的脚本解析。骨架如下:
# TaoToken 统一接入配置骨架 # 官网: https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite [api] base_url = "https://taotoken.net/api" api_key = "你的_API_Key" timeout_seconds = 30 [model] default = "claude" fallback = "gpt" [network] # FUZIX 侧网络参数,与 ifconfig 保持一致 interface = "eth0" ip = "192.168.2.150" netmask = "255.255.255.0" gateway = "192.168.2.1" [telnet] server = "192.168.2.133" port = 23 term = "vt100"这份骨架把 API 通道、模型选择、网络参数和 Telnet 目标分开管理。你在 FUZIX 终端里写 shell 脚本时,可以用 grep 或 sed 从这份文件里提取需要的字段,避免把 Key 硬编码在多个脚本里。
4. 验证请求与 Telnet 会话成功结果
4.1 先验证 TaoToken API 通道
在 PC 上先用 curl 验证 Key 和通道是否正常,这一步不依赖 W5500-EVB-Pico:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的_API_Key" \ -H "Content-Type: application/json" \ -d '{ "model": "claude", "messages": [{"role": "user", "content": "ping"}] }'如果返回 JSON 里带有模型回复内容,说明 Key 有效、通道正常。如果返回 401,检查 Key 是否复制完整;如果返回 404,检查 base_url 是否写成了带路径的形式。
4.2 在 FUZIX 上发起 Telnet 会话
回到 W5500-EVB-Pico 的 FUZIX 终端,确认网络配置已生效后,执行:
telnet 192.168.2.133 23如果连接成功,你会看到远端 Telnet 服务器的登录提示或 banner。此时输入字符,远端应该能正常回显。按 Ctrl+] 再输入 quit 可以退出 Telnet 会话。
一个完整的成功结果应该包含:TCP 连接建立、远端 banner 显示、字符双向收发正常、退出后本地终端恢复正常。如果卡在 "Trying 192.168.2.133..." 不动,说明 TCP 握手没有完成,需要回到网络层排查。
4.3 用脚本自动验证连通性
你可以在 FUZIX 上写一个简单的 shell 脚本,把网络检查和 Telnet 测试串起来:
#!/bin/sh # netcheck.sh - FUZIX 网络连通性检查 echo "检查 eth0 状态..." ifconfig eth0 | grep "UP" echo "ping 网关..." ping -c 2 192.168.2.1 echo "测试 Telnet 端口..." telnet 192.168.2.133 23 & TELNET_PID=$! sleep 3 kill $TELNET_PID 2>/dev/null echo "检查完成"这个脚本能快速判断问题出在网络层还是应用层。如果 ping 通但 Telnet 连不上,问题在远端服务或端口;如果 ping 不通,问题在本地网络配置或 W5500 驱动。
5. 本篇常见错排查
5.1 ifconfig 报错 "eth0: No such device"
这是最常见的问题,说明 W5500 驱动没有注册网络设备。排查顺序:先确认内核配置里 W5500 驱动已编译,再确认 SPI 引脚定义与硬件一致,最后检查 SPI 初始化是否成功。如果驱动注册了但设备名不是 eth0,用 ifconfig -a 看实际名称。
5.2 ping 网关不通但 ifconfig 正常
ifconfig 正常只说明软件层配置写进去了,不代表硬件链路通。检查网线是否插在 W5500-EVB-Pico 的 RJ45 口、交换机端口是否亮灯、IP 网段是否与网关一致。如果都正常,把 SPI 时钟降到 1MHz 再试,排除时序问题。
5.3 Telnet 卡在 "Trying..." 不动
TCP 握手没完成。先确认远端 Telnet 服务器已启动且监听 23 端口,再用 ping 确认远端 IP 可达。如果远端可达但端口连不上,检查防火墙或 Telnet 服务配置。FUZIX 侧的 socket 缓冲区如果太小,也可能导致握手包丢失,适当增大驱动里的 RX/TX 缓冲区。
5.4 Telnet 连上后字符乱码或回显异常
通常是终端类型不匹配。在 Telnet 命令里指定 vt100,或在远端服务器上设置 TERM=vt100。如果乱码依旧,检查 FUZIX 的串口波特率是否与你的终端软件一致,常见值是 115200。
5.5 TaoToken API 返回 401 或 403
Key 无效或权限不足。回到 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 重新复制 Key,确认没有多余空格或换行。如果 Key 正确但仍 403,检查该 Key 是否绑定了正确的模型通道。
6. 接入文档与后续调试入口
Telnet 会话跑通之后,下一步通常是把 FUZIX 终端里的脚本接到 TaoToken 的 API 通道上,让这台小机器能调用模型能力。接入细节和参数说明在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有完整的请求格式和错误码解释。
如果你在排障过程中需要反复验证 Key 和通道,直接用模型对话页面最快:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。长期在 FUZIX 上跑编码任务或 Agent 的话,Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,按周期计费比单次调用更适合持续用法。
控制台里可以查看 Key 的使用情况和通道状态:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。如果你用的是 Claude Code 或 Anthropic 风格的接口,参考 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_anthropic&utm_campaign=rewrite 里的配置方式,把 base_url 指向 https://taotoken.net/api 即可。
最后提醒一句:W5500-EVB-Pico 上的 FUZIX 网络调试,最耗时间的往往不是代码,而是 SPI 时序和网线接触。先把 SPI 时钟降下来、用短网线直连交换机,把 Telnet 跑通,再逐步优化性能和稳定性。