PCB 设计最佳实践 2026

引言 PCB(Printed Circuit Board)设计是硬件开发的核心环节,直接决定产品的性能、可靠性和生产成本。一个优秀的 PCB 设计需要平衡电气性能、机械结构、散热、EMC、可制造性等多个维度。 本文基于 10+ 年硬件工程实践经验,结合 IPC 标准、主流 EDA 工具最佳实践,系统讲解 PCB 设计的全流程要点。 你将学到: ✅ 完整的 PCB 设计流程与检查清单 ✅ 原理图设计的模块化方法与常见陷阱 ✅ 布局布线的核心原则与实战技巧 ✅ EMI/EMC 设计的底层逻辑与解决方案 ✅ 多层板 stackup 设计与阻抗控制 ✅ 生产文件输出与工厂对接要点 PCB 设计完整流程 标准设计流程(7 步法) 1.需求分析 → 2.原理图 → 3.选型 → 4.布局 → 5.布线 → 6.DRC → 7.输出 规格书 原理图 BOM 布局图 布线图 报告 Gerber 各阶段关键输出 阶段 输入 输出 评审要点 1. 需求分析 产品规格、功能要求 系统框图、关键器件清单 功能完整性、成本目标 2. 原理图设计 系统框图、器件 datasheet 原理图、网表、初步 BOM 电气连接、参数计算 3....

April 4, 2026 · 3 min · 👁️ 3 · alexant · 硬件设计

嵌入式开发:Embedded Machine Learning TinyML 完整教程

引言 TinyML(Tiny Machine Learning)是嵌入式系统与机器学习的交叉领域,专注于在微控制器等低功耗边缘设备上部署机器学习模型。随着 IoT 设备的普及和边缘计算需求的增长,TinyML 正在成为 2026 年嵌入式开发的核心技能之一。 与传统云端机器学习不同,TinyML 将 AI 推理能力带到设备端,实现低延迟、低功耗、离线运行的智能功能。本文将带你从理论基础到实战部署,完整掌握 TinyML 开发流程。 什么是 TinyML? 定义与特点 TinyML 是机器学习的一个子集,专注于将训练好的模型部署到微控制器和其他低功耗边缘设备上。其核心特点包括: 特性 说明 超低功耗 通常在毫瓦级功率预算下运行 小内存占用 模型大小通常在几 KB 到几 MB 低延迟推理 本地推理,无需云端通信 离线运行 不依赖网络连接,隐私性更好 低成本 运行在几美元的微控制器上 TinyML vs 传统机器学习 传统 ML 流程: 传感器 → 数据上传 → 云端服务器 → 模型推理 → 结果返回 → 设备执行 ↑________________________________↓ 高延迟、高带宽、隐私风险 TinyML 流程: 传感器 → 本地推理 → 设备执行 ↑___________↓ 低延迟、零带宽、隐私安全 典型应用场景 智能穿戴设备:手势识别、活动分类、健康监测 工业 IoT:预测性维护、异常检测、振动分析 智能家居:语音唤醒词检测、存在感知、能耗优化 农业传感器:病虫害识别、土壤分析、灌溉决策 消费电子:降噪耳机、智能相机、手势控制 TinyML 开发全流程 阶段一:模型开发与训练 1....

April 4, 2026 · 7 min · 👁️ 13 · alexant · 嵌入式

嵌入式脚本语言全面对比:MicroPython、Lua、MJS、Forth 谁更适合你的 MCU?

