- 博客(494)
- 收藏
- 关注
原创 【ARMv7-A】——CLZ 指令
CLZ(Count Leading Zeros)是ARM指令集中的一个硬件指令,用于计算32位二进制数中从最高位开始的连续零个数。该指令在RTOS调度、资源管理等领域有重要应用,能快速定位最高优先级任务或空闲资源位。文章详细介绍了CLZ的概念、ARM指令语法,并以FreeRTOS为例展示了硬件实现和软件实现的对比。硬件实现采用内联汇编,效率远高于循环判断的软件实现。测试案例验证了不同数值的前导零计算结果,证明了CLZ指令在系统性能优化中的价值。
2025-06-12 19:37:40
166
原创 USB 网卡——RNDIS 控制消息解析
远程 NDIS 设备将通过发回 REMOTE_NDIS_KEEPALIVE_CMPLT 响应消息来响应主机发送的 REMOTE_NDIS_KEEPALIVE_MSG 消息。远程 NDIS 设备将以 REMOTE_NDIS_QUERY_CMPLT 消息响应 REMOTE_NDIS_QUERY_MSG 消息。远程 NDIS 设备将通过重置设备来响应主机发出的 REMOTE_NDIS_RESET_MSG 消息,并在 REMOTE_NDIS_RESET_CMPLT 消息中返回请求的状态。
2025-04-30 02:15:00
72
原创 USB 网卡——RNDIS 控制消息流程
在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。
2025-04-29 21:55:07
119
原创 USB 网卡——RNDIS 介绍
RNDIS 全称为:Remote Network Driver Interface Specification,即远程网络驱动接口规范Remote NDIS (RNDIS)是以太网(802.3)网络设备上的以太网(802.3)网络设备(例如 USB、1394、蓝牙和 InfiniBand)即插即用 上的总线独立类规范。远程 NDIS 通过抽象控制和数据通道在主计算机与远程 NDIS 设备之间定义与总线无关的消息协议。在总线级初始化之后,设备处于 RNDIS 未初始化状态。
2025-04-29 21:46:47
455
原创 PHY——LAN8720A 代码解析 (三)
LAN8720 的接口其实就是调用 PHY 的一系列接口来控制 LAN8720,或者获取 LAN8720 的状态。这个函数其实就是从 0 遍历 PHY 的地址,找到一个可用的 PHY 地址。函数用于初始化 PHY 接口。这个函数用于禁用 PHY 的 Power Down 模式。这个函数用于启用 PHY 的 Power Down 模式。函数用于向 PHY 写入寄存器。函数用于从 PHY 读取寄存器。函数用于反初始化 PHY 接口。函数用于注册 PHY 接口。这里 PHY 的操作是通过函数指针实现的。
2025-04-01 20:49:55
898
原创 USB——删除注册表信息
注测表中已记录这个设备的信息,但现在设备描述符又指定为了 WinUSB 设备,所以当设备再次插入的时候,不会发送 0xEE 命令,造成了枚举失败。HID 就进入 HID 目录,如果是其他设备就进入对应类的目录,删除相应的 PID/VID。此时再插入该 Device,即被当做全新设备插入,装载驱动。工具下载之后解压放在。
2025-03-31 21:38:12
349
原创 USB 虚拟串口改名——禁用 Windows 驱动签名篇
USB 虚拟串口 Windows 枚举之后使用的是默认的名称,例如USB 串行设备(COM52),如下图所示但是我们使用其他厂商的虚拟串口的时候,会显示厂商信息,例如CH340USB 转串口工具显示的就是那我们自己做的虚拟串口如何显示自定义名称呢?这里就涉及到 Windows 驱动签名,本文只讨论如何修改设备名称,至于 Windows 如何过驱动签名,不在本文讨论范围。
2025-03-31 12:47:03
265
原创 PHY——LAN8720A 寄存器读写 (二)
这里以野火电子的 F429 开发板为例,配置以太网外设这里有一点需要注意,如下图但是当 CubeMx 使能 ETH 外设的 RMII 时候,默认使用的引脚是 PB12 和 PB13这里需要手动修改这样 RMII 的引脚和以太网相关时钟就配置好了,这里我们只借助 CubeMx 配置这两个,PHY的驱动自己来实现以太网初始化代码PHY 接口实现这个文件其实主要实现了两个接口 和 ethernetif.h 文件LAN8720 接口实现这个文件主要定义 PHY 的相关寄存器以
2025-03-30 22:36:48
974
原创 PHY——LAN8720A 介绍 (一)
一般来说,必须为使用 RMII 接口的 PHY 提供 50MHz 的时钟源输入到 REF_CLK 引脚,不过LAN8720A 内部集成 PLL,可以将 25MHz 的时钟源陪频到 50MHz 并在指定引脚输出该时钟,所以我们可以直接使其与 REF_CLK 连接达到提供 50MHz 时钟效果。REGOFF 引脚用于配置内部+1.2V 电压源, LAN8720A 内部需要+1.2V 电压,可以通过VDDCR 引脚输入+1.2V 电压提供,也可以直接利用 LAN8720A 内部+1.2V 稳压器提供。
2025-03-26 00:45:00
1580
原创 RGMII 接口
在千兆以太网中,常用的接口为 RGMII 和 GMII 接口。RGMII 接口的优势是同时适用于10M/100M/1000Mbps 通信速率,同时占用的引脚数较少。但 RGMII 接口也有其缺点,就是在 PCB 布线时需要尽可能对时钟、控制和数据线进行等长处理,且时序约束相对也更为严格。为了节省引脚,开拓者开发板板载的 PHY 芯片采用的接口为 RGMII 接口,下图是 MAC 侧与 PHY 侧接口的连接。RGMII 拓扑图。
2025-03-25 15:15:04
1101
原创 GMII 接口
GMII 是千兆网的MII接口,这个也有相应的 RGMII 接口,表示简化了的 GMII 接口。GMII 采用 8 位接口数据,工作时钟125MHz,因此传输速率可达 1000Mbps。同时兼容 MII 所规定的 10/100 Mbps 工作方式。GMII 接口数据结构符合 IEEE 以太网标准。
2025-03-25 15:08:38
554
原创 RMII 接口
简化媒体独立接口是标准的以太网接口之一,比 MII 有更少的 I/O 传输。MII 口是用 4 根线来传输数据的,RMII 口是用 2 根线来传输数据的,GMII 是用 8 根线来传输数据的。MII/RMII 只是一种接口,对于10Mbps 线速,MII 的时钟速率是 2.5MHz 就可以了,RMII 则需要 5MHz;对于 100Mbps 线速,MII 需要的时钟速率是 25MHz,RMII 则是 50MHz。
2025-03-21 12:34:06
1018
原创 MII 接口
MII(Media Independent Interface)即媒体独立接口,MII 接口是 MAC 与 PHY 连接的标准接口。它是 IEEE-802.3 定义的以太网行业标准。MII 接口提供了 MAC 与 PHY 之间、PHY 与 STA(Station Management)之间的互联技术,该接口支持 10Mb/s 与 100Mb/s 的数据传输速率,数据传输的位宽为 4 位。MII 需要 16 根通信线(RMII只需要7根通信线),不包括站管理接口媒体独立。
2025-03-21 12:17:45
649
原创 SMI 和 MDIO 接口
SMI:串行管理接口(Serial Management Interface),通常直接被称为 MDIO 接口(Management Data Input/Output Interface)。SMI/MDIO 最早在IEEE 802.3 的第 22 卷定义,后来在第45卷又定义了增强版本的 MDIO,其主要被应用于以太网的 MAC 和 PHY 层之间,用于 MAC 层器件通过读写寄存器来实现对 PHY 层器件的操作与管理。其实就是通过 SMI/MDIO 读写 PHY 的相关寄存器,来达到配置 PH
2025-03-20 12:27:14
724
原创 TCP 协议
TCP与UDP一样,都是传输层的协议,但是提供的服务却大不相同,UDP为上层应用提供的是一种不可靠的,无连接的服务,而TCP则提供一种面向连接、可靠的字节流传输服务,TCP让两个主机建立连接的关系,应用数据以数据流的形式进行传输,这与UDP协议是不一样:UDP运载的数据是以报文的形式,各个报文在网络中互不相干传输,UDP每收到一个报文就递交给上层应用,因此如果对于大量数据来说,应用层的重装是非常麻烦的,因为UDP报文在网络中到达目标主机的顺序是不一样的;
2025-03-19 21:51:13
2440
1
原创 UDP 协议
UDP(User Datagram Protocol),即用户数据报协议,是一种面向无连接的传输层协议。无连接是指在传输数据时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
2025-03-19 19:30:00
1345
原创 ARP 协议
ARP(Address Resolution Protocol),即地址解析协议,是根据 IP 地址(逻辑地址)获取 MAC 地址的一种 TCP/IP 协议。在以太网通信中,数据是以“帧”的格式进行传输的,帧格式里面包含目的主机的MAC 地址。源主机的应用程序知道目的主机的 IP 地址,却不知道目的主机的 MAC 地址。而目的主机的MAC 地址直接被网卡接收和解析,当解析到目的 MAC 地址非本地 MAC 地址时,则直接丢弃该包数据,
2025-03-16 20:56:56
1092
原创 ICMP 协议
ICMP(Internet Control Message Protocol)Internet 控制报文协议。它是 TCP/IP 协议簇的一个子协议,用于在 IP 主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP 使用 IP 的基本支持,就像它是一个更高级别的协议。但是,ICMP 实际上是 IP 的一个组成部分,必须由每个 IP 模块实现。
2025-03-16 20:39:52
953
原创 IP 协议
IP 协议是 TCP/IP 协议簇中的核心协议,也是 TCP/IP 协议的载体,IP 协议规定了数据传输时的基本单元和格式。从前面介绍的可以看出,IP 协议位于以太网 MAC 帧格式的数据段,IP 协议内容由IP 首部和数据字段组成。所有的 TCP、UDP 及 ICMP 数据都以 IP 数据报格式传输。
2025-03-15 22:29:01
2330
原创 以太网 MAC 帧格式
的时间,IFG 的最小值是 96 bit time,即在媒介中发送 96 位原始数据所需要的时间,在不同媒介中 IFG 的最小值是不一样的。不管 10M/100M/1000M 的以太网,两帧之间最少要有 96bit time,IFG 的最少间隔时间。帧间隙的时间就是网络设备和组件在接收一帧之后,需要短暂的时间来恢复并为接收下一帧做准备。,它规定了以太网传输数据的帧结构,我们可以把以太网 MAC层理解成高速公路,我们必须遵循它的规则才能在上面通行,以太网 MAC 层帧格式如下图所示。以太网技术的正式标准是。
2025-03-15 21:57:37
2183
原创 特殊 IP 地址
在IP地址体系中,除了用于分配给主机和网络的常规IP地址外,还存在一些特殊用途的IP地址。这些地址具有特定的功能,不能用于普通的主机IP地址分配。本文将介绍几种常见的特殊IP地址。特殊IP地址类型示例用途路由器转发受限广播地址本地网络广播否直接广播地址子网内广播可配置多播地址224.0.0.1多播通信可配置环回地址127.0.0.1本机测试否本网络本主机0.0.0.0设备启动时DHCP请求否。
2025-03-15 21:46:18
1087
原创 网关与默认网关
默认网关(Default Gateway) 是指当计算机或设备需要与不同子网或外部网络通信时,数据包默认发送的出口。在局域网(LAN)中,通常由路由器或交换机充当默认网关。允许设备访问外部网络(如互联网)。在不同子网之间转发数据包。处理未知目标IP地址的数据包。网关连接不同网络,负责数据转发和协议转换。默认网关 是数据包离开本地网络的默认出口。默认网关的正确配置对于互联网访问和跨子网通信至关重要。
2025-03-12 21:38:28
487
原创 子网掩码介绍
互联网由许多小型网络组成,每个网络上都有多个主机,形成了一个分层的结构。IP地址在设计时考虑到了这种层次性,将每个IP地址划分为网络号和主机号两部分,以便于寻址操作。在IP地址中,网络号和主机号的划分并不是直接确定的,而是需要使用子网掩码来定义。子网掩码不能单独存在,必须与IP地址结合使用,才能确定网络地址和主机地址。子网掩码在网络划分、IP地址管理和路由规划中起着至关重要的作用。合理使用子网掩码可以提高网络效率,减少广播风暴,并优化IP地址分配。
2025-03-12 21:30:08
647
原创 IP 地址
✅ IPv4 由 32 位组成,IPv6 由 128 位组成。✅ IP 地址有公有、私有、静态、动态等类型。✅ 子网掩码用于区分网络部分和主机部分。✅ IP 地址用于标识设备,路由器负责数据包的转发。📌 掌握 IP 地址的基础概念,有助于理解计算机网络的核心原理!
2025-03-12 21:19:30
875
原创 OSI 七层网络模型
TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇, 只是因为在 TCP/IP 协议中 TCP 协议和 IP 协议最具代表性,所以被称为 TCP/IP 协议。作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。
2025-03-12 19:35:05
1084
原创 MAC地址
MAC(Media Access Control)地址是网络设备的物理地址,在全球范围内唯一标识每个网络接口。它是一个 48 比特(6 字节)长的地址,通常以十六进制表示,如。类型第一个字节最低位例子适用范围单播地址0设备间的点对点通信多播地址1组播组中的多个设备广播地址1(固定FF所有设备MAC 地址在网络通信中至关重要,它决定了设备如何在数据链路层进行通信。理解单播、多播和广播的区别,有助于优化网络流量,提高通信效率。📌关键点回顾:单播:点对点通信,最低位0。多播:一对多通信,最低位1。
2025-03-12 19:11:45
2046
原创 cherry USB 键盘分析
cherry USB 键盘有两个接口,每个接口都是 HID keyboard,第一个接口有一个输入端点,第二个接口有一个输入端点和一个输出端点。接口 1 用作普通键盘数据的上报,使用输入端点 1。调节亮度没起作用不知道是操作不对还是键盘的 bug。接口 2 用作控制信息的上报,使用输入端点 2。调节电脑屏幕亮度的报告如下。打开默认浏览器的报告如下。调节电脑声音的报告如下。,的索引设置为 2。打开计算器的报告如下。
2025-01-24 19:53:05
740
原创 USB 等时传输的 PID 序列
全速模式下的同步传输数据方式只使用DATA0包,因此接收方在接收数据时只会收到DATA0数据包。同步传输方式分为全速模式和高速模式,低速模式不存在同步传输。
2025-01-03 12:21:59
101
原创 USB 中断传输的 PID 序列
端点在初始化后,从 DATA0 开始,每成功执行一个事务,数据包序列翻转一次(从 DATA0 变为DATA1 或从 DATA1 变为 DATA0)。端点的数据翻转只有在端点重新初始化或者 CLEAR_FEATURE(Endpoint Halt)后才恢复为 DATA0。数据翻转和传输的个数没有直接关系,只由端点在初始化后处理的总数决定。
2025-01-02 20:41:42
108
原创 使用 wireshark 抓 USB 包
从 wireshark 抓包和硬件抓包对比结果可以明显看到差距,硬件抓包还是比较强的,wireshark 只能辅助看下。安装好之后打开 wireshark,首页会有如下选项(如果没有这个选项,在 捕获->刷新接口列表 刷新一下即可 F5)使用 wireshark 抓 USB 的包,安装的时候需要勾选这里,其他安装选项按需安装即可。2.24.0 对应的含义。这里只抓新插入的设备。
2024-12-31 08:03:23
1998
原创 USB 状态机及状态转换
在 USB 设备被复位后,且在 USB 主机给 USB 设备设置一个新的地址之前,所有的 USB 设备使用默认的 0 地址与主机通信。正常工作的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址,所配置的接口和配置项都将无效,需要由 USB 主机重新指定设备地址,获取描述符并配置相关的配置项,才能使设备再次工作。指定了新的地址的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址也将无效,USB 设备需要 USB 主机重新分配地址。
2024-12-27 21:55:44
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人