- 博客(527)
- 收藏
- 关注
原创 DS18B20/M1820温度传感器:IO模拟 vs 串口模拟实现深度对比
DS18B20和M1820是广泛使用的单总线数字温度传感器,它们采用独特的1-Wire通信协议。在实际嵌入式开发中,实现1-Wire协议主要有两种方式:GPIO模拟和UART模拟。本文将以实际项目代码为例,深度对比这两种实现方式的原理、优缺点和应用场景。1-Wire协议是Dallas Semiconductor(现Maxim Integrated)开发的单线通信协议,具有以下特点:GPIO模拟是通过软件精确控制GPIO引脚的电平变化来模拟1-Wire时序:2.2 完整代码示例2.3 GPIO方案优缺点
2026-03-26 19:22:43
240
原创 Keil5调试器变量监控完全指南
所有变量都可以被监控,只是监控条件不同全局变量和静态局部变量:任何时候都可以监控局部变量:只能在函数执行期间监控调试器通过符号表和栈帧信息来定位变量正确的监控时机是成功监控的关键变量类型存储位置监控时机监控难度推荐使用场景全局变量数据段任何时候⭐系统状态、配置参数静态局部变量数据段任何时候⭐函数内部状态、计数器局部变量栈上函数执行期间⭐⭐临时计算、循环变量寄存器变量寄存器函数执行期间⭐⭐⭐高频访问变量堆变量堆上指针有效期间⭐⭐动态数据结构。
2026-03-25 17:28:25
276
原创 从裸机到Linux:嵌入式开发的三重境界全面解析
你已经有最宝贵的硬件知识,现在只需要学习如何在Linux这个复杂而优雅的系统中运用这些知识。每一步前进,都离"全栈嵌入式工程师"更近一步!掌握裸机开发是第一步,理解RTOS是质变,而Linux驱动开发则是开悟。本文将带你完成从单片机工程师到Linux驱动工程师的认知升级。
2026-03-20 17:08:49
81
原创 Linux设备与驱动:从代码层面彻底理解二者的分工与合作
一个设备可以有多个驱动(如USB设备可以有USB驱动和HID驱动):x86使用ACPI,ARM使用设备树,嵌入式系统可能用硬编码。理解这种设计思想,是掌握Linux设备驱动开发的关键!:驱动从设备代码获取资源信息,实现硬件无关。Linux内核采用这种分离设计是为了实现。(描述硬件有什么资源、叫什么名字),(描述如何操作这类硬件),(负责把设备和驱动配对)。:设备与驱动必须一一对应。:驱动需要硬编码设备地址。:设备可以是虚拟的(如。:所有系统都需要设备树。:设备必须是物理硬件。
2026-03-20 16:51:07
186
原创 Linux设备驱动模型:深入理解设备、驱动与总线
是知道如何操作硬件的代码。它告诉系统:“我知道如何操作这类硬件,把匹配的设备交给我吧!,是硬件实体的软件表示。它告诉系统:“这里有一个硬件,这是它的地址、中断、资源…,负责将设备和驱动配对。它知道:“这个设备应该由哪个驱动来控制。,这是Linux设备模型设计的精髓所在。这个中介协同工作,实现了硬件与软件的。
2026-03-20 16:45:48
146
原创 ACPI详解:现代计算机电源管理的基石
ACPI虽然复杂,但它是理解现代计算机系统如何管理电源和硬件配置的关键。随着计算平台的发展,ACPI继续演进,支持新的硬件特性和安全要求。,由ACPI Source Language (ASL)编译而成。操作系统中的AML解释器执行这些字节码。ACPI表是存储在固件中的数据结构,操作系统通过它们了解系统配置。它定义了操作系统如何发现、配置和控制计算机硬件的电源管理功能。ACPI命名空间是一个层次化的对象树,表示系统中的所有设备。
2026-03-20 09:26:43
391
原创 ALSA子系统:Linux音频架构的全面解析
统一的音频架构:从内核到应用层的完整解决方案硬件抽象:支持各种音频硬件插件系统:灵活的音频处理管道专业特性:低延迟、多声道、硬件混音开源生态:广泛的应用和工具支持。
2026-03-20 09:10:39
398
原创 C语言数组参数传递的三种写法:从困惑到精通
数组参数传递的本质是指针传递,三种写法在编译后完全相同写法1:提供文档信息,提示调用者数组期望大小写法2:传统写法,表示"数组但大小未知"写法3type *name:最本质的写法,明确表达指针语义永远记住:在函数内部,sizeof(数组参数)返回的是指针大小// 最终验证:三种写法真的等价吗?// 答案是:在函数声明/定义时,三种写法完全等价// 但在函数指针类型声明时,有微妙差异:// 指向"接受int[10]的函数"的指针// 指向"接受int[]的函数"的指针。
2026-03-16 16:03:37
372
原创 PMBus深入解析:电源管理的通信总线
PMBus的优势标准化:统一的电源管理接口灵活:支持多种数据格式和命令可监控:实时监控电源参数可配置:运行时调整电源参数可扩展:支持多设备、多页面实现建议从简单开始:先实现基本的读写功能逐步增加功能:先支持LINEAR11格式,再增加其他格式充分测试:特别测试边界条件和故障情况考虑容错:添加超时、重试机制性能优化:对于高速应用,考虑使用硬件加速资源参考PMBus规范:PMBus官网(www.pmbus.org)应用笔记:TI、ADI、Maxim等厂商的应用笔记开源实现。
2026-03-16 11:31:26
581
原创 音频总线协议与接口全解析:IIS,SAI,McASP小白入门指南
协议(Protocol)是一种通信规则,规定了数据是如何在两个设备之间传输的。你可以把它理解为两个人对话时使用的“语言”和“语法规则”。协议关注的是数据格式、时序要求、信号含义等逻辑层面的东西。举例来说:I2S协议规定了音频数据应该如何打包、时钟和帧同步信号如何配合、每个bit应该在哪个时刻传输。接口(Interface)是硬件层面的连接通道,是实现协议所需的物理电路。你可以把它理解为“电话机”——虽然两人用普通话(协议)交流,但需要通过电话机(接口)来传输声音。
2026-03-13 15:47:06
276
原创 Linux 驱动核心接口:open / ioctl / mmap / select / close 全面对比与实战
IOW1int_IOR2int接口数据传输用途是否常用open否初始化设备必须read是从设备读数据常用write是写设备常用ioctl否控制设备很常用mmap是共享内存高性能设备否事件通知异步设备close否释放资源必须。
2026-03-13 13:30:10
591
原创 OMAP L138 EDMA3 完全指南:从原理到实战(小白友好版)
ACNT(Array Count):一维“阵列”长度 → 单次传输的连续字节数(如32位数据即4字节,ACNT=4)。BCNT(Block Count):二维“帧”长度 → 一个帧包含的阵列数(如McASP一帧8个通道,BCNT=8)。CCNT(Frame Count):三维“块”长度 → 总共有多少个帧(如连续传输100帧数据,CCNT=100)。总传输字节数 = ACNT × BCNT × CCNT(示例:4×8×100=3200字节)。
2026-03-11 17:18:54
326
原创 OMAP L138 McASP实战指南:从入门到FPGA通讯精通(非音频场景)
需求:OMAP L138(McASP0)与FPGA(以Xilinx Artix-7为例)实现双向同步通信。参数:主模式(McASP生成BCLK和FS)、TDM模式、1帧8个时隙、32位数据位宽、BCLK=25MHz、FS=31.25kHz(每帧8个32位数据,25MHz/(8×32)=97.66kHz,可调整为100kHz)。数据流向:发送(McASP→FPGA):OMAP L138通过EDMA3将内存中的传感器指令数据传输到FPGA。
2026-03-11 17:08:17
290
原创 小白入门:RK3576 SAI 与 FPGA 通信开发教程
RK3576 SAI 与 FPGA 通信的核心是抛弃音频协议,把SAI当作“同步串行控制器”,只需关注时钟、帧同步、数据三个信号的时序;新手优先用“SAI主模式+32bit帧长+MSB先传”,FPGA端按BCLK/LRCK时序解析即可,无需复杂配置;问题排查优先查“硬件时序”(示波器抓信号),再查“寄存器配置”,驱动无需修改。
2026-03-11 11:16:09
279
原创 小白入门:RK3576 SAI 接口开发手把手教程
从电脑传一个 WAV 格式音频文件(48kHz、16bit、立体声)到开发板;用aplay播放:aplay -D plughw:0,0 test.wav正常:耳机能清晰听到音乐;异常:杂音大→ 可能是电源噪声(给 CODEC 电源加个 100nF 电容),或 MCLK 时钟没接。
2026-03-11 11:05:58
208
原创 Rockchip RK3576 SAI 接口调试全指南
SAIx_MCLK:主时钟(可选,给外部 CODEC 提供时钟);SAIx_BCLK:位时钟(串行数据传输时钟);SAIx_LRCK:帧同步时钟(左/右声道切换,也叫 WS);SAIx_TXD:发送数据(CPU → CODEC);SAIx_RXD:接收数据(CODEC → CPU)。注:硬件设计时需注意信号阻抗匹配(建议 100Ω),MCLK/BCLK/LRCK 需加 10~100nF 去耦电容,避免时钟抖动。RK3576 SAI 调试核心是设备树配置(时钟、引脚、协议、CODEC 绑定)与。
2026-03-11 10:25:23
395
原创 Rockchip RK3576/RK3576J 芯片深度解析:硬件功能对比与驱动/系统开发指南
Rockchip RK3576 系列芯片(含 RK3576J 与 RK3576-D 衍生型号)是面向 ARM 架构 PC、边缘计算设备、移动互联网终端的低功耗高性能处理器,凭借四核 Cortex-A72 + 四核 Cortex-A53 异构架构、强大的多媒体处理能力及丰富的外设接口,成为嵌入式开发的优选方案。本文将从硬件功能对比、驱动与系统开发注意事项两方面,提炼芯片核心特性与开发关键要点,为开发者提供实战参考。
2026-03-11 10:21:17
495
原创 Linux 应用开发常用函数速查手册
Linux 最强 I/O 模型。比 select 更现代。不要死记函数,而是记。打开设备 / 文件。最早的多路复用函数。
2026-03-09 14:17:17
428
原创 STM32 ADC与DMA调试经验总结:从困惑到顿悟的2天调试之旅
配置一致性是嵌入式开发的第一原则。硬件配置、软件定义和库函数调用必须保持完全一致。// DMA测试状态变量(32位结构)// 高16位:DMA错误代码// 低16位:0x2000 | HAL状态码// 在关键函数中添加调试信息// ... 函数逻辑 ...// 深度调试:记录详细状态// 成功标志} else {// 失败时记录错误详情= NULL)?问题:最初只关注单个函数,忽略了硬件-软件-配置的整体性。解决方案✅ ADC时钟配置✅ DMA通道配置。
2026-03-04 16:03:32
28
原创 一线制(One-Wire)通信协议深度解析:从原理到实战
一线制技术凭借其极简的硬件设计可靠的通信机制和丰富的设备生态,在工业控制、环境监测、安防系统等领域持续发挥着重要作用。掌握One-Wire协议的核心原理和设计技巧,能够帮助工程师构建高性价比的分布式传感网络,为物联网应用提供坚实基础。
2026-03-04 09:31:37
435
原创 STM32CubeMX ADC 配置全解析:从参数理解到多通道工程实战
先明确采样需求(单/多通道、采样频率、精度);核心参数优先配置(分辨率、扫描/连续模式、DMA);触发源和采样时间根据场景微调;多通道工程中,DMA+定时器是实现稳定采样的最佳组合。掌握以上逻辑,无论是简单的单通道电压采集,还是复杂的多通道高速采样,都能快速完成ADC配置,避免参数堆砌导致的功能异常。
2026-03-03 14:23:44
958
原创 Modbus接线,usart喝RS485关系
从物理原理层面深入解析串口(USART)与RS485的关系,以及它们在Modbus系统中的协同工作原理。以下内容将结合电子信号原理、通信协议和工业应用需求进行详细说明。
2026-02-27 15:35:20
235
原创 xQueueReceive与FIFO:深度解析与应用场景对比
通过合理结合两种技术,可以在满足实时性要求的同时,最大化系统吞吐量和效率。使用xQueueReceive。是否在RTOS环境中?考虑队列深度和数据类型。选择合适FIFO实现。
2026-02-27 11:36:49
388
原创 通过MCU的SPI给FPGA升级:超越串口的配置方案
在嵌入式系统中,FPGA配置通常依赖JTAG接口,但SPI接口正成为更高效的替代方案。本文将深入解析如何通过MCU的SPI接口实现FPGA固件升级。
2026-02-27 11:29:36
765
原创 共享缓冲区深度解析:从原理到高性能实现
共享缓冲区是一块被多个进程或线程共同访问的内存区域,它打破了传统IPC(如管道、消息队列)的数据拷贝瓶颈,允许直接内存访问。数据结构选择单生产者单消费者:无锁环形缓冲区多生产者:带原子操作的环形缓冲区大数据块:分块共享内存池同步策略fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;低高少多需要同步?写冲突概率乐观锁/无锁。
2026-02-27 11:21:46
370
原创 MCASP(Multichannel Audio Serial Port)接口详细概述
通过灵活配置,MCASP 可无缝适配从消费级音频设备到工业级多通道系统的各类需求,尤其适合需要高通道数和复杂时钟管理的场景。
2026-02-26 09:45:56
283
原创 内存管理三剑客:malloc vs FreeRTOS vs Linux驱动深度对比
场景推荐方案避坑指南裸机嵌入式系统malloc注意堆大小设置实时控制系统(RTOS)启用heap_4/5,监控剩余堆大小Linux字符设备驱动大内存用vmallocDMA操作配套使用DMA映射API高并发用户态程序避免直接使用glibc malloc安全关键系统静态分配+内存池禁止动态分配终极建议:在RTOS中始终使用,Linux驱动中优先选择kmalloc,通用程序考虑jemalloc替代标准malloc。理解底层机制,才能写出既高效又可靠的内存管理代码。
2026-02-24 13:57:08
556
原创 工业控制与信号传输核心概念全解析:从干湿节点到噪声振动
干湿节点是工业控制的“无声开关”,而振动与噪声分析是设备的“健康语音”。理解信号本质,才能让机器“说话”更清晰。
2026-02-24 11:42:54
399
原创 FreeModbus 库移植指南:关键修改与注意事项
移植 FreeModbus 库需要重点关注硬件抽象层(HAL)的适配。完成移植后,建议进行72小时压力测试(>10万次通信)确保稳定性,特别是在电磁干扰环境下的可靠性。
2026-02-24 11:16:55
810
原创 深入解析 FreeModbus 在嵌入式系统中的应用与数据流
协议与业务分离库处理协议解析,应用专注业务逻辑高效数据流串口中断 → 帧解析 → 缓冲区更新 → 业务分发可扩展架构新增功能只需扩展ModbusType和注册处理函数支持混合读写权限控制资源友好镜像缓冲区 + 回调机制,适合资源受限的MCU最佳实践建议将eMBPoll()放在高优先级循环中为关键寄存器添加写保护使用volatile修饰共享缓冲区在业务处理函数中实现数据验证和过滤FreeModbus 移植详解。
2026-02-24 11:05:02
603
原创 深入解析 C 语言结构体位域:以 `AdcCtrl` 为例
位域优势:节省内存、直观映射硬件寄存器。使用场景:嵌入式开发、协议解析等对内存布局有严格要求的领域。避坑指南:注意编译器差异,避免跨平台使用,优先用于硬件交互。通过合理使用位域,可显著提升底层操作的效率和可读性,但务必在明确需求场景下谨慎使用!
2026-02-24 10:57:22
287
原创 嵌入式Linux C语言开发核心技能深度指南
在嵌入式Linux开发领域,C语言是构建高效可靠系统的基石。本文将全面解析嵌入式C语言开发的核心技能树,从底层硬件操作到高级系统编程,帮助开发者构建完整的知识体系。
2026-02-12 11:25:01
364
原创 C语言复合数据类型深度解析:结构体、联合体、枚举与位域
/ 传感器数据结构体// 名称// 测量值// 时间戳// 状态标志内存布局0x0000: name[0] ... name[19] (20字节)0x0014: value (4字节)0x0018: timestamp (4字节)0x001C: status (1字节)0x001D: 3字节填充(对齐到4字节边界)struct {} split;// 设备状态枚举STATE_ERROR = 0xFF // 显式赋值fill:#333;important;
2026-02-12 10:53:11
320
原创 嵌入式Linux内核深度对比:i.MX6ULL、全志T113-T与RK3568平台迁移指南
选择i.MX6ULL当项目需要高可靠性工业级方案硬件成本敏感且无需复杂多媒体已有NXP生态开发经验选择全志T113-T当需要高性价比多媒体方案开发周期紧张且功能需求明确偏好中文社区支持选择RK3568当需要AI加速或4K视频处理系统要求高性能多核处理计划长期迭代升级产品迁移验证清单时钟树配置验证(特别是休眠唤醒时序)DMA内存对齐检查(i.MX需32字节对齐)中断映射表一致性确认电源域隔离测试启动时间测量(从复位到用户空间)
2026-02-12 10:34:16
710
原创 Linux驱动开发全面指南:从基础到实战
模块化设计单一职责原则最小权限原则接口一致性错误处理黄金法则// 1. 释放已分配资源// 2. 打印错误信息// 3. 返回错误码资源管理原则谁申请谁释放初始化与释放对称使用devm_托管资源性能与安全平衡关键路径优化输入数据验证边界检查跨平台考虑使用设备树抽象硬件差异条件编译处理平台特性提供通用接口“编写Linux驱动就像在悬崖边跳舞——既要接近硬件极限,又要保持系统稳定。每一行代码都需谨慎,因为驱动错误可能导致整个系统崩溃。
2026-02-11 14:56:19
380
原创 深入解析Pinmux:芯片引脚复用的核心技术
fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;功能请求动态配置应用程序Pinmux管理层物理引脚功能灵活性:实现有限引脚的无限可能电气可控性:精细调节信号质量系统集成度:支持复杂SoC设计成本效益:减少芯片封装成本“在嵌入式世界中,没有多余的引脚,只有未被充分利用的引脚资源。Pinmux是连接物理限制与功能需求的桥梁。
2026-02-10 13:26:52
505
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