登录社区云,与社区用户共同成长
邀请您加入社区
我叫 NASM,是二进制江湖里横跨各派、冷眼看戏三十年的硬核老兵。1996年我为打破微软MASM等门阀垄断而生,凭纯粹的“中括号语法”和独创的16/32位无缝切换机制,成为早期Linux与FFmpeg等开源神作的拓荒孵化器。虽历经宏崩溃与架构断层的青年危机,但我凭 2.00版本彻底刮骨疗毒,全面重构宏引擎并制霸64位架构与现代扩展指令集。如今面对AI时代,我再度进化支持 AVX-512与AMX矩阵
最近梳理了一下编码器和机器人关节电机的传感器问题,从最基础的增量式 A/B/Z,一路聊到绝对式编码器、关节电机选型,以及其他常见传感器。编码器分增量式和绝对式。关节电机主流用多圈绝对式编码器,常见双编码器配置,接口多为多摩川、BiSS-C、SSI、EnDat、CANopen、EtherCAT。机器人关节电机,尤其是工业机器人、协作机器人、人形机器人,基本都用多圈绝对式编码器,而且很多是双编码器配置
本文基于STM32MP157开发板,使用正点原子SDK初始化SD卡,通过Deepin虚拟机解压Ubuntu Base 20.04 LTS armhf镜像,利用chroot环境配置根文件系统。完成网络、DNS、软件源设置,安装XFCE桌面环境及LightDM自动登录,集成中英文输入法、浏览器、音视频播放器、开发工具等常用应用,并配置SSH远程访问与VNC远程桌面。最终将生成的rootfs写入SD卡,
系统启动成功,用户名为root,没有密码。下载对应平台安装包,安装Renode。
本文聚焦STM32F103上TinyML模型的静态部署,通过Edge Impulse生成C++模型包,解决Semihosting卡死、DSP Heap不足、TFLite依赖过重及HardFault等问题,实现模型在有限SRAM/Flash下的稳定运行。强调从“模型可跑”到“嵌入式可靠部署”的工程思维转变,完成端侧推理关键一步,为后续实时手势识别奠定基础。
本文记录STM32 TinyML手势识别项目从V1到V2的模型迭代:基于300维三轴加速度数据,通过Edge Impulse进行频域特征提取,优化特征处理时间由11ms降至2ms,显著提升特征聚类效果。尽管当前验证集准确率达100%,但强调其不等于泛化能力,需警惕过拟合。本篇核心在于建立可对比的baseline,明确特征工程对端侧性能的关键影响,为后续模型部署与数据扩充奠定基础。
有些imu的姿态解算算法中,直接对陀螺仪的角速度进行积分后的角度作为欧拉角,我认为是不对的,通过查阅资料并且认真学习后写出这篇文章来分享自己的理解。
直流电机直启电流飙升至10倍额定值,传统软启动参数固定适配性差。本文解析AQMD6008BLS-TE驱动器,基于ARM处理器双闭环架构,通过实时电流采样与数字PID动态调节PWM占空比,实现电流闭环自适应软启动,自动跟踪工作电流限幅,兼顾抑冲击与高效加速,为工业、机器人及新能源车提供高性能驱动方案。
直流电机制动技术从传统的电阻能耗制动、直接短接制动,发展到当前的恒流能耗制动,体现了电机控制从"被动消耗"向"主动调节"的技术演进。恒流制动通过实时电流检测与功率器件动态调节,在制动速度、冲击抑制与通用性之间取得了最佳平衡,为工业自动化、机器人及精密传动系统提供了可靠、高效的制动解决方案。这一机制从根本上解决了传统能耗制动"低速段制动弱"的问题:无论电机转速高低,制动电流始终保持恒定,制动转矩不衰
香橙派6(CIX CD8180)搭载昇腾310P需解决两大难题:一是BIOS默认PCIe链路超时300ms,导致设备无法枚举,改至500ms可解决;二是驱动DKMS编译失败,因内核头文件与驱动源码中enum profile_type定义冲突。通过探测内核头文件并打补丁,重新打包.run安装包,成功完成驱动编译。最终用户需加入HwHiAiUser组以正常使用npu-smi。
文章目录一:VLAN的流程图二:VLAN基础知识三:基本VLAN配置四:可接受的帧类型五: VLAN入口决定(包括IVC和Vlan-classifier和Port-based Vlan)5.1 优先级列表5.2 Port-based VLAN5.3 IVC(ingress VLAN conversion)5.3.1 VlAN基于MAC与IP分类的流程5.3.2 VlAN映射六: VLAN入口过滤七
本文以瑞芯微RK3288为例,详细解析UART串口驱动开发全流程。通过真实案例拆解调试串口异常、数据收发故障和波特率偏差三大典型问题,从硬件原理、内核驱动框架到应用层实现展开分析。重点包括:1) RK3288的5路UART控制器特性及默认调试串口配置;2) Linux串口子系统框架与设备树绑定;3) 波特率计算原理及分数分频校正机制。文章提供完整的设备树配置示例、应用层termios编程代码和命令
本文系统介绍了Linux VFIO框架的核心原理与应用实践。主要内容包括: VFIO架构概述:作为用户态驱动框架,VFIO通过IOMMU保护实现安全高效的设备访问,相比UIO具有更好的安全性。 核心组件详解: IOMMU基础与隔离机制 三层抽象模型(Device/Group/Container) 新一代iommufd接口 完整API指南: 初始化流程7个关键步骤 三类核心ioctl接口(Conta
调制方式上,读卡器到标签(PCD-to-PICC)采用100% ASK或10% ASK调制,而标签到读卡器(PICC-to-PCD)则采用负载调制(Load Modulation),副载波频率为423.75 kHz。- Command Code(命令码):1字节,如0x01(Inventory)、0x20(Read Single Block)、0x21(Write Single Block)。-
嵌入式驱动开发是连接硬件与软件的关键技术,其核心在于将芯片手册中的寄存器描述转化为稳定可靠的软件接口。理解I2C/SPI等通信协议的工作原理、掌握寄存器映射与位域操作是驱动开发的基础。通过分层架构设计,开发者可以构建出硬件抽象层、核心驱动层和应用接口层,实现代码的可移植性与可维护性。这种工程实践方法对于传感器集成、物联网设备开发等场景至关重要,能够确保硬件在复杂系统中稳定运行。本文以TMI8150
众所周不知,整个嵌入式系统江湖里,真正掌权的不是CPU,也不是代码,而是寄存器!!!CPU只是个打工仔,代码只是嘴泡王,真正负责拍板干活的,是寄存器老大哥。寄存器你可以把它理解成CPU内部的一堆“小纸条”,CPU脑容量有限,干活的时候总得有地方记东西吧?于是工程师就在芯片里塞了一堆速度极快的小存储单元,这玩意儿就叫寄存器,。寄存器最大的特点就俩字:快!很快!!非常快!!!你电脑里的DDR内存已经很
嵌入式Linux GPIO子系统架构解析 本文深入剖析了嵌入式Linux中的GPIO子系统架构。GPIO子系统采用分层设计,上层提供统一API接口,下层对接不同硬件平台,实现了硬件无关的GPIO操作接口。 核心内容包括: GPIO子系统分层架构:应用层→核心层→控制器驱动层→硬件层 关键数据结构gpio_chip及其操作方法 i.MX平台GPIO控制器驱动实现细节: 硬件描述结构mxc_gpio_
RK3399的I2C驱动分为适配器驱动(控制器)和设备驱动(外设),适配器驱动是硬件层实现,设备驱动是业务层实现,通过I2C核心层解耦。适配器驱动基于,通过设备树匹配硬件,核心是实现的(中断驱动的数收发)。中断是RK3399 I2C高效传输的核心,负责逐字节处理、错误检测、传输状态更新。Client驱动通过i2c_driver注册,调用对接核心层,无需关心底层硬件细节,实现跨平台复用。
层级核心工作关键点驱动层I2C/SPI 读写WHO_AM_I 验证 + 错误处理配置层量程/采样率/滤波器权衡精度和带宽校准层零偏/比例/温度补偿校准比算法更重要滤波层低通/中值/卡尔曼越简单越稳定融合层互补/卡尔曼/梯度下降Mahony 在 MCU 上最实用传感器开发的第一步不是上高级算法,而是做好校准和滤波。一个正确校准的简单滤波器,效果远好于一个未经校准的高级融合算法。
RK3568的SPI控制器统一在中预定义,板级DTS仅需启用并追加从设备。属性必选说明compatible是固定为,与SPI控制器驱动匹配reg是控制器寄存器基地址+地址空间大小interrupts是SPI控制器中断号clocks是外设总线时钟与功能时钟,名称为pclkspi是固定为<1>,片选号用1个cell表示是固定为<0>,SPI从设备无独立地址空间cs-gpios否GPIO模拟片选时使用,
基于 Linux 6.x 内核与 Rockchip RK3588 平台,涵盖环境搭建、基础驱动到常见外设的全栈内容。
分辨率与像素分辨率:800 × 480,表示屏幕由 800 列 × 480 行的像素点组成。每个像素点由 红(R)、绿(G)、蓝(B) 三个子像素构成,通常采用 RGB888 格式(每通道 8 位),共 24 位颜色深度。
ADC(Analog-to-Digital Converter,模数转换器)是将转换为的核心模块,是数字系统(MCU/处理器)与物理世界模拟信号交互的桥梁。
我使用的是瑞芯微的rk3576-evm。打开手册3-1-Linux系统使用手册.pdf跟着官方手册的配置完毕后。我们可以看到,这里使用的是tl3576-evm.dts。打开kernel/arch/arm64/dts/rockchip/tl3576-evm.dts。其中去掉一些不用的摄像头的驱动后(也可以不去)加入spi0和spi1这里用的引脚配置分别是spi0m0_pins和spi1m2_pins
本文介绍了基于新唐MCU M485LIDAE与W25N01KV NAND Flash的硬件平台开发方案。W25N01KV是一款128MB容量的NAND Flash,支持标准/双/四线SPI接口,具有2048字节页大小和128KB块擦除特性。文章详细解析了芯片封装、引脚功能、状态寄存器配置以及基本操作指令,包括设备ID读取、状态寄存器访问、写使能、块擦除和页编程等。同时提供了驱动层(drv.c/h)
TDD(测试驱动开发)通过"红-绿-重构"循环提升软件质量,使测试从业者从被动检测转向主动设计。其核心流程包括:编写失败测试、快速实现通过、优化代码结构。实施要点包括遵循FIRST原则、采用测试金字塔策略,并配合JUnit等工具链。TDD能降低40%-80%缺陷率,要求测试人员转型为质量共建者,通过持续实践实现质量与效率双提升。
本文详细介绍了基于龙芯2K0300处理器的智能车Linux系统深度定制实战,涵盖内核裁剪、驱动开发和文件系统优化等关键环节。通过内核从5MB精简至2.5MB、电机闭环驱动开发及Buildroot根文件系统定制,显著提升系统启动速度与稳定性,为嵌入式Linux开发提供实用参考。
本文深入探讨RK3588传感器驱动开发中的时间戳精度问题,分析硬件时钟源选择、内核调度延迟等根源,并提供从驱动层中断处理优化到系统级实时调度配置的全方位策略。通过实战案例展示如何将时间戳精度从±15ms提升至±100μs,为高精度数据采集应用提供关键解决方案。
前端应用本质是复杂的 UI 状态机。对于复杂的交互(如表单提交、购物车结算),必须在 Spec 中定义状态流转的约束。•深度实践:不要只描述“用户点击按钮后提交”,而要描述“点击前需满足isValid为真(前置条件),提交成功后变假且路由跳转(后置条件)”。•执行动作:使用伪代码或自然语言明确(前置条件)和(后置条件)。•引用来源:参考文档中的“函数规约”,确保操作的正确性(如余额大于0才能取款)
本文系统介绍了C++驱动开发的现代工具链与调试技术,涵盖Visual Studio与WDK集成环境配置、WDF框架演进、双机调试与静态分析等高级实践。重点解析了驱动开发从Hello World到内核之巅的核心技能,帮助开发者掌握高效、安全的驱动开发方法,提升系统性能与稳定性。
资料:《【正点原子】I.MX6U开发指南V1.81.pdf》七十三章。
本文介绍了在STM32开发板上移植PX4飞控系统时遇到的I2C驱动开发问题。作者针对室内小型无人机的需求,选择FPV飞控方案,重点阐述了I2C驱动的四层架构:驱动逻辑、WorkItemSingleShot初始化、任务管理器和workitem队列。详细分析了程序运行流程,并分享了调试经验,包括调试信息打印方法(使用PX4_ERR/PX4_INFO_RAW)、实例运行状态检查(stop命令或work_
本文全面介绍Linux系统中的SPI通信,涵盖硬件原理、协议时序、驱动框架和应用接口。SPI是一种全双工同步串行总线,采用主从架构,具有信号线简单、传输速率高、协议灵活等特点。文章详细解析SPI硬件信号、电平标准、控制器架构以及四种工作模式(CPOL/CPHA组合)。在Linux驱动框架部分,重点说明SPI核心子系统的分层设计,包括控制器驱动、协议驱动和数据结构,并提供示例代码。最后介绍用户态接口
Android驱动开发和Linux驱动开发既有紧密的联系,又有显著的区别。Linux驱动开发:是基础。它提供了硬件和操作系统内核交互的通用框架。Android驱动开发:是扩展和应用。它在Linux驱动的基础上,增加了Android系统特有的框架和机制,以支持移动设备独有的硬件和功能。
能够使硬件工作的软件。
本文以SSD1306 OLED驱动为例,深入解析Zephyr RTOS驱动开发中设备树节点与Kconfig配置的协同工作与常见陷阱。文章详细阐述了如何正确编写设备树节点、配置Kconfig依赖关系,并提供了从节点定义、编译验证到代码安全引用、系统性硬件排错的完整实战指南,帮助开发者高效完成板卡驱动适配与BSP调试。
本文使用正点原子imx6ull开发板,编写基于linux驱动input子框架的测试代码。
推荐使用WDK 10/11与Visual Studio 2019/2022集成开发环境。
内容详见《【正点原子】I.MX6U嵌入式Linux驱动开发指南》四十二章开发板:imx6ull mini虚拟机:VMware17之前一直使用register_chrdev函数来注册字符设备,这会将整个主设备号下的次设备号都用掉,浪费次设备号,还需要手动指定主设备号,还需要确定哪个主设备号没有被使用,还需要mknod创建设备节点文件 巴拉巴拉……既然已经有系统了,最方便的方法就是直接由系统分配。
ch394 spi接口转以太网、网口设备驱动
在嵌入式linux开发中,主要包括字符设备开发、块设备开发以及网络设备开发三种。字符设备开发是最常见的驱动开发,包括我们常见的gpio、led、SPI、I2C等,都是字符设备开发的一种。
测试驱动开发(TDD)采用"红-绿-重构"循环模式,通过测试先行确保代码质量。相比传统开发,TDD具有缺陷预防(某银行缺陷率降62%)、设计引导等优势,但存在初期效率降低30%等挑战。适用场景包括金融系统核心模块、微服务接口测试等,推荐JUnit/pytest等工具链。最佳实践建议控制测试粒度、采用增量开发。TDD尤其适合需要高可靠性的系统,虽前期投入较大,但长期可提升40%迭
硬件工程师在实现硬件与上位机(通常指PC、服务器或控制软件)交互时,需要掌握核心知识,包括通信协议、硬件接口、驱动开发、数据处理等。上位机:Python(pyserial、paho-mqtt)、C#、LabVIEW。USB设备:需要驱动(如WinUSB、libusb)或免驱(如USB-CDC)。层次:物理层、链路层(以太网帧)、网络层(IP)、传输层(TCP/UDP)。硬件:以太网PHY(如LAN
本文介绍了Linux下按键驱动的开发流程,主要分为以下几个部分:首先,按键驱动可以通过输入子系统或字符设备驱动实现,推荐使用输入子系统。其次,设备树配置是开发的关键,需定义按键节点并配置相关属性,如GPIO引脚、按键编码和消抖时间。接着,驱动代码的实现包括初始化、GPIO和中断的申请、以及输入设备的注册。应用层可以通过读取/dev/input/下的设备节点来获取按键事件,并使用工具如evtest进
核心步骤功能创建设备类别,挂载到 /sys/class注册 struct device,生成 /sys 和 /dev 节点udev监听内核事件,自动创建设备文件设置私有数据,可用 device_get_drvdata 获取cdev 操作管理字符设备的核心操作结构。
结构体iio_dev来表示具体的IIO设备,整体的驱动框架,还是要看设备,比如spi设备,创建的就是spi_driver。icm20608c_read_raw的返回值,决定读到的数据值,返回值IIO_VAL_INT为1,读到的数据按照整形返回,只有val,没有val2,返回值IIO_VAL_INT_PLUS_MICRO为2,按照val+val2/1000000反馈, 返回值IIO_VAL_INT_
全称:Low Dropout Regulator(低压差线性稳压器)特点:输入电压与输出电压很接近,效率中等。应用:为噪声敏感器件供电,比如模拟电路、音频设备。全称:Buck Converter(降压开关稳压器)特点:输入电压高,输出电压低;效率高(通常 > 90%)。应用:为CPU、GPU、大电流设备供电。类型特点应用场景LDO简单、低噪声、低压差模拟电路、摄像头BUCK高效率、大电流层次作用硬
本文介绍如何创建一个简单的Linux字符设备驱动,并提供了一个完整的misc设备驱动示例
驱动开发
——驱动开发
联系我们(工作时间:8:30-22:00)
400-660-0108 kefu@csdn.net