引言 在嵌入式开发中,C/C++ 长期占据主导地位。但对于快速原型开发、教育场景或需要灵活性的应用,脚本语言提供了更高效的开发体验。 本文深度对比 8 种主流嵌入式脚本语言,从资源占用、性能、编程方式、生态系统等维度进行全面评测,帮你选择最适合项目的方案。 嵌入式脚本语言资源占用对比 资源占用 (KB) 0 100 200 300 400 500 256 80 60 350 200 8 4 120 MicroPython Lua MJS CircuitPython Espruino Forth TinyBasic Scheme 注:ROM 占用数据基于典型配置(含标准库),实际大小因功能裁剪而异 8 种嵌入式脚本语言 ROM 占用对比 参评语言概览 语言 发布时间 设计目标 典型 ROM 典型 RAM MicroPython 2014 Python 嵌入式移植 256KB 16KB+ Lua 1994 轻量级脚本 80KB 8KB+ MJS 2016 超轻量 JavaScript 60KB 10KB+ CircuitPython 2017 教育友好 Python 350KB 32KB+ Espruino 2013 低功耗 JavaScript 200KB 16KB+ Forth 1970 极简交互式 8KB 1KB+ TinyBasic 1975 最简 BASIC 4KB 512B+ Scheme 1975 函数式 Lisp 120KB 16KB+ 1....

April 2, 2026 · 10 min · 👁️ 15 · alexant · 嵌入式

RISC-V 嵌入式开发完全指南 2026

引言 RISC-V(读作"Risk Five")是一个基于精简指令集(RISC)原则的开源指令集架构(ISA)。它由加州大学伯克利分校于 2010 年设计,如今已成为嵌入式领域的新星。 为什么选择 RISC-V? 开源免费:无需授权费,可自由使用和商业 模块化设计:基础 ISA + 可选扩展(M/A/F/D/C) 生态系统:2026 年已有超过 100 亿颗 RISC-V 芯片出货 自主可控:不受地缘政治影响,供应链安全 本文从架构原理到实战项目,带你全面掌握 RISC-V 嵌入式开发。 RISC-V 架构核心 1.1 指令集结构 基础 ISA(必选) RV32I(32 位) / RV64I(64 位) / RV128I(128 位) M 扩展 整数乘除法 A 扩展 原子操作 F 扩展 单精度浮点 D 扩展 双精度浮点 C 扩展 压缩指令 片上外设(可选) CLIC(中断控制器)| PLIC | UART | SPI | I2C | GPIO | Timer RISC-V 指令集结构 基础指令集(必选其一): RV32I:32 位整数基础,最常用(ESP32-C3、GD32V) RV64I:64 位整数,高性能应用(StarFive JH7110) RV128I:128 位,未来扩展 标准扩展(可选):...

April 2, 2026 · 6 min · 👁️ 4 · alexant · 嵌入式

嵌入式 MQTT 物联网开发完全指南 2026

引言 MQTT(Message Queuing Telemetry Transport)是物联网领域最流行的轻量级消息协议。它基于发布/订阅模式,具有低功耗、低带宽、高可靠的特点,非常适合资源受限的嵌入式设备。 本文从协议原理到实战项目,带你全面掌握嵌入式 MQTT 开发。 MQTT 协议核心概念 1.1 架构模型 MQTT Broker EMQX / Mosquitto ESP32 传感器 发布:temp/humidity STM32 控制器 发布:status/alert 手机 App 订阅:temp/humidity 云端服务 订阅:所有主题 本地网关 订阅:status/alert MQTT 发布/订阅架构 核心组件: Broker:消息中转站(EMQX、Mosquitto、HiveMQ) Publisher:消息发布者(传感器、设备) Subscriber:消息订阅者(App、云端、网关) Topic:消息主题(如 home/living-room/temp) 1.2 QoS 服务质量等级 QoS 名称 说明 应用场景 0 At most once 最多一次,不保证到达 传感器周期性数据 1 At least once 至少一次,可能重复 控制指令、状态更新 2 Exactly once 恰好一次,最可靠 计费、关键告警 1.3 Topic 命名规范 ✅ 推荐格式: Topic 示例 说明 home/living-room/temperature 设备类型/位置/参数 factory/line1/motor/speed 工厂/产线/设备/参数 agric/greenhouse/01/humidity 行业/区域/编号/参数 ❌ 避免: Topic 示例 问题 temp 太模糊,无法扩展 home/temp 缺少层级 sensor_001/data 语义不明确 开发环境搭建 2....

