自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 电源平面分割以及电源完整性(2)

文章摘要:本文系统阐述了电源系统设计的关键要素,包括源头设计、路径规划和接受端处理三大部分。源头设计需关注电压稳定性、电流承载、去耦电容布局、散热管理和输入滤波;路径设计重点包括叠层规划(强调20H原则)、电源分割和低阻抗实现;接受端设计则聚焦供电芯片的引脚处理和去耦电容配置,提出大小电容配合使用、并联降电感等优化方法。全文通过具体参数(如线宽≥8mil、层间距≤5mil)和布局原则(电容近引脚、错位打孔等),为电源完整性设计提供了实用指导方案。

2026-07-09 11:29:46 512

原创 电源平面分割以及电源完整性

电源完整性(PI)是确保电子系统稳定供电的关键技术,主要研究电源分配网络(PDN)的电压稳定性、电流承载能力、阻抗控制等核心问题。PDN包含从电源模块到芯片的完整路径及去耦电容等元件,其设计需解决寄生参数影响,满足高频、低电压芯片的需求。PI分析通过评估RLC参数优化设计,涉及电源结构基础、PDN阻抗控制(目标阻抗准则)及负载端稳压要求。具体关注三方面:电源模块布局(VRM)、内层平面设计(降低阻抗)和芯片端电压容差(±5%),从而避免电压跌落、噪声干扰和EMC问题,提升系统可靠性与信号完整性。

2026-07-09 09:39:48 227

原创 一文详解信号完整性(3)--规避SI问题的具体实现方法

高速PCB信号完整性设计要点 本文围绕高速PCB设计中的信号完整性问题,总结了以下关键设计要点: 阻抗控制:确保传输线阻抗均匀,采用端接匹配和统一参考平面,避免跨分割问题。 阻抗连续性:减少过孔使用,优化走线方式(如菊花链布线),避免直角走线和阻抗突变点。 串扰抑制:通过3W间距、地线隔离、差分信号、屏蔽层等方法降低串扰影响。 信号衰减与延时:选用低损耗材料,优化走线几何形状,进行等长处理以降低信号偏移。 叠层与电源设计:优化电源/GND平面布局,保持平面连续性,合理分割电源区域,控制层间距离。 过孔优化:

2026-07-07 17:26:52 399

原创 一文详解信号完整性(2)

信号完整性(SI)关键问题分析及解决方案 本文分析了信号完整性中的主要问题: 振铃现象:由反射引起的信号振荡,可通过端接减小 非单调性:信号波形出现异常波动 串扰:分为近端(NEXT)和远端(FEXT)串扰 信号延迟:受介质特性、线长等因素影响 电源噪声:包括同步切换噪声(SSN)、地弹和轨道塌陷 解决方案包括: 阻抗控制设计 增加信号间距 优化叠层结构 完善电源/GND设计 合理使用去耦电容 优化过孔设计 这些措施可有效提升高速电路的信号完整性。

2026-07-07 14:24:20 352

原创 一文详解信号完整性(1)

信号完整性(SI)是高速数字电路设计中确保信号准确传输的关键技术,涉及信号传输优化和电源完整性(PI)。随着电子设备频率提升,SI问题日益突出,主要表现为时序、噪声和电磁干扰(EMI)。常见问题包括反射、串扰、地弹等,可能导致电路不稳定。高速信号通常定义为传播延时大于上升时间一半的信号。参考平面(多为地平面)为信号提供回流路径,电源平面也可作为参考但需注意跨分割问题。信号过冲和下冲是因寄生参数导致的瞬态现象,需通过阻抗匹配和布局优化控制。传输线是考虑寄生参数的导体结构,其设计需确保信号与回流路径的匹配。通过

2026-07-05 23:52:49 683

原创 探秘MIPI接口:高速低功耗的移动显示黑科技

