当前位置: 首页 > news >正文

树莓派使用 ENC28J60

前言

一些老的、Mini 的 ARM 开发板上没有预留网口,这样在调试升级内核或应用程序时很不方便。纵使有串口下载工具,但其速度也是慢地捉急。这种情况下,使用其它接口来扩展出一个网口无疑是一个比较好的方法。
ENC28J60 就是一个使用 SPI 接口来扩展网口的模块,今天我们就来演示下在树莓派上如何使用 ENC28J60。

环境

硬件:树莓派3b+、ENC28J60
软件:buildroot、kernel-5.10.92

摸索

驱动

既然想要使用 ENC28J60,那么肯定得有一份它的驱动程序。
作为一款广泛使用的模块,内核理应有它的驱动程序,搜一下
在这里插入图片描述
果然,内核有它的驱动程序,且其已经被编译成了内核模块:

liyongjun@Box:~/project/board/buildroot$ find RPi3/build/linux-custom/drivers/ -name "enc28j60.ko"
RPi3/build/linux-custom/drivers/net/ethernet/microchip/enc28j60.ko

硬件

有了驱动,接下来就要看硬件如何连接了。
知道是连 SPI 接口,但是 SPI 接口有 SPI0、SPI1、SPI2 等,要连哪个呢?另外还有 CS、INT 引脚要连接树莓派的哪个引脚?
那就去看设备树。
在这里插入图片描述
驱动的匹配属性为 “microchip,enc28j60”,那就在设备树中搜下该参数
在这里插入图片描述
搜到了两个设备树文件,(Device Tree Overlays 相关知识请自行搜索,或查看这篇文章)
arch/arm/boot/dts/overlays/enc28j60-overlay.dts
arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
说明 enc28j60 可以接在不同的 SPI 接口上工作,这里我们研究 enc28j60-overlay.dts,即 SPI0。
在这里插入图片描述
target = <&spi0>;:指定"插件"设备树的父节点是 spi0
所以,查看 SPI0 的引脚分配
在这里插入图片描述
在这里插入图片描述
9、10、11 分别是 MISO、MOSI、SCK
8、7 是 CS 引脚,为什么配置两个引脚作为 CS 引脚这里表示不理解,本实验中选取 8 引脚作为 CS 引脚。
而 INT 引脚是在 enc28j60-overlay.dts 中配置的,使用 25 引脚,所以最终的硬件连接为

RPi3b+            ENC28J60   
----------------------------
+3V3              VCC         
GPIO10/MOSI       SI        
GPIO9/MISO        SO       
GPIO11/SCLK       SCK     
GND               GND      GPIO25            INT       
GPIO8/CE0#        CS 

实物连接
在这里插入图片描述

配置

树莓派硬件比较特殊,开启 SPI 需要修改板子中的配置文件,如下

# mount /dev/mmcblk0p1 /boot
# cat /boot/config.txt 
# Please note that this is only a sample, we recommend you to change it to fit
# your needs.
# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE.
# See http://buildroot.org/manual.html#rootfs-custom
# and http://elinux.org/RPiconfig for a description of config.txt syntaxstart_file=start.elf
fixup_file=fixup.datkernel=zImage# To use an external initramfs file
#initramfs rootfs.cpio.gz# Disable overscan assuming the display supports displaying the full resolution
# If the text shown on the screen disappears off the edge, comment this out
disable_overscan=1# How much memory in MB to assign to the GPU on Pi models having
# 256, 512 or 1024 MB total memory
gpu_mem_256=100
gpu_mem_512=100
gpu_mem_1024=100# fixes rpi (3B, 3B+, 3A+, 4B and Zero W) ttyAMA0 serial console
dtoverlay=miniuart-bt# enable autoprobing of Bluetooth driver without need of hciattach/btattach
dtoverlay=krnbt=ondtparam=spi=on
dtoverlay=enc28j60

需要手动在 config.txt 文件末尾处添加

dtparam=spi=on
dtoverlay=enc28j60

这两个参数猜测是给 start.elf 使用的,因为在其文件中搜出了相应的字符串

liyongjun@Box:~/project/board/buildroot$ strings RPi3/images/rpi-firmware/start.elf | grep "dtparam"
dtparam: %s=%s
Unknown dtparam '%s' - ignored
dtparam
dtparams
liyongjun@Box:~/project/board/buildroot$ strings RPi3/images/rpi-firmware/start.elf | grep "dtoverlay"
dtoverlay

安装驱动

# insmod /lib/modules/5.10.92-v7/kernel/drivers/spi/spi-bcm2835.ko
# insmod /lib/modules/5.10.92-v7/kernel/drivers/net/ethernet/microchip/enc28j60.ko
[ 6214.374882] enc28j60 spi0.0: Ethernet driver 1.02 loaded

