3个版本 (有破坏性)
0.4.0 | 2024年7月5日 |
---|---|
0.3.0 | 2023年7月3日 |
0.1.0 | 2021年1月18日 |
#451 in 嵌入式开发
每月25次下载
用于 booster
63KB
599 行
ENC424J600 驱动程序
一般说明
ENC424J600以太网控制器模块支持以下接口之一进行操作:串行外设接口(SPI)或并行从端口(PSP)。此Rust库支持所有与Rust embedded-hal
crate兼容的嵌入式系统使用SPI。
在ENC424J600上,INTn/SPISEL引脚与一个中断功能(INTn)和一个接口选择功能(SPISEL)复用。在上电期间,为了选择SPI作为接口,INTn/SPISEL需要将逻辑高电平保持1-10微秒,由ENC424J600外部驱动。在ENC424J600初始化后,同一个引脚可以由ENC424J600驱动,用来指示中断发生(逻辑低电平)或空闲(逻辑高电平)。因此,在微控制器一侧,应该根据设计选择引脚的驱动模式:如果启用中断,则应将其设置为三态,否则设置为推挽。
为了帮助用户,我们提供了一个nix-shell
环境和一系列Shell脚本,用于执行某些任务,例如创建用于调试STM32微控制器的tmux
会话,以及编译和运行基于STM32的示例。
STM32F407示例说明
目前,提供的示例适用于使用Rust stm32f4xx-hal
crate的STM32F4xx微控制器。这些示例假设SPI1端口连接到以太网模块,且GPIO PA1引脚连接到其SPISEL引脚。由于不涉及中断,GPIO PA1被配置为推挽输出,以仅初始化控制器。程序输出通过ITM激励端口0记录。
示例
无限ping - tx_stm32f407
此程序演示了STM32F407板上的以太网TX功能。一旦加载和初始化,每100毫秒发送(广播)一个特定的ping包。此类包具有以下属性
- 目标MAC地址:ff-ff-ff-ff-ff-ff
- 源MAC地址:08-60-6e-44-42-95
- 目标IP地址:192.168.1.231
- 源IP地址:192.168.1.100
- 帧长度(字节):64
如何操作
-
将STM32F407设备连接到计算机。无需更改任何代码,您可以使用STLink V2调试器。
-
创建一个用于调试的
tmux
会话$ nix-shell [nix-shell]$ run-tmux-env
-
当
tmux
会话准备就绪时,在右上角面板中编译并运行示例程序[nix-shell]$ tx_stm32f407
-
观察左面板的输出。如果您想手动调试,运行
run-help
以查看所有可用命令的列表。
预期输出
(注意:MAC地址仅作为示例。)
Eth TX Pinging on STM32-F407 via NIC100/ENC424J600
Ethernet initialised.
MAC Address = 04-91-62-3e-fc-1e
Promiscuous Mode ON
Sending packet (len=64): dest=ff-ff-ff-ff-ff-ff src=08-60-6e-44-42-95 data=08060001 08000604 ...
Packet sent
Sending packet (len=64): dest=ff-ff-ff-ff-ff-ff src=08-60-6e-44-42-95 data=08060001 08000604 ...
Packet sent
...
TCP回显与问候 - tcp_stm32f407
此程序演示了在STM32F407板上使用smoltcp
实现TCP连接。一旦加载并初始化,将在特定的IPv4地址上打开两个TCP套接字。这些套接字是
- 回显端口 - 1234
- 该套接字接收所有传入TCP数据包的原始数据,并将其打印到输出中。
- 请注意,此套接字的超时时间为10秒。
- 问候端口 - 4321
- 该套接字在该端口上等待单个传入TCP数据包,并发送包含问候文本的TCP数据包到该端口。
- 请注意,一旦发送了问候,套接字将立即关闭。直到发起者从端口断开连接,控制器接收到的进一步数据包将被丢弃。
如何操作
-
将STM32F407设备连接到计算机。无需更改任何代码,您可以使用STLink V2调试器。
-
创建一个用于调试的
tmux
会话$ nix-shell [nix-shell]$ run-tmux-env
-
当
tmux
会话准备就绪时,在右上角面板中编译并运行示例程序。默认IP地址是192.168.1.77,您可以在源文件examples/tcp_stm32f407.rs
中编辑它。[nix-shell]$ tcp_stm32f407
-
要测试TCP端口,切换到底右面板(使用Ctrl+B,然后按箭头键)并使用NetCat(
nc
)等工具$ nc <ip> <port-number>
可以运行多个Netcat实例以同时使用所有端口。使用Ctrl+C手动断开端口(特别是对于问候端口)。
-
观察左面板的输出。如果您想手动调试,运行
run-help
以查看所有可用命令的列表。
预期输出
(注意:下面的MAC地址和时间戳仅作为示例。)
初始状态下的ITM输出
Eth TCP Server on STM32-F407 via NIC100/ENC424J600
Ethernet initialised.
Timer initialised.
MAC Address = 04-91-62-3e-fc-1e
TCP sockets will listen at 192.168.1.77/24
[0.0s] Listening to port 1234 for echoing, time-out in 10s
[0.0s] Listening to port 4321 for greeting, please connect to the port
用户连接到端口1234并使用以下命令发送两个数据包
$ nc 192.168.1.77 1234
Hello World!
Bye World!
以下内容附加到ITM输出
[12.950s] Received packet: Ok("Hello world!\n")
[19.0s] Received packet: Ok("Bye world!\n")
用户然后使用以下命令连接到端口4321,并立即在其控制台收到以下消息
$ nc 192.168.1.77 4321
Welcome to the server demo for STM32-F407!
以下内容附加到ITM输出
[24.200s] Greeting sent, socket closed
用户在10秒内没有在端口1234上发送任何更多数据包后,以下内容附加到ITM输出;同时,套接字由nc
为用户关闭
[29.0s] Listening to port 1234 for echoing, time-out in 10s
用户现在可以再次连接到端口1234。
对于端口4321,在退出nc
关闭端口之前,用户可以继续使用工具发送任何数据包。由于以太网控制器已经关闭了套接字,因此这些新数据包将被丢弃,并在ITM输出中附加以下错误消息
[35.950s] Poll error: Dropped
[36.150s] Poll error: Dropped
...
用户然后通过退出nc
断开与端口4321的连接,并以下内容附加到ITM输出
[40.200s] Listening to port 4321 for greeting, please connect to the port
用户现在可以再次连接到端口4321。
依赖项
~0.3–0.8MB
~18K SLoC