本文介绍了MIPI接口(Mobile Industry Processor Interface)在移动设备显示技术中的应用与设计要点。MIPI DSI是一种高速串行接口标准,支持视频数据和控制指令传输,具有4组数据通道和1组时钟通道,适用于小型相机等移动设备。文章详细阐述了MIPI接口的器件选型、原理图设计及PCB布局布线规范,包括核心连接器选型(如30-pin浮动型B2B连接器)、电源管理系统设计(DCDC与LDO供电方案选择)、差分阻抗控制(100Ω±10%)、信号隔离和抗干扰措施等关键技术要点,为MI

2026-07-05 23:29:51 648

原创 BGA扇出设计指南:从外圈到内层的布线策略

本文系统阐述了BGA封装在高速PCB设计中的扇出策略。针对最外两圈Ball提出具体扇出方案:最外圈采用4mil线宽顶层直出,第二圈通过栅格对齐确保走线居中。对于内圈Ball,强调规则化换层设计,建议每2-4排放置换层过孔并保留空排以维持地/电源平面连续性,此举可改善SI/PI性能和散热。同时规范了内层走线3.5mil线宽要求,通过栅格精确定位过孔。全文指出合理的扇出设计需兼顾走线效率与平面完整性,是高速PCB设计的关键技术。

2026-07-03 22:09:28 365

原创 从零开始的硬件工程师生活(5)——一文讲透关于PCB过孔扇出

本文总结了PCB设计中过孔使用与布局的关键要点:1.过孔需连接多层信号,避免单层连接产生STUB;2.过孔类型选择应考虑板厚、孔径比和载流能力,常规推荐8/16、10/22等尺寸;3.布局时需注意间距(中心距≥1mm)、扇出规则(BGA对角线中心打孔)和回流路径(差分信号加GND过孔);4.特殊处理包括板边GND过孔环、大焊盘十字连接、消除孤铜和尖角;5.针对BGA和连接器,强调地孔就近布置、电源通道保留及滤波电容优化。文末指出设计应兼顾生产工艺与信号完整性要求。

2026-07-03 21:56:53 230

原创 从零开始的硬件工程师生活(4)——一文讲透PCB走线等长规范要求

1、在做PCB 设计时,为了满足某一组所有信号线的总长度满足在一个公差范围内,通常要使用蛇形走线将总长度较短的信号线绕到与组内最长的信号线长度公差范围内,这个用蛇形走线绕长信号线的处理过程,就是我们俗称的PCB 信号等长处理。处理不能太过散乱,应尽量集中处理,保证其美观性,原则上是处理完一根信号后,第二根先修线挨到其旁边,再对第二根进行等长处理,以保证空间的利用率及整体设计美观性。转角长度不小于线宽的1.5倍,一般控制在6-10mi大小,如线宽4mil,转角大小控制在6mil,转角不能太小,如图所示。

2026-07-03 08:30:00 520

原创 从零开始的硬件工程师生活(3)——一文讲透通用PCB设计规范

本文总结了31条PCB设计规范要点,主要涉及布线工艺、器件布局、信号完整性等关键设计要求。具体包括:IC管脚出线宽度限制、焊盘连接规范、高压信号间距、DDR布线拓扑确认、金手指区域处理、瓶颈位置规划、耦合/端接电阻位置、地通孔设置、敏感器件避让、过孔伴随处理、连接器接地间距、BGA区域处理、包地线设计等。其中特别强调高速信号(如时钟、复位等)需采用包地处理,包地线需间隔500mil打地孔,并详细说明了包地线距与信号线宽的比值要求。这些规范对保证PCB信号质量、降低干扰具有重要指导意义。

2026-07-02 23:13:25 240

原创 从零开始的硬件工程师生活(2)——一文讲透通用PCB设计规范

本文摘要: PCB设计布线规范主要包含线宽、线距和布线方式三大要求。线宽设计需考虑工厂加工能力、阻抗匹配、载流能力等因素,常规线宽建议4mil以上,特殊信号需加粗处理;线距应满足4mil以上的基本要求,重要信号需遵循3W规则,相邻层避免平行布线;布线方式要求避免直角走线、保持参考层连续性、减小环路面积等,同时需注意焊盘出线方向、残桩效应等问题。规范还针对特殊场景如BGA、HDI、射频信号等提出了具体设计建议,强调设计需兼顾信号完整性与可制造性。