查看网口

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr B8:27:EB:8A:BC:F4  UP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)eth1      Link encap:Ethernet  HWaddr 76:30:92:53:5E:E4  BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)Interrupt:200 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

多出了一个 eth1,说明 ENC28J60 已经被成功驱动起来了

使能网卡

# ifconfig eth1 up
[ 6239.461085] enc28j60 spi0.0 eth1: link down
[ 6239.469427] enc28j60 spi0.0 eth1: normal mode
[ 6239.477886] enc28j60 spi0.0 eth1: multicast mode
# [ 6240.462780] enc28j60 spi0.0 eth1: link up - Half duplex# ifconfig 
eth0      Link encap:Ethernet  HWaddr B8:27:EB:8A:BC:F4  UP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)eth1      Link encap:Ethernet  HWaddr 76:30:92:53:5E:E4  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:769 (769.0 B)  TX bytes:0 (0.0 B)Interrupt:200 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

使能网卡后,并且插上网线,看到 eth1 已经处于 RUNNING 状态,但是还没有 IP,那就手动触发下 dhcpc

# udhcpc -i eth1
udhcpc: started, v1.36.0
[ 6256.013810] enc28j60 spi0.0 eth1: multicast mode
[ 6256.027504] enc28j60 spi0.0 eth1: multicast mode
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.31.239, server 192.168.31.1
udhcpc: lease of 192.168.31.239 obtained from 192.168.31.1, lease time 43200
[ 6256.824266] enc28j60 spi0.0 eth1: multicast mode
[ 6256.832197] enc28j60 spi0.0 eth1: multicast mode
deleting routers
adding dns 192.168.31.1# ifconfig 
eth0      Link encap:Ethernet  HWaddr B8:27:EB:8A:BC:F4  UP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)eth1      Link encap:Ethernet  HWaddr 76:30:92:53:5E:E4  inet addr:192.168.31.239  Bcast:192.168.31.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:27 errors:0 dropped:1 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:4775 (4.6 KiB)  TX bytes:684 (684.0 B)Interrupt:200 lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

这样,eth1 获得了 IP 地址 192.168.31.239
ping 下外网试试

# ping www.baidu.com
PING www.baidu.com (180.101.50.242): 56 data bytes
64 bytes from 180.101.50.242: seq=0 ttl=53 time=9.520 ms
64 bytes from 180.101.50.242: seq=1 ttl=53 time=10.309 ms
64 bytes from 180.101.50.242: seq=2 ttl=53 time=9.635 ms

可以 ping 通,同时,插拔网线也有相应的 up/down 事件。

# [  106.197318] enc28j60 spi0.0 eth1: link up - Half duplex
# 
# [  113.533593] enc28j60 spi0.0 eth1: link down

附录

# ethtool eth1
Settings for eth1:Supported ports: [ TP ]Supported link modes:   10baseT/Half 10baseT/Full Supported pause frame use: NoSupports auto-negotiation: NoSupported FEC modes: Not reportedAdvertised link modes:  Not reportedAdvertised pause frame use: NoAdvertised auto-negotiation: NoAdvertised FEC modes: Not reportedSpeed: 10Mb/sDuplex: HalfPort: Twisted PairPHYAD: 0Transceiver: internalAuto-negotiation: offMDI-X: UnknownCurrent message level: 0x00000036 (54)probe link ifdown ifup

ENC28J60 是一款 10Mbps 速率的以太网 MAC+PHY 芯片,和单片机的通信接口为 SPI,SPI 最高时钟频率为 20MHz。
ENC28J60 支持半双工和全双工模式,但是不支持自动协商。在支持自动协商的网络环境中,ENC28J60 默认的工作模式是半双工模式。
黄色灯表示 Activity,即闪烁一次,代表有数据传输一次;绿色灯表示 Link up,即绿色灯常亮,代表网口正常工作。

性能测试(phy rate:10Mbps 半双工)

TCP