April 2, 2026 · 6 min · 👁️ 4 · alexant · 嵌入式

嵌入式 JavaScript 引擎 MJS 完全指南 2026

引言 JavaScript 通常运行在浏览器或 Node.js 环境中,但在资源受限的嵌入式设备上运行 JavaScript 也是可能的。MJS(Mongoose JavaScript) 是 Cesanta 公司开发的超轻量级 JavaScript 引擎,专为嵌入式系统设计。 代码大小:仅 60-100KB ROM,10-30KB RAM 性能:基于字节码解释器,执行效率高 特性:支持 ES5 核心语法、异步回调、硬件访问 本文从架构原理到实战项目,带你全面掌握嵌入式 JavaScript 开发。 MJS 架构解析 1.1 整体架构 JavaScript 应用代码 GPIO、I2C、SPI、网络、定时器 MJS 核心引擎 词法分析器 语法分析器 字节码生成器 虚拟机解释器 垃圾回收 FFI(Foreign Function Interface) C 函数绑定、硬件抽象层、系统调用 ESP32 HAL GPIO、UART、I2C STM32 HAL GPIO、SPI、ADC POSIX 层 Linux、macOS MJS 引擎架构分层 核心组件: 词法/语法分析器:解析 JavaScript 源代码 字节码生成器:编译为紧凑的字节码格式 虚拟机解释器:执行字节码,管理堆栈 垃圾回收器:自动内存管理(标记 - 清除算法) FFI 接口:调用 C 函数,访问硬件资源 1.2 内存模型 MJS Heap(堆内存) Object A {x: 1, y: 2} Array B [1, 2, 3] Function C function(){} Object D unreachable Root Set ⚠️ 不可达对象 ✓ 存活对象 MJS 垃圾回收机制 内存管理特点:...

April 2, 2026 · 8 min · 👁️ 3 · alexant · 嵌入式

嵌入式 Rust 编程完全指南 2026

引言 嵌入式开发长期被 C/C++ 主导,但内存安全问题频发。Rust 凭借零成本抽象和编译期内存安全,正在成为嵌入式开发的新选择。STM32、ESP32、nRF 等主流 MCU 都已支持 Rust。 本文从零开始,带你掌握嵌入式 Rust 开发的核心技能。 为什么选择嵌入式 Rust? 1.1 内存安全 without GC // C 代码:可能的空指针解引用 int *ptr = get_sensor_data(); int value = *ptr; // ❌ 如果 ptr 为空,崩溃 // Rust 代码:编译期检查 let data = get_sensor_data(); let value = *data; // ✅ Option 类型强制处理 None 情况 1.2 所有权系统防止数据竞争 // 多任务访问共享资源 static mut SENSOR_DATA: u32 = 0; // ❌ C 的全局变量,不安全 // Rust 使用 Mutex 保护共享数据 static SENSOR_DATA: Mutex<u32> = Mutex::new(0); // ✅ 编译期保证线程安全 1....

April 2, 2026 · 5 min · 👁️ 4 · alexant · 嵌入式

嵌入式系统安全开发指南 2026