2026-06-18 07:34:15 283

原创 从零开始的硬件工程师生活(1)——一文讲透通用PCB设计规范

文章摘要: 作者分享了自己从特斯拉程序员转型硬件工程师的心路历程,坦言渴望“亲手触摸自己设计的东西”是核心动力。作为技术干货系列的开篇,文章聚焦PCB布局规范,强调预规划、模块分区、信号隔离、可制造性等关键原则,如格点对齐、禁布区设置、高压/模拟信号分离、BGA器件间距等,以规避EMI、散热等问题。文中穿插实用技巧(如用40mil辅助线规划模块)和行业经验(如极性器件方向统一),为转行或知识生疏的工程师提供具体指导,语言犀利直白,突出“少走弯路”的务实风格。

2026-06-15 23:53:23 289

原创 从硬件中断到分布式协程:全景解构高并发机制与 C / Golang 的巅峰对决

本文深入探讨了高并发技术在互联网后端与嵌入式系统中的不同实现形式。文章首先厘清了并发与并行的本质区别,指出高并发的核心在于资源复用最大化。随后分析了新能源汽车、物联网网关等典型高并发应用场景,并详细解构了硬件层(ADC/DMA)和软件层(无锁队列/协程)的高并发实现原理。通过对比C语言与Golang在高并发实现上的差异,揭示了前者在硬实时控制、后者在大规模分布式处理方面的优势。文章最终指出,技术选型应基于具体场景需求,硬实时控制选C语言,海量结构化数据处理选Golang。全文贯通底层硬件与上层软件,为工程师

2026-06-15 23:17:36 338

原创 GitHub Action工作流语法

本文摘要介绍了GitHub Actions工作流配置文件的核心结构和常用字段。主要内容包括: 基础结构包含name、on、jobs三个主要部分 jobs部分详细说明了运行环境(runs-on)、步骤(steps)及其子字段 步骤配置包含使用Action(uses)、运行命令(run)、参数传递(with)、环境变量(env)等 高级功能包括条件判断(if)、并行策略(strategy)、权限控制(permissions)、任务依赖(needs) 其他实用功能如容器服务(services)、超时控制(time

2025-11-08 23:06:47 851

原创 Go语言入门(22)-通道 channel

本文介绍了Go语言中通道(channel)的基本使用方法和特性。主要内容包括:1)通道的创建和基本操作(发送/接收数据);2)使用select语句处理多个通道,结合time.After实现超时控制;3)nil通道的特性及其应用场景。文中通过两个示例代码演示了goroutine间通过通道通信,以及select语句的典型用法。最后特别指出,未初始化的nil通道会永久阻塞,但在某些场景下可以巧妙利用这一特性控制程序流程。

2025-10-08 20:00:28 382

原创 Go语言入门(22)-goroutine

Go语言中,goroutine是轻量级的并发执行单元,创建效率高且使用简单。通过go关键字即可启动goroutine,实现并发执行。与顺序代码不同,goroutine的执行顺序不确定,且需要解决主程序等待问题。示例展示了goroutine的基本用法,但存在执行时间不确定的缺陷,后续可通过通道机制解决同步问题。goroutine采用分时技术实现并发,而非真正的并行执行。

2025-10-06 12:10:07 322

原创 Go语言入门(21)-错误处理

Go语言允许函数和方法同时返回多个值。按照惯例,函数在返回错误时,最后边的返回值应用来表示错误。调用函数后,应立即检查是否发生错误。如果没有错误发生,那么返回的错误值为nil。那如何优雅地进行错误处理/减少错误处理代码呢?有一种策略是:将程序中不会出错地部分和包含潜在错误隐患地部分隔离开来。对于不得不返回错误地代码,应尽力简化相应地错误处理代码。再写入文件时,可能会出错,例如:路径不正确、权限不够、磁盘空间不够等。。。文件写入完毕后,必须被关闭,确保文件被刷到磁盘上,避免资源的泄露。下面看一个例子。

2025-10-06 10:29:43 1022

原创 Go语言入门(20)-nil