PS D:\Tools\iperf-3.0.11-win64> .\iperf3.exe -c 192.168.31.239
Connecting to host 192.168.31.239, port 5201
[  4] local 192.168.31.211 port 1648 connected to 192.168.31.239 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   896 KBytes  7.34 Mbits/sec
[  4]   1.00-2.00   sec   640 KBytes  5.24 Mbits/sec
[  4]   2.00-3.00   sec   768 KBytes  6.29 Mbits/sec
[  4]   3.00-4.00   sec   768 KBytes  6.29 Mbits/sec
[  4]   4.00-5.00   sec   768 KBytes  6.29 Mbits/sec
[  4]   5.00-6.00   sec   768 KBytes  6.29 Mbits/sec
[  4]   6.00-7.00   sec   640 KBytes  5.24 Mbits/sec
[  4]   7.00-8.00   sec   768 KBytes  6.29 Mbits/sec
[  4]   8.00-9.00   sec   768 KBytes  6.30 Mbits/sec
[  4]   9.00-10.00  sec   768 KBytes  6.29 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-10.00  sec  7.38 MBytes  6.19 Mbits/sec                  sender
[  4]   0.00-10.00  sec  7.19 MBytes  6.03 Mbits/sec                  receiveriperf Done.

UDP

PS D:\Tools\iperf-3.0.11-win64> .\iperf3.exe -c 192.168.31.239 -b10M -u
Connecting to host 192.168.31.239, port 5201
[  4] local 192.168.31.211 port 63892 connected to 192.168.31.239 port 5201
[ ID] Interval           Transfer     Bandwidth       Total Datagrams
[  4]   0.00-1.00   sec  1.08 MBytes  9.03 Mbits/sec  138
[  4]   1.00-2.00   sec  1.20 MBytes  10.0 Mbits/sec  153
[  4]   2.00-3.00   sec  1.19 MBytes  9.95 Mbits/sec  152
[  4]   3.00-4.00   sec  1.20 MBytes  10.0 Mbits/sec  153
[  4]   4.00-5.00   sec  1.24 MBytes  10.4 Mbits/sec  159
[  4]   5.00-6.01   sec  1.15 MBytes  9.62 Mbits/sec  147
[  4]   6.01-7.01   sec  1.14 MBytes  9.57 Mbits/sec  146
[  4]   7.01-8.01   sec  1.15 MBytes  9.62 Mbits/sec  147
[  4]   8.01-9.00   sec  1.13 MBytes  9.57 Mbits/sec  145
[  4]   9.00-10.00  sec  1.14 MBytes  9.56 Mbits/sec  146
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-10.00  sec  11.6 MBytes  9.74 Mbits/sec  0.548 ms  0/3 (0%)
[  4] Sent 3 datagramsiperf Done.

驱动信息

# ethtool -i eth1
driver: enc28j60
version: 1.02
firmware-version: 
expansion-rom-version: 
bus-info: spi0.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

相关文章:

树莓派使用 ENC28J60

前言 一些老的、Mini 的 ARM 开发板上没有预留网口&#xff0c;这样在调试升级内核或应用程序时很不方便。纵使有串口下载工具&#xff0c;但其速度也是慢地捉急。这种情况下&#xff0c;使用其它接口来扩展出一个网口无疑是一个比较好的方法。 ENC28J60 就是一个使用 SPI 接口…...

跟我学C++中级篇——模板友元的应用

一、友元 友元在以前分析过&#xff0c;而且一般编程是不推荐使用友元的&#xff0c;原因是友元破坏了类的封装性。但凡事总有例外&#xff0c;在某些情况下&#xff0c;用友元还是比较方便的&#xff0c;那么该用还得用&#xff0c;不能因噎废食。普通的友元&#xff0c;各种…...

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database&#xff1a;存放和管理各种数据的仓库&#xff0c;操作的对象主要是【数据data】&#xff0c;科学的组织和存储数据&#xff0c;高效的获取和处理数据SQL&#xff1a;结构化查询语言&#xff0c;专为**关系型数据库而建立的操作语言&…...

FreeRTOS(二值信号量)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、信号量的概念 1、信号量的基本概念 2、信号量的分类 二、二值信号量的定义与应用 1、二值信号量的定义 2、二值信号量的应用 三、二值信号量的运作机制 1、FreeRTOS任务间二值…...

leetcode面试题:动物收容所(考查对队列的理解和运用)

题目&#xff1a; 有家动物收容所只收容狗与猫&#xff0c;且严格遵守“先进先出”的原则。在收养该收容所的动物时&#xff0c;收养人只能收养所有动物中“最老”&#xff08;由其进入收容所的时间长短而定&#xff09;的动物&#xff0c;或者可以挑选猫或狗&#xff08;同时…...

【Linux命令行与Shell脚本编程】第十八章 文本处理与编辑器基础

Linux命令行与Shell脚本编程 第十八章 文本处理与编辑器基础 文章目录 Linux命令行与Shell脚本编程第十八章 文本处理与编辑器基础 文本处理与编辑器基础8.1.文本处理8.1.1.sed编辑器8.1.1.1.在命令行中定义编辑器命令8.1.1.2.在命令行中使用多个编辑器命令8.1.1.3.从文件中读…...