引言 本文基于 2026 年最新行业资料整理,涵盖 embedded security best practices 的核心概念、开发流程和实战技巧。 嵌入式安全概述 随着 IoT 设备普及,嵌入式系统安全变得至关重要。本文介绍嵌入式安全开发的核心原则和实践。 安全启动 安全启动(Secure Boot)确保设备只运行可信固件: // 验证固件签名 bool verify_firmware_signature(const uint8_t *firmware, const uint8_t *signature, const uint8_t *public_key) { // 使用 ECC 或 RSA 验证 return crypto_verify(firmware, signature, public_key); } 加密通信 使用 TLS/DTLS 保护设备与云端通信: // mTLS 配置 mbedtls_ssl_config conf; mbedtls_ssl_config_init(&conf); mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_DATAGRAM, MBEDTLS_SSL_PRESET_DEFAULT); 安全存储 敏感数据(密钥、证书)应加密存储: // 使用 AES-256 加密 mbedtls_aes_context aes; mbedtls_aes_init(&aes); mbedtls_aes_setkey_enc(&aes, key, 256); mbedtls_aes_crypt_cbc(&aes, MBEDTLS_AES_ENCRYPT, length, iv, input, output); 防攻击技术 防侧信道攻击:恒定时间算法 防物理攻击:加密 JTAG/SWD 接口 防重放攻击:时间戳 + 随机数 安全开发生命周期 需求分析 → 识别安全需求 设计 → 威胁建模 实现 → 安全编码规范 测试 → 渗透测试 部署 → 安全配置 维护 → 安全更新 参考资料 Best Practices for Embedded Security: Top Tips Explained - Witekio Embedded Security Testing: Best Practices & Challenges 2024 Key Strategies for Embedded Systems Security - Digi International 本文基于网络公开资料整理,结合嵌入式开发实践经验编写。

April 2, 2026 · 1 min · 👁️ 5 · alexant · 嵌入式

ARM Cortex-M 内存屏障与原子操作详解

引言 在多任务和中断驱动的嵌入式系统中,数据竞争和内存访问顺序问题是导致系统不稳定的常见原因。本文深入探讨 ARM Cortex-M 处理器的内存模型、原子操作实现机制,以及内存屏障指令(DMB/DSB/ISB)的实际应用场景。 1. ARM Cortex-M 内存模型 1.1 弱内存序(Weak Memory Ordering) ARM Cortex-M 采用弱内存序模型,这意味着: CPU 可以重新排序内存访问指令以提高性能 不保证程序中的内存访问顺序与实际执行顺序一致 多核或多主设备系统中可能出现数据不一致 示例问题: // 线程 1 flag = 1; // 步骤 1 data = 0x1234; // 步骤 2 // 线程 2 while (flag == 0); // 等待 flag read = data; // 期望读到 0x1234 问题:由于内存重排序,线程 2 可能在 data 写入之前就读到 flag==1,导致读到旧数据。 1.2 Cortex-M 内存类型 内存类型 特性 使用场景 Normal Memory 可缓存、可缓冲 SRAM、外部 RAM Device Memory 不可缓存、顺序访问 外设寄存器 Strongly Ordered 严格顺序、无缓冲 共享内存区域 2....

March 31, 2026 · 3 min · 👁️ 7 · alexant · 嵌入式

FreeRTOS 任务调度器源码分析与实时性优化

引言 FreeRTOS 是最流行的嵌入式实时操作系统,广泛应用于 IoT、工业控制和消费电子。很多开发者会用 FreeRTOS,但对其内部机制一知半解,遇到优先级反转、栈溢出等问题时束手无策。 本文深入 FreeRTOS 内核源码,剖析任务调度器的工作原理,帮助你写出更高效、更可靠的实时系统代码。 任务调度器架构 1.1 核心组件 应用层任务 任务管理 信号量 队列 互斥量 任务调度器 (Scheduler) 端口层 (Port) 上下文切换、栈帧管理、中断处理 FreeRTOS 架构层次图 1.2 就绪列表 FreeRTOS 使用优先级位图管理就绪任务: // tasks.c static UBaseType_t uxReadyReadyLists[ configMAX_PRIORITIES ]; static UBaseType_t uxTopReadyPriority; // 每个优先级有一个就绪列表 pxReadyTasksLists[ priority ] // 位图快速查找最高优先级 uxTopReadyPriority = __clz( uxReadyReadyLists ); // ARM CLZ 指令 任务切换机制 2.1 上下文切换流程 // port.c - Cortex-M4/M7 实现 void xPortPendSVHandler( void ) { __asm volatile ( "ldr r0, =pxCurrentTCB " "ldr r1, [r0] " // 获取当前 TCB "mrs r2, psp " // 保存 PSP "stmdb r2!...

March 31, 2026 · 3 min · 👁️ 4842 · alexant · 嵌入式