Go语言中nil表示零值,适用于指针、slice、map和接口类型。它比其它语言的null更友好但需谨慎使用,解引用nil指针会导致崩溃。nil作为未初始化的默认值,可以被range、len等内置函数处理。接口变量仅在类型和值均为nil时才等于nil。文章还探讨了替代nil指针的存储方案。

2025-10-05 22:05:05 460

原创 Go语言入门(19)-指针(下)

Go语言中参数传递均为值传递,函数接收的是参数的副本。指针作为参数时,函数获得地址副本,可通过解引用修改原值。方法接收者处理指针与参数类似,调用时会自动取地址。结构体支持获取字段内存地址的内部指针特性。map等集合类型是隐式指针,传递时不会被复制。slice本质是包含数组指针、容量和长度的结构体,传递时可通过内部指针修改底层数组。指针与接口的结合使用也体现了Go对指针的灵活运用。

2025-10-04 17:35:10 191

原创 Go语言入门(18)-指针(上)

本文介绍了Go语言中指针的基本概念和使用方法。主要讲解了地址操作符(&)和解引用操作符(*)的功能,并通过示例演示了指针变量的声明、赋值和比较。文章还详细说明了指向结构体、数组、slice和map的指针特性,指出结构体和数组会自动解引用,而slice和map则需要显式解引用。通过多个代码示例,展示了指针在Go语言中的实际应用场景和注意事项。

2025-10-04 10:51:43 280

原创 Go语言入门(17)-接口

Go语言接口关注行为而非状态,通过定义方法集合来隐式实现。任何类型只要满足接口要求的方法,就自动实现该接口,无需显式声明。示例展示了如何定义talker接口,让martian和laser类型通过实现talk()方法来满足接口。文章还演示了stardater接口的运用,说明内置类型和自定义类型如何通过接口无缝协作。Go鼓励使用简单接口(常以-er结尾)促进组合而非继承,如fmt.Stringer接口。这种设计使组件界限清晰,提高了代码灵活性。

2025-10-03 10:54:13 199

原创 Go语言入门(16)-组合和转发

Go语言通过结构体实现对象组合,支持嵌入特性实现方法转发。文章展示了组合的多种类型,包括包含其他结构体作为字段的标准组合方式。示例代码演示了如何将temperature和location结构体组合到report中,并通过嵌入实现方法转发。组合提供了比继承更简单灵活的对象复用方式,是Go语言面向对象编程的核心机制之一。

2025-09-02 11:22:56 243

原创 Go语言入门(15)-Class

摘要:Go语言通过struct和方法实现面向对象功能,虽然没有class和继承。文中展示了用struct表示坐标,并通过decimal()方法进行经纬度计算。构造函数通常以new或New开头,如示例中的newLocation()。errors.New()是典型的构造函数命名方式,简洁且可导出。Go通过struct与方法组合,能够实现类似class的功能。

2025-09-02 10:52:36 258

原创 Go语言入门(14)-struct

本文介绍了Go语言中结构体(struct)的基本用法。主要内容包括:1)结构体的定义和初始化,支持匿名结构体和类型复用;2)两种初始化方式:按字段顺序或成对字段值;3)结构体复制和组成slice;4)将结构体编码为JSON格式,需注意字段名首字母大写才能导出。文中通过多个代码示例演示了这些特性,包括位置坐标处理、JSON编码等实际应用场景,展示了结构体在组织不同类型数据方面的灵活性。

2025-08-29 15:08:38 263

原创 Go语言入门(13)-map

Go语言中map是一种键值对集合,支持快速查找和任意类型key。声明时需指定key和value类型,通过make函数可预分配空间。map在赋值或传递时不会创建副本,而是共享底层数据。if-ok语句可用于判断map中key是否存在、接口类型断言和检查channel状态。此外,map还可与slice结合实现数据分组功能。示例代码展示了map的基本操作、if-ok语句的多种应用场景以及如何用map对温度数据进行分组处理。

2025-08-29 14:18:40 340

原创 Go语言入门(12)-更大的切片