2023牛客暑期多校训练营7

Beautiful Sequence 贪心&#xff0c;二进制&#xff0c;构造 Cyperation 模拟 &#xff0c;数学 We Love Strings 分块&#xff0c;二进制枚举&#xff0c;二进制容斥dp Writing Books 签到 根据相邻两个异或值B&#xff0c;因为前小于等于后&#xff0c;故从高到低遍历B的每一…...

centos7升级glibc2.28

1 概述 centos7自带的glibc对于某些软件是太旧的&#xff0c;决定将glibc升级至2.28。 2 安装过程 2.1 下载glibc源码 mkdir -p /opt/third-party && cd /opt/third-party wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz tar -xf glibc-2.28.tar.gz cd glibc…...

腾讯云香港服务器租用_2核2G20M_2核4G30M

腾讯云香港服务器租用费用表&#xff0c;目前中国香港地域轻量应用服务器可选配置2核2G20M、2核2G30M、2核4G30M&#xff0c;操作系统可选Windows和Linux&#xff0c;不只是香港云服务器&#xff0c;新加坡、硅谷、法兰克福和东京服务器均有活动&#xff0c;腾讯云服务器网分享…...

十三、ESP32PS2摇杆(ADC)

1. 运行效果 在上下左右操作PS2摇杆的时候,会检测到数据 2. 滑动电阻...

网络安全的相关知识点

网络安全威胁类型&#xff1a; 1.窃听&#xff1a;广播式网络系统。 2.假冒 3.重放&#xff1a;重复一份报文或者报文的一部分&#xff0c;以便产生一个被授权的效果。 4.流量分析 5.数据完整性破坏 6.拒绝服务 7.资源的非授权使用 8.陷门和特洛伊木马&#xff1a;木马病毒有客…...

算法练习(6):牛客在线编程06 递归/回溯

package jz.bm;import java.io.PushbackInputStream; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays;public class bm6 {/*** BM55 没有重复项数字的全排列*/ArrayList<ArrayList<Integer>> res new ArrayList<>()…...

C#使用OpenCv(OpenCVSharp)图像局部二值化处理实例

本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行局部二值化处理。 目录 图像二值化原理 局部二值化 自适应阈值 实例 效果...

MySQL多表关联查询

目录 1. inner join&#xff1a; 2. left join&#xff1a; 3. right join&#xff1a; 4.自连接 5.交叉连接&#xff1a; 6、联合查询 7、子查询 1. inner join&#xff1a; 代表选择的是两个表的交差部分。 内连接就是表间的主键与外键相连&#xff0c;只取得键值一致…...

flutter开发实战-CustomClipper裁剪长图帧动画效果

flutter开发实战-CustomClipper裁剪长图帧动画效果 在开发过程中&#xff0c;经常遇到帧动画的每一帧图显示在超长图上&#xff0c;需要处理这种帧动画效果。我这里使用的是CustomClipper 一、CustomClipper CustomClipper继承于Listenable abstract class CustomClipper e…...

CSS 中的优先级规则是怎样的?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐内联样式&#xff08;Inline Styles&#xff09;⭐ID 选择器&#xff08;ID Selectors&#xff09;⭐类选择器、属性选择器和伪类选择器&#xff08;Class, Attribute, and Pseudo-class Selectors&#xff09;⭐元素选择器和伪元素选择器…...

概率图模型(Probabilistic Graphical Model,PGM)

概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;&#xff0c;是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布&#xff0c;进行有效的推理和学习&#xff0c;以及解决各种实际问题&#xff0c;如图…...

Oracle 知识篇+会话级全局临时表在不同连接模式中的表现

标签&#xff1a;会话级临时表、全局临时表、幻读释义&#xff1a;Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 共享服务器模式&#xff1a;不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式&#xff1a;不同应…...

MySQL 数据库文件的导入导出

目录 数据库的导出 导出整个数据库 导出数据库中的数据表 导出数据库结构 导出数据库中表的表结构 导出多个数据库 导出所有数据库 数据库的导入 数据库的导出 mysqldump -h IP地址 -P 端口 -u 用户名 -p 数据库名 > 导出的文件名 用管理员权限打开cmd进入MySQL的bi…...

找不到资产文件project.assets.json

NuGet 在“obj”文件夹中写入名为 project.assets.json 的文件&#xff0c;.NET SDK 使用该文件来获取有关要传递到编译器的包的信息 。 如果在生成过程中找不到资产文件 project.assets.json&#xff0c;则会发生此错误。 1.执行命令的方式解决 点击工具&#xff0c;分别展开命…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...