转发: Rust-based TCP socket communication in W5500-EVB-Pico (with embassy)
项目介绍
我发现了一个名为 embassy 的基于 Rust 的框架,由于该框架提供了 W5500-EVB-Pico 库和示例,所以我决定对其进行测试。
去年六月,我介绍了embassy-net-w5500项目。
当我搜索关键字时,出现了大使馆的网站。 因此,您无需搜索 embassy,而是可以通过搜索 embassy rust 立即找到该页面。
一个名为 embassy-rs 的组织已在 Github 上成立,并且正在积极进行更新。 embassy-rs
本文使用W5500-EVB-Pico配置环境并运行TCP套接字通信示例。
我尝试在WSL2环境中使用它,但由于USB端口问题而在VM环境中完成。
有一种方法可以在 WSL 中启用 USB 端口,但我不想碰它,所以我使用了我配置的 VM。
VirtualBox(免费)或 VMware(付费)程序允许您将连接到主机 Windows 的硬件设备拉入虚拟机。
使用 lsusb 命令检查时,W5500-EVB-Pico 被识别如下。
作为参考,将 picoprobe.uf2 安装到 Pico 板后,识别的名称略有变化,如下所示。
参考官方指导文档,我如下连接板子。
如果未安装 Toolchain,请先安装该软件包。
$ sudo apt update
$ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
克隆 picoprobe 存储库并构建它。
以下命令参考自Raspberry Pi Pico官方指导文档。
cd ~/pico
git clone https://github.com/raspberrypi/picoprobe.git
cd picoprobe
mkdir build
cd build
cmake ..
make -j4
Cargo 是 Rust 的官方包管理器,充当 Rust 项目的构建系统和包管理器。
它似乎被认为包含与 Python 的 pip 相同的角色。
官方指南很好地解释了开发环境配置和测试方法。
环境设置是根据指南进行的。
curl https://sh.rustup.rs -sSf | sh
First Steps with Cargo
安装Cargo后,进行简单的操作测试。
使馆的官网也起到了指导作用,所以我们就按照要求进行了操作。
: Getting started :: Embassy Docs
这是您需要的:
rustup.rs - The Rust toolchain installer
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install -y libusb-1.0-0-dev libudev-dev
cargo install probe-rs-cli
source "$HOME/.cargo/env"
现在,让我们下载 embassy 源代码并运行示例。
git clone https://github.com/embassy-rs/embassy
cd embassy
cd examples/rp
cargo run --release --bin blinky
# This takes a few minutes
这里存在Cargo无法识别探针板的问题。
这个问题不容易解决,所以我查了很多资料,似乎有不少人遇到和我类似的问题,但我找不到明确的解决方案。
因此,Github Issues 和博客文章非常有帮助。
博文引用了中间的内容。
打开两个终端并运行:
Terminal 1
$ cd ~/pico/openocd
$ src/openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -s tcl -c "adapter speed 5000"
Terminal 2
$ cd ~/pico/rp2040-project-template
$ gdb-multiarch -q -ex "target extended-remote :3333" target/thumbv6m-none-eabi/debug/rp2040-project-template
您可以在 gdb 中使用以下命令加载并运行它。
(gdb)
load
continue
至此,我们已经验证了板卡连接的运行情况。
回到大使馆,以同样的方式运行示例。
我们从基本的例子开始,眨眼的例子。
cd ~/pico/cargo/embassy/examples/rp
cargo run --release --bin blinky
有用! :)
使用W5500-EVB-Pico以太网功能的TCP服务器和客户端示例已被执行和测试。
首先进行了TCP服务器应用测试。
我在应用程序代码中修改并引用了以下内容。
$ vi src/bin/ethernet_w5500_tcp_server.rs
let mac_addr = [0x00, 0x08, 0xdc, 0x01, 0x02, 0x03];
$ **cargo run --release --bin ethernet_w5500_tcp_server**
我检查了板所连接的路由器上的 MAC 地址和分配的 IP 地址,如下所示。 (192.168.50.100, 00-08-dc-01-02-03)
默认情况下,它运行在环回模式下。
以下是TCP客户端应用程序。
修改代码后执行如下。
host_addr 我将该值设置为我的环境的主机 PC IP 地址值。
$ vi src/bin/ethernet_w5500_tcp_client.rs
let **host_addr** = embassy_net::Ipv4Address::from_str("192.168.50.81").unwrap();
$ cargo run --release --bin ethernet_w5500_tcp_client
它的实现是为了让客户端立即执行并定期发送 hello world 消息。
到这里,第二次运行就停止了,看来板子已经断开了。
此时请使用reset重新识别单板。
最后是多socket操作测试。
$ cargo run --release --bin ethernet_w5500_multisocket
⚠️cmsis-dap 无法识别问题的日志
测试过程中,出现OpenOCD突然无法识别USB的情况。 此时如果使用lsusb命令查看,设备被识别。
如果 openocd 无法工作,即使使用 lsusb 检查时识别为相同,请在重置板后,在 VirtualBox 中再次将 USB 连接到虚拟机。
复位应在调试板连接到 USB 电源的一侧完成。 按 RUN 按钮可将其重置。
也许因为使用VirtualBox所以有不稳定的部分,但是如果以后有机会在真实的Linux环境下测试的话,我会尝试一下。
到目前为止,我已经基于Rust环境测试了与W5500-EVB-Pico板的TCP套接字通信,并且运行良好。
既然已经测试了基本操作,我想继续进行通过附加函数来连接某些东西的测试。
W5500-EVB-Pico 示例
https://github.com/embassy-rs/embassy-net-w5500/tree/main/examples