本文介绍了Go语言中切片(slice)的相关操作:1. 切片的基础特性,包括长度(length)和容量(capacity);2. 三索引切片操作可以限制新建切片的容量;3. 使用make函数预分配切片空间以提高性能;4. 可变参数函数的声明和使用方法。文中通过多个代码示例演示了切片操作、容量控制、预分配策略以及可变参数函数的实现方式,并配有dump函数输出切片信息辅助理解。

2025-08-29 12:51:05 223

原创 Go语言入门(11)-slice(切片)

Go语言中slice是对数组的引用视图,使用半开区间语法(如planets[0:4])切分数组,包含起始索引但不含结束索引。省略起始/结束索引时默认为数组首尾。slice可以用于数组和字符串切分,字符串切分按字节计算。创建slice的方式包括数组切分(如dwarfArray[:])或直接声明(如[]string{"a","b"})。slice可作为底层类型绑定方法,如sort.StringSlice(planets).Sort()实现排序。切分操作不会修改原数组,仅创

2025-08-21 15:20:14 279

原创 Go语言入门(10)-数组

数组的长度可由内置函数len来确定。在声明数组时,未被赋值元素的值是对应类型的零值。可以在复合字面值里使用“...”作为数组的长度,这样,Go编译器会自动计算出数组的元素数量。数组也是一种值,函数通过值传递来接受参数。所以数组作为函数的参数就非常的低效。数组的长度也是数组类型的一部分(尝试将长度不符的数组作为参数传递,将会报错)无论数组赋值给新的变量还是将它传递给函数,都会产生一个完整的数组副本。数组中的每个元素都可以通过“[]”和一个从0开始的索引进行访问。无论哪种方式,数组的长度都是固定的。

2025-08-20 16:43:11 247

原创 Go语言入门(9)-一等函数

摘要:本文展示了Go语言中将函数赋给变量的用法。通过定义kelvin类型和fakeSensor/realSensor函数,演示了如何将函数赋值给变量sensor并进行调用。文中还介绍了函数类型声明、匿名函数立即执行的方法,以及闭包的概念。示例代码包括随机温度生成和带偏移量的校准函数,展示了通过闭包捕获外部变量的特性。这些技术可以简化代码并提高灵活性,特别是在需要动态切换函数实现或创建定制化函数时。

2025-08-18 11:03:26 264

原创 Go语言入门(8)-方法

Go语言允许使用type关键字声明新类型,如type Celsius float64,这会创建一个与基础类型(float64)具有相同行为但类型不同的新类型,提高代码可读性和类型安全。新类型支持基础类型的运算操作,但不同类型不能混用。Go的方法比传统面向对象语言更灵活,可以将方法与包内任意类型(除预声明类型)关联,为类型添加特定行为。这种机制兼顾了类型安全性和方法扩展的便利性。

2025-08-15 14:14:41 205

原创 Go语言入门(7)-函数

Go语言函数声明与使用摘要:函数通过func关键字声明,支持多参数同类型简写(如func Unix(sec, nsec int64))。函数可返回多个值,返回值可命名或省略(如(int, error))。可变参数函数使用...语法(如func Println(a ...interface{}))。示例展示了温度转换函数kelvinToCelsius的实现与调用,体现Go函数按值传递参数和同包内直接调用的特性。

2025-08-15 13:00:20 191

原创 Go语言入门(6)-类型转换

本文介绍了Go语言中的类型转换注意事项。主要内容包括:1)数值类型转换时需检查范围防止环绕行为;2)rune/byte与string的相互转换方法;3)使用strconv包的Itoa和Atoi函数进行数值与字符串的转换,其中Atoi需处理可能的错误;4)布尔类型的转换和条件判断,包括使用Sprintf格式化输出。文章强调Go是静态类型语言,转换时需特别注意类型兼容性和错误处理。

2025-08-15 10:27:22 242

原创 Go语言入门(5)-多语言文本

摘要:本文介绍了Go语言中字符串和字符的相关概念。字符串字面值可通过``实现原始字符串输出,避免转义字符处理。Unicode字符用codepoint表示,Go中rune是int32别名用于存储Unicode,byte是uint8别名用于ASCII字符。字符字面值用单引号括起,默认为rune类型。字符串可变赋值但内容不可变。内置函数len()可计算字符串字节数,这些函数无需导入即可直接使用。

