u-boot 学习笔记
u-boot 学习笔记 u-boot分类 1.1. api 1.1.1. api.md 1.2. arch 1.2.1. arm 1.2.1.1. arm.md 1.2.1.2. assembly.md 1.2.2. arch.md 1.3. boot 1.3.1. bootm.md 1.3.2. bootretry.md 1.3.3. bootz.md 1.3.4. image.md 1.4. cmd 1.4.1. cmd.md 1.5. common 1.5.1. autoboot.md 1.5.2. board.md 1.5.3. cli.md 1.5.4. command.md 1.5.5. console.md 1.5.6. dmalloc.md 1.5.7. event.md 1.5.8. export.md 1.5.9. log.md 1.5.10. main.md 1.6. dm 1.6.1. adc.md 1.6.2. button.md 1.6.3. clock.md 1.6.4. core.md 1.6.5. dts.md 1....
rtthread_infrared_framework_refactor_master
RT-Thread 红外框架 IF 重构:从单设备 NEC 解码到多实例收发,原理、优化与使用指南 摘要:RT-Thread Infrared Framework 新增多实例 FRAMEWORK 模式,保留旧版 LEGACY 接口,解耦红外采样、NEC 编解码和 PWM 发送。基于 master 源码介绍重构收益、通信原理、配置方法与应用示例。 [TOC] 一次重构,让红外收发从“单套驱动”走向可复用设备框架IF(Infrared Framework)是运行于 RT-Thread 的红外收发软件包,用于把 MCU 的 GPIO、定时器、Input Capture、PWM 等驱动组合起来,完成红外遥控信号的接收、协议解码与发送。典型用途包括遥控器按键接收、设备红外控制、家电遥控指令转发和嵌入式红外协议实验。它处理的是红外遥控的脉冲与协议帧,不是 IrDA 文件传输或通用串口通信。 仓库已在 infrared_framework 的 master 分支提供新一轮框架扩展。原有单设备实现没有被直接删除,而是保留为 LEGACY;新的多实例框架通过 FRAMEWORK 模式独立编...
rtthread_ws2812b_refactor_pr5_article
RT-Thread WS2812B 软件包完成重构:多灯带、动态灯效与更灵活的 SPI 驱动 摘要:RT-Thread 的 WS2812B SPI 软件包已合并重构,新增多设备配置、可选时序编码、亮度与 Gamma 校正及动态灯效。结合单线控制原理,介绍此次优化、实际使用方法,以及原软件包与在线文档的关系。 [TOC] WS2812B 是一种集成控制电路的可寻址 RGB LED 灯珠。普通 RGB 灯带通常整段显示同一种颜色,而 WS2812B 灯带可以通过一根数据线,让不同位置的灯珠分别显示不同颜色。它常用于设备状态灯、氛围灯、流水灯、机箱灯光和交互指示。[S4] 面向 RT-Thread 的 rt_ws2812b 软件包现已完成一轮较大规模的重构:上游 PR #5:扩展 WS2812B SPI 驱动,支持多灯带、动态灯效与自动化构建 于 2026 年 11 月 9 日合并。原本只需几行代码就能点亮灯带的简单驱动,如今也能够承担多路设备、可配置 SPI 时序和应用可选灯效的场景。[S1] 图:仓库提供的颜色轮换实拍预览。更多原始视频和照片见灯效演示资料;视频与具体内置...
rtthread_can_framework_refactor_pr12054
RT-Thread CAN 框架正在重构:为什么要改、相比旧版好在哪里,以及邀请社区一起验证 摘要:RT-Thread CAN 框架重构 PR #12054 移除 Generic TX 软件队列,明确邮箱所有权与发送终态,补充 Abort、Drain 和重配置保护。对比旧版设计,介绍已提交的适配,并邀请各 BSP 参与实机验证。 [TOC] CAN(Controller Area Network,控制器局域网)广泛用于工业控制、车辆电子和嵌入式设备通信。多个节点通过 CAN 总线交换带标识符(CAN ID)的数据帧;发送端先将帧提交给 CAN 控制器的发送资源,再由控制器参与总线仲裁和实际发送。RT-Thread 的 Generic CAN Framework 位于应用/协议栈与芯片厂商 CAN 驱动之间,向上提供统一设备接口,向下调用 BSP 的硬件操作,并接收中断上报。框架负责什么、上层负责什么,直接决定了发送拥塞、错误恢复和动态重配置时能否准确管理尚未完成的报文。[S1][S2] 近期的 CAN 框架重构 PR #12054 正在尝试解决这一问题。这里讨论...
rtthread_stm32_input_capture
STM32 输入捕获终于接入 RT-Thread:测量脉冲,不必再从 HAL 回调写起 摘要:RT-Thread 主线已合并 STM32F1/H7 输入捕获驱动,应用可通过统一设备接口读取高、低电平脉宽。本文介绍输入捕获原理、BSP 接入方法,以及正在扩展的多通道、PWM Input 和双边沿模式。 [TOC] STM32 输入捕获有了统一的 RT-Thread 设备接口测量 PWM 占空比、风扇转速、编码脉冲或超声波回波时,STM32 的定时器输入捕获(Input Capture)是常用外设功能。它在输入信号出现指定边沿时,把定时器计数值锁存到捕获/比较寄存器(CCR),由相邻捕获值的差计算时间间隔。与 GPIO 中断中读取软件时间戳相比,硬件捕获能减少中断响应延迟对边沿时间戳的直接影响。[S5] 过去在 STM32 BSP 中使用这项功能,应用往往需要自行组织 HAL_TIM_IC_ConfigChannel()、HAL_TIM_IC_Start_IT()、HAL_TIM_IC_CaptureCallback(),再处理边沿切换、计数器回绕和脉宽换...
engineering-practice
Wi-Fi Direct 真机实践:固定 GO、授权加入与稳定性排查 摘要:结合 X86 与 RK3568 真机实践,说明为何选择固定 GO 与动态 Group、宿主机脚本如何配合普通容器进程,以及 wpa_ctrl、wpa_cli 与长期稳定性测试的工程取舍。 [TOC] Wi-Fi Direct(Wi-Fi Peer-to-Peer,P2P)让两台 Wi-Fi 设备不依赖现有无线路由器,直接组成无线网络。其中 Group Owner(GO)负责维护类似 AP 的 Group,P2P Client 加入这个 Group。Linux 上通常由 wpa_supplicant 负责发现、无线组网和安全连接;Group 建立后,业务仍通过普通 IP/TCP/UDP Socket 通信。 对于角色固定的两台设备,更推荐“GO 先建组并开放 WPS 授权,Client 发现后加入”,而不是每次都重新协商谁当 GO。 这一选择减少了需要双方配合的协商环节,但不意味着省略无线发现、WPS、关联或 WPA2 安全握手,也不意味着稳定性问题会自动消失。真正费时间的往往是...
ros_ultrasonic_in_ros
从一条超声波测距到 ROS 导航:PointCloud2、碰撞监测与 Costmap 摘要:超声波通常只返回一条距离读数。介绍 ROS Range 的测量语义、圆弧虚拟点云的几何计算,以及 Nav2 碰撞监测与 Costmap 的不同处理方式,并比较适用场景和局限。 @[toc] 1. 超声波只有一个距离值,ROS 为什么能有三种用法超声波测距器发射声波并接收回波,通常向上层报告一个标量距离,例如 0.20 m。这个数值说明反射目标可能出现在传感器前方的某个距离位置,但并没有告诉软件,反射点究竟位于左侧、正前方还是右侧。尤其对于具有一定波束宽度的探头,同一条距离读数无法像扫描式激光雷达那样确定每个角度各自的障碍物距离。 ROS 使用 sensor_msgs/Range 表达这类单次测距。其 field_of_view 定义了这条读数可能对应的角度范围,range 是距离值,header.frame_id 标记传感器坐标系,header.stamp 标记采样时间。ROS 的消息定义明确采用“距离值在某段圆弧上有效”的模型,而不是“每个角度都独立测到一个点”。[S1][S2]...
39-rtthread-lwip-port
教程 39:从 lwip_system_init() 到 tcpip_input()——RT-Thread 如何把 lwIP 接进 RTOS 与 Ethernet Device 摘要:从 RT-Thread 的 lwIP 初始化入口追踪 Kconfig、sys_arch、eth_device、RX/TX 线程与 tcpip_input,建立真实 RTOS Port 的完整桥接流程。 [TOC] Stage 38 已经把 lwIP Port Contract 拆成四块:lwipopts.h 配置、源码构建选择、OS/Arch Port、Network Port。Stage 39 不再重复这些抽象的原理,而是直接拿 RT-Thread 当前源码回答一个问题:RT-Thread 怎样把这些 contract 一项项落成可运行代码,并把一个 Ethernet Driver 最终接到 tcpip_thread。 RT-Thread 的完整 Device Framework、NetDev、SAL、DFS 并不是本篇目标。它们只在当前调用链真正出现时说明接口位置;S...
18-multi-netif-routing
教程 18:从 udp_sendto() 到 etharp_output()——Multi-netif IPv4 路由、Default Netif、Gateway 与下一跳 摘要:从 UDP/TCP 发送入口追踪 IPv4 multi-netif 出口选择、默认接口、源地址与 Gateway 下一跳,厘清 route 与 ARP 的职责边界。 [TOC] Multi-netif 表示同一个 lwIP 实例同时存在多个 struct netif 网络接口。本文标题中的 Default Netif(默认接口) 是没有更具体匹配时的 fallback outgoing interface;Gateway(网关) 是已经选定某张接口以后,在当前二层链路上需要直接发送给的下一跳 IP。两者不是同一个对象,也不等价于“默认路由 = 网关地址”。 Stage 18 只回答 IPv4 发送方向上的一个问题:应用没有显式固定接口时,lwIP 怎样先选择 outgoing netif,然后怎样决定 Ethernet 下一跳是 destination 本身还是该接口的 ga...
16-ipv4-fragmentation-reassembly
教程 16:从 MTU 到 ip4_frag() / ip4_reass()——IPv4 分片、重组、超时与内存压力 摘要:沿 IPv4 发送与接收源码链,理解 MTU 如何触发分片、Offset/MF/ID 如何组织片段,以及 lwIP 怎样排序、重组、超时清理并限制资源占用。 [TOC] IPv4 fragmentation(IPv4 分片)解决的是“一个 IPv4 datagram 比当前可发送路径允许的 packet 更大时,怎样把它拆成多个 fragment”;reassembly(重组)则在最终目的主机把这些 fragment 恢复成原始 datagram。Fragment 不是新的传输层或 ICMP message,每一片仍然携带自己的 IPv4 Header,并通过 Identification、MF(More Fragments)和 Fragment Offset 表明自己属于哪个原始 datagram、位于什么位置、后面是否还有片段。S4S12 MTU(Maximum Transmission Unit,最大传输单元)表示...








