本文主要记录如何在 LuckFox Pico Max RV1106 开发板上驱动 Wiznet-W5500 SPI以太网模块。
前文 给开发板适配 Alpine Linux 介绍了一个 RV1106 的开发板,尺寸小巧,功能十足,只有一个 100M 以太网口对于有些应用不大够用,USB 也是跟 Type-C 共享不容易引出扩展,GPIO 针脚上引出有 SPI 总线,可以利用 Wiznet-W5500 模组扩展一个低速网口使用。
板载 GPIO 扩展引脚如下图所示:
W5500 模块除了连接 SOC SPI 总线外,还需要额外两个 GPIO 引脚用于连接 INT
(中断处理) 和 RST
(重置),如上图所示,SPI 片选使用 RV1106 的 CS0
,中断(INT
)使用 GPIO2_A6
(29 引脚),重置(RST
) 使用 GPIO2_A0
(24 引脚),需要注意硬件上电平转换。
硬件连接完成后,还需要配置 RV1106 BSP 以驱动该模块。Wiznet-W5500 在内核中使用 wiznet/w5100-spi
驱动模块,我们只需要配置内核 CONFIG
以及 DTS
即可。
Kernel Config 修改如下,激活 Wiznet/w5100-spi:
1
2
3
4
5
6
|
#FILE: source/kernel/arch/arm/configs/luckfox_rv1106_linux_defconfig
-# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_NET_VENDOR_WIZNET=y
+CONFIG_WIZNET_W5100=m
+CONFIG_WIZNET_W5100_SPI=m
|
DTS 修改如下,配置 SPI,以及 w5500 INT
和 RST
引脚:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#FILE: source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-pro-max.dts
// /**********SPI**********/
&spi0 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi0m0_pins>;
- cs-gpios = <&gpio1 RK_PC0 1>;
- // cs-gpios = <&gpio1 26 1>;
+ //cs-gpios = <&gpio1 RK_PC0 1>;
+ cs-gpios = <&gpio1 16 1>;
#address-cells = <1>;
#size-cells = <0>;
spidev@0 {
+ status = "disabled";
compatible = "rockchip,spidev";
spi-max-frequency = <50000000>;
reg = <0>;
};
+ w5500@0 {
+ status = "okay";
+ compatible = "wiznet,w5500";
+ spi-max-frequency = <50000000>;
+ reg = <0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart1m1_ctsn>;
+ interrupt-parent = <&gpio2>;
+ interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
+ };
};
|
以上修改完成后,编译 BSP 生成镜像刷机即可,启动后会额外生成 eth1
设备,可以安装 iperf3
工具用来测试网口性能:
基本可以达到 W5500 的 15 Mbps 的速率上限,此时 CPU 占用约在 50% 左右(多数在内核 sys 数据处理上,si 并不高),主要原因还是 rv1106 只有单核,性能有限。
这样扩展的网口,速率只有 10 Mbps 水平,对于一些收发数据率不高的应用场景,也足够了。