2025-08-12 16:21:56 163

原创 Go语言入门(4)-整数

本文介绍了整数类型的基本分类和特性。整数分为有符号和无符号两种,共8种类型,从8位到64位不等,每种类型都有相应的取值范围和存储大小。文章还介绍了printf()函数中打印数据类型(%T)和十六进制数(%x)的方法,包括设置最小宽度和填充的格式控制。特别说明了整数"环绕"现象,即当数值超出类型范围时会从最小值重新开始。通过示例代码展示了如何输出颜色的十六进制表示,以及整数环绕的具体表现。

2025-08-12 14:09:25 147

原创 Go语言入门(3)-实数

若没有指定宽度,就按照数值实际的位数进行显示。从上方示例可以看到,浮点类型不适合用于金融类算法,为了尽量最小化舍入错误,建议先做乘法,再做除法。使用Printh或println打印浮点类型的时候,默认的行为是尽可能的多显示几位小数。如果不想这样,就使用printf函数,结合%f格式化动词来指定显示小数的位数。在Go语言中,想要使用单精度类型,必须在声明变量时指定该类型。最后要说的是,实际编码中,应尽量不使用浮点型数计算。宽度:会显示出的最少字符个数(包含小数点和小数)精度:小数点后边显示的位数。

2025-08-12 13:29:30 241

原创 Go语言入门(2)

摘要:Go语言通过var声明变量可自动推断类型,简化编码。其switch语句支持fallthrough执行下一case,for循环提供短声明方式减少代码量。if和switch同样支持短声明,如if num := rand.Intn(3); num == 0。rand.Intn()函数可生成随机数,time.Sleep()实现延时功能。这些特性使Go在流程控制上更简洁高效。

2025-08-11 18:45:44 174

原创 Go语言入门(1)

与C语言#include <stdio.h>+int main()不同,在Go语言中,利用package main、import “xx”和 func main()来构成最基本的编程格式,“import”代表导入库,“fmt”就是库的名字,常用到的print家族函数(print、printf、println)均来自这个库,调用库中函数时,需要利用“.”符号进行连接。比如我的文件名是main.go,要输入的内容就是go run main.go(不要忘记空格),然后回车。声明:本文默认已成功安装编程环境。

2025-08-11 17:48:01 180

原创 初识Go语言 (未完待续)

Google作为Go语言的主推者,并没有简简单单地把语言推给开源社区了事,它不仅组建了一 个独立的小组全职开发Go语言,还在自家的服务中逐步增加对Go语言的支持,比如对于Google 有战略意义的云计算平台GAE(Google AppEngine)很早就开始支持Go语言了。本章将简要介绍Go语言的发展历史和关键的语言特性,并引领读者对Go语言的主要特性进 行一次快速全面的浏览,让读者对Go语言的总体情况有一个清晰的印象,并能够快速上手,用 Go语言编写和运行自己的第一个小程序。 更丰富的内置类型。

2025-08-11 17:47:48 291

原创 开源鸿蒙OpenHarmony系统移植

本文以移植名为MyProduct的开发板为例讲解移植过程,假定MyProduct是MyProductVendor公司的开发板,使用MySoCVendor公司生产的MySOC芯片作为处理器。在名称的目录下创建一个config.json文件,该文件用于描述产品所使用的SOC 以及所需的子系统。配置如下:},...主要的配置内容配置项说明(必填)产品名称version(必填)版本type(必填)配置的系统级别,包含(small、standard等)target_cpu。

2024-06-28 10:00:00 1549

原创 开源鸿蒙OpenHarmony开发入门

方舟开发框架针对不同目的和技术背景的开发者提供了两种开发范式,分别是基于ArkTS的声明式开发范式(简称“声明式开发范式”)和兼容JS的类Web开发范式(简称“类Web开发范式”)。有了应用模型,开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉OpenHarmony应用开发流程。在开始之前,您需要了解有关OpenHarmony应用的一些基本概念:UI框架的简单说明、应用模型的基本概念。

2024-06-28 08:00:00 1518

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除