散热学习笔记

从零开始学散热

陈继良

热设计的意义

温度的影响

  • LED温度敏感性强
    • 温度浮动导致光输出的变化和发光峰值波长的漂移
    • 结温上升影响光输出效率(同样亮度,产热更多)
    • 温度上升,光质量控制能耗上升
  • 温度对电子产品影响
    • 运行寿命
      • 芯片温度每上升10度,运行寿命减半
        • 正常工作温度内
        • 70-140度,寿命减少更快
    • 能源效率
    • 性能稳定性

温度对芯片的影响原理

  • 硅芯片由多种材料制成,不同材料热膨胀系数不同。温度变化导致芯片内部不同材料间存在相互作用力,长时间积累造成断裂。(类似金属疲劳?)
  • 液态器件(电解电容)
    • 温度升高,密封材料性能下降;水汽进入产生反应,增大爆炸风险;高温下电解液沸腾,压力超过外壳承受能力,嘭
  • 腐蚀
    • 芯片运行产生电场,和空气水分、盐分一同诱发电化学反应;温度越高,反应越快(指数级)
  • 氧化物分解
    • 良好环境下,氧化物分解,电气性能改变
    • 反应速度和温度呈现指数关系
  • 芯片功耗
    • 分类
      • 动态功耗
        • 电容充放电
          • 网络电容
          • 输入负载
        • P/N MOS 同时打开产生的瞬时短路电流
      • 静态功耗
        • 逻辑门没有翻转时的能量损耗
          • P(static) = V(dd)I(leakage)
    • 随芯片制程减小,动态功耗下降,静态功耗上升
    • 静态功耗随温度上升而指数上升

电气性能变化

  • 芯片运行最优温度只位于一个点或一小段温度区间

解决芯片热可靠性

  • 内:优化芯片封装材料和制造工艺(芯片封装热设计)
  • 外:增加散热器(产品系统热设计)

热设计方案特征

  1. 产品热安全
  2. 低成本
  3. 可维护性
  4. 稳定性
  5. 异常检出
  6. 外观
  7. 噪音控制(风冷)
  8. 优秀的工况适应性和异常情景反应策略(这句没看懂)
  9. 节能环保

移植zephyr到AT32_SURF_F437开发板

感谢Artery公司提供开发板,以及Artery各位工程师的技术支持。

背景

今年上半年收到了Artery公司 木一川 先生的邀请,有幸白嫖到了AT32的开发板。开发板搭载的AT32F437ZMT7芯片和其他国内芯片公司的xx32产品类似,芯片内核采用ARM Cortex-M4,外设和STM32F1相似。

题外话: 在写这篇文章的时候,翻阅了以前写的GD32移植时候看到当时刚刚考完日语N2,一年半时间飞逝,N1考试因为疫情连续取消了三回。

zephyr移植

基础知识:

请参考gd32移植

对于传统的嵌入式软件开发,可能会使用IAR、KEIL等IDE,而绝大多数的芯片厂家默认提供的BSP也往往基于这些工具进行开发。 然而对于开源项目来说,这些工具费用高昂,并且对工作流的细节控制很难实现。因此,对于第一次接触zephyr项目的朋友优先理解编译器(和目标平台架构相关,对于at32来说是gcc)和构建系统(cmake)的作用。

zephyr系统利用了大量linux的开发工具:

  • 为了解决c语言大量宏(marco)的依存关系,zephyr使用linux的kconfig工具来管理宏。
  • 为了解决各个平台的硬件区别,zephyr基于使用linux的devicetree框架对硬件设备从Board,SOC,Arch三个层级对硬件平台进行描述。但是zephyr项目的设备树会生成c语言头文件而不是dtb

为了对开发平台进行调试,一般会使用pyocd或者OpenOCD这两个工具来建立JTAG或者SWD连接,配合gdb对芯片进行调试。 一般gdb不会单独运行,在命令行中调试即使配合tui也是十分痛苦的,但是对于一些高手,利用hook,可以打造出更顺手的调试环境。我个人一般会配合vscode或者gdbgui等工具一同使用,这些GUI界面一般也可以使用hook,并且使用gdb的终端。

以上工具,一般在zephyr项目中也不会直接调用,而是使用west命令进行操作。

AT32移植

zephyr项目支持多种架构和大量厂商的芯片,一般情况下,我们只需要制作最外层的Board级别的移植,即可完成。

但是本次Artery公司尚未被zephyr项目支持,但是arm cortex-m4是被zephyr项目支持的架构arch,所以需要SOC级别的移植。

如果你使用的是RenesasRH850或者infineonTriCore系列芯片,那么你将会面对一个arch级别的移植,这会面对很大的工作量,目前我也没有经历过这个级别的适配。

  • 供应商支持
    • zephyr会对供应商进行管理,只有记录在vendor-prefix.txt内的供应商名称,才可以作为vendor出现在设备树中。
  • 板极支持(boardat_surf_F437)
    • 板级设备树
      • 这里一般会描述LED、按键、串口等板级外设的配置。
    • 板级kconfig配置
      • 对一些设定进行配置,例如LOG等级,IP地址等。
    • 调试工具配置
      • openocdpyocd以及各个厂家特有的下载工具等进行配置,以便对目标设备进行调试和烧写。
    • 文档
      • 一般会描述开发板的功能和简单的编译烧写方法。
  • 芯片级支持(SOCAT32F437ZMT7)
    • soc启动代码(soc.c)
      • 对系统启动进行一些初期设定,arm架构一般会调用cmsis接口SystemInit
    • 芯片级dts
      • 对芯片级设备进行描述,例如定时器,flash等。
    • 芯片级KCONFIG
      • 对芯片系列进行定义。
    • 芯片片内外设驱动
      • 串口、定时器等外设驱动。
      • 这部分代码会大量利用c语言宏的一些特性,熟练掌握可以很大程度的提升c语言宏的使用技巧。
  • 供应商硬件抽象层(对于本次移植来说是hal_artery)
    • 在适配驱动的过程中,如果完全重新写一遍外设驱动的话会产生很大的工作量;同时一般芯片厂商会提供一定的代码以便加速开发。但是,这些代码的维护和zephyr之间关系不大,因此作为module存在。
    • 在使用这些代码的时候,我们需要十分小心。因为c语言没有package或者namespace这些方法对符号的作用域进行限缩,所以在引入供应商HAL代码的时候,符号会重名,这种时候需要对HAL名称进行修正。万幸是这些修正项目往往比较规则,即使在版本更新后,一般也只需要再做一遍即可。如果希望更加一劳永逸的办法,建议了解coccinelle
    • HAL库的另外一大工作量是芯片的引脚复用的管理(pinctrl)。一般情况下,我们对引脚的处理仅仅局限在某一个系列的兼容,然而在zephyr项目中,我们需要对整个供应商的引脚IP进行描述。并且,zephyr项目一般不允许手动修改这些描述,因此制作一个脚本程序是必要的,例如:hal_gigadevice: gd32pinctrl.py
    • 作为zephyr模块,根目录应当包含zephyr文件夹和module.yml文件。这些文件的修改可以参考west工具的说明。

应用篇 (zephyr-SUMP

谈论了很久的移植,最后来聊一下产品的开发。本节将简单的说明下zephyr应用开发的方式,并做一个简单的逻辑分析仪。为了简单起见,本次没有采用out-of-tree的开发方式,而是将代码放在了app文件夹内。

SUMP与SIGROK

  • sigrok
    • 这是一个支持大量设备的开源逻辑分析仪程序(也支持示波器、电源等设备)。
  • SUMP
    • SUMP是一个基于串口(UART/USBCDC)的逻辑分析仪传输协议。

基于这两个工具,我们实现逻辑分析仪的技术准备就基本完成了。

开发APP

为了获得更高的采样速度,需要在APP层级重新定义端口驱动,以绕开zephyr的IO驱动,较少操作系统抽象造成的性能损失。

  • sample文件夹下有大量例子,可以简单的复制出来,作为我们开发的基础。
  • APP KCONFIG设置
    • 对于app级别的宏进行描述,这些宏可以根据实际使用的目标平台进行调整。例如:采样频率,采样数据长度等。
  • 板级设备树覆写
    • 对于逻辑分析仪来说,为了更快的采样速度,我们需要更快的GPIO驱动,而zephyr提供的接口由于抽象,会损失些许性能。
  • app层驱动
    • 这里是对于不同芯片的端口驱动。不同芯片根据资源不同,可能会提供不同数量的端口数和采样方法。例如:
      • Zephyr GPIO方法
      • 汇编方法(目前只实现了ARM)
      • Timer + DMA方法(目前没有做)
  • app
    • 启动了一个测试用pwm(绿灯)
    • SUMP协议的处理
  • 文档
    • 一些文档更加利于别人理解这个项目的用途
  • todos
    • 这个app是我头脑一热做的,还有很多不完善的地方,暂时记录在这里

图片

开发板照片

PulseView采样

IAR ARM 9.30 破解

由于突如其来的疫情,被迫在宅工作。

匆忙中从公司拿了IAR的功能安全版本的加密狗回家,但是有的同事拿的是普通版本的IAR,为了确保大家环境都OK,所以只能无奈破解下以便确认工程正常。简单来说,和之前破解IAR CCRH的逻辑类似。

只记录破解方法,不提供破解结果。

使用雷锋破解器激活

这一步直接跳过吧,遍地都能搜索到。

然后新建工程,编译得到错误:The generation feature is not of version 18.

                 
  test - Debug
  Reading project nodes...
 
  main.c
  Fatal Error[LMS001]: License check failed. Use the IAR License Manager to resolve the problem.
  The generation feature is not of version 18.
 
  Total number of errors: 1
  Total number of warnings: 0
 
  Build failed
 ​

使用IDA打开iccarm.exe

  • strings窗口搜索The generation feature is not of version 18
  • 双击进入反汇编
  • X跳转至调用处

修改jgejl

  • 保存exe,重新编译,写个小错误也被成功识别

License窗口和调试

之前在RH850编译器破解时候有修改LicenseInfo.exerh850sim.dll

估计IAR ARM也是一样逻辑,不过这两个模块我暂时用不到,能试着编译成功就行了。

FPGA 原理和结构 「天野英晴」 读书笔记

复习下基础知识

基础知识

逻辑电路基础

  • 布尔代数
  • 逻辑表达式
    • 乘积的和
    • 和的乘积
  • 真值表 -> LUT
  • 组合逻辑电路
    • 当前的输出取决于当前输入,不包含记忆元件
    • 异或 Exclusive-OR (第一次直到单词这么写,惭愧啊)
      • 简写XOR,EOR,EXOR(后面这俩还真是第一次见)
  • 时序逻辑电路
    • 含有记忆元件的逻辑电路
    • 同步时序逻辑电路
      • 状态变化由时钟信号控制
      • 有限状态机模型
        • Mealy 输出=输入+状态 (输入直接影响输出)
          • 通常状态少,电路规模小
          • 输入立刻反映到输出,导致逻辑元件不等长布线,容易冒险
        • Moore 输出=状态 (输入影响状态)
          • 状态数量多,电路规模大
          • 不易冒险
        • todo:书上的图挺好,后续贴过来
    • 异步时序逻辑电路(FPGA一般不使用)
      • 这本书没讲,后面有机会补上

同步电路设计

  • 触发器(Flip Flop,FF)
    • FPGA 一般采用DFF
    • CMOS工艺电路
      • todo:抄图
    • 建立时间(setup time),保持时间(hold time)
    • 亚稳态(metastable)
    • 时序分析
      • 评估是否满足时序约束(需求)
      • 动态时序分析
        • 过于耗时,很少采用
        • todo:需要了解下
      • 静态时序分析(static time analysis, STA)
        • 只需要电路网表,遍历一次电路拓补,分析速度快
      • 资源充足时,编译容易,时间短
  • 单向时钟同步电路
    • 时钟偏移(skew):时钟信号到达时间错位
    • 时钟抖动(jitter)
    • FPGA通过驱动能力强的专用总线(global buffer)将多层时钟树的时钟低偏移连接在所有FF上。

FPGA 定位和历史

  • 逻辑器件分类
    • 标准器件
      • 标准逻辑
        • 怀疑书中指与或非门等标准器件
      • 固定用途定制芯片(Application Specific Standard Parts,ASSP)
      • 可编程逻辑器件(Programmable Logic Device,PLD)
        • FPGA是一种设计自由度高的PLD。
        • 半导体厂商可以量产,用户无需开模即可定制电路
    • 定制芯片
      • 全定制芯片
        • 优势:性能(速度),集成度(门数),设计自由度
        • 劣势:NRE,TAT高(费用和时间)
      • 半定制芯片(缩短NRE和TAT)
        • 门阵列(gate array)
        • 嵌入式阵列(embedded array)
        • 标准单元ASIC
        • 结构化ASIC
  • FPGA历史
    • 1970s
      • FPLA – NXP
        • AND-OR阵列
      • PAL – Lattice
        • 改进版FPLA
        • 耗电量大无法普及
    • 1980s
      • GAL – Lattice
        • 固定OR阵列结构
        • CMOS EEPROM进行编程
      • FPGA – Xilinx
        • LUT+FF
        • CMOS SRAM
        • 可重配置
      • CPLD – Altera,AMD,Lattice
      • 反熔丝FPGA – Actel,QLuickogic(这俩公司没听过…)
    • 1990s
      • 日本厂商尝试加入,没有成功
      • FPGA(SRAM)- Altera,AT&T,AMD,Atmel
      • FPGA(FLASH)-GateField
      • FPGA(BCiMOS)-DynaChip
    • 2000s
      • FPGA,SoPD – Altera,Xilinx
    • 2010s
      • 高端 FPGA – AMD(Xilinx),Intel(Altera)
        • 动态可重配置
        • 车载FPGA
        • 光FPGA
        • SoPD (Zynq,DE1SOC等带有处理器的FPGA)
      • 中低端:Lattice,GOWIN

FPGA 概要

todo:9/4

FPGA结构

todo:9/4

设计流程和工具

todo:9/5

设计原理

todo:9/6

硬件算法

todo:9/7

PLD、FPGA应用案例

todo:9/8

新器件,新架构

todo:9/9

WIFI+USBIP+MCU=无线USB设备

请注意,本文提供方法基于zephyr OS制作,由于目前zephyr项目的USB子系统处于大规模重构状态,所以本方案不受zephyr正式支持。详细请参考:

https://github.com/zephyrproject-rtos/zephyr/pull/46862

背景

目前,我们有许多MCU项目利用USB协议与PC进行通信,绝大多数使用USB从机协议,随着Wifi协议的广泛使用以及速度的提升,我认为绝大多数的USB设备都可以经由网络协议而渐渐变得无线化。

但是,如果完全将协议栈转换为网络,会导致一系列兼容软件或驱动需要再次适配,较大的开发量和不明显的收益使得各大厂商在这方面进展缓慢。

本文介绍一种基于USBIP的USB设备无线化方法,希望能够推进设备线束的无线化进程。

USB with WIFI

灵感来源(废话部分,技术无关,可以跳过😄)

前段时间有幸从artery公司木一川先生处得到一片at32 demo板,正巧促使我简单的学习了一下openocd和cmsisdap。发现cmsis-dap协议很容易就可以在zephyr中引用,以获得大量开发板支持。

但是如果只是制作一个普通的dap仿真器,比较缺少挑战性,因此我决定尝试制作无线的仿真器。

最初的目标是通过TCP转发cmsis-dap协议,修改openocd以支援网络设备,但是后面我意识到这会导致windows的KEIL和IAR等IDE环境难以运用。

因此,我将目标转向USB设备的网络访问,因此了解了USBIP协议,并且偶然发现zephyr OS中对USBIP是有部分实现的,我只需要简单的将他扩展到其他设备即可,因此便有了本文。

方案介绍

再次提示,本方案虽然基于zephyr OS制作,但是由于zephyr OS的USB subsystem处于大规模重构状态,所以不受zephyr主线支持!

实现代码请参考:https://github.com/zephyrproject-rtos/zephyr/pull/46862

实际在下面设备中运行通过:

传统USB程序结构

这里指的传统zephyr USB 设备程序(因为zephyr系统目前没有host设备,这也是大规模重构的原因)。

如果您的程序目前采用其他方式架构(可能大部分程序都是吧),您首先需要将其移植到zephyr OS。(目前USB subsystem处于不稳定状态,商业用户需要谨慎考虑)

zephyr OS USB DEVICE

USBIP 网络USB设备

本方案工作在UDD层,通过注册zephyr USB device驱动,并将其转换为USBIP协议。因此没有虽然没有USB硬件,但是在操作系统看来和有USB驱动是一样的。

示意图

注意:

  • 这不是标准USBIP Server的实现,但是我认为对于绝大多数的USB设备已经足够实现功能

使用

MCU程序

建议创建如下application

  • 启动后的wifi配置:帐号,密码,功耗等(有线网络可忽略)
  • 静态IP或DHCP服务

简单使用教程

  • 使用usbip客户端,确认基本通信
usbip list -r FEILONG-CMSIS-DAP
  • 挂载usbip设备
sudo usbip attach -r FEILONG-CMSIS-DAP -b 1-1
  • 调试可以使用wireshark,内置有USBIP协议。

windows

请参考

https://github.com/cezanne/usbip-win

有些功能可能需要使用zadig安装驱动:

https://zadig.akeo.ie/

linux

linux用户应该不需要多说,参考archlinux wiki即可使用。

https://wiki.archlinux.org/title/USB/IP

注意:

在linux上使用时,如果在使用过程中,没有detach直接复位、断电等,会造成linux内核出现异常,重启后即可解决。(windows没有发现此类问题)

参考链接

CMOS芯片结构与制造技术

CMOS学习中…

LSI、VLSI制造基本技术

  • 基础工艺技术
  • 晶圆吸杂去除被金属刀片切割的单晶硅片上沾染的金属
    • 外部吸杂离子注入
    • 内部吸杂氢气中退火处理
  • 氧化氧气中加热形成二氧化硅薄膜
    • 依据氧化气氛分类
    常用干氧、湿氧、干痒相结合的方式混合含氯气体(氯气、氯酸等)捕获Na离子,改善SiO2表面稳定性。
    • 干氧氧化
      • 可以使用氮气和氩气稀释氧气,减慢氧化速度 形成超薄氧化膜
    • 水汽氧化
    • 湿气氧化
    • 依据集成电路制造工艺区分
    • 初始氧化
    • 基地氧化
    • 预氧化
    • 场区氧化
    • 栅氧化
    • 多晶氧化
    • 源漏氧化
  • 光刻通过光照将光掩模版的电路打印在光刻胶上
    • 工序
    • 硅片处理
    • 涂黏附剂
    • 涂胶
    • 前烘
    • 曝光
    • 显影
    • 后烘
    • 光源
    • 0.8um 高压水银灯 436nm
    • 0.35um i线 365nm
    • 0.13um UV光KrF 248nm
    • 0.10um ArF 193nm
    • 更窄 F2 157nm
  • 腐蚀或刻蚀
    • 湿法腐蚀腐蚀剂浸泡光刻后硅片
    • 精度不高
    • 干法刻蚀
    • 等离子刻蚀依靠气体辉光放电刻蚀
    • 反应离子刻蚀纵向刻蚀,精度较高
  • 去胶
  • 离子注入对Si衬底掺杂,改变电特性
    • 高能离子注入
    • 低能离子注入0.13um以下
  • 扩散退火氮气约1000度加热
  • 薄膜沉淀CVD工艺

假装做一个电子单词卡

背景

最近总能在淘宝刷到各个厂家的电子单词卡(如下图所示),作为一名电子工程师,感觉这个小玩意作为平时的产品设计练习会是个不错的话题。

从购买上来说,个人不是很推荐,理由如下:

  • 如果是购买给孩子使用,屏幕太小了,像素密度低,从商品照片里面看字体都很模糊。虽然是墨水屏,但是孩子们可能要贴近看屏幕,我认为不利于孩子们的视力。
  • 低成本墨水屏,没有背光,和在过亮或过暗的地方看书一样,不合适的光线依旧会导致视疲劳。

题外话 – 我目前在用的单词背诵组合

正式开始前,分享下我在使用的背单词组合:

  • Anki(Desktop+AnkiDroid)
  • 墨水屏安卓手机(海信A5Pro CC, 彩色墨水屏技术离实用化还有太远的距离,建议现阶段还是使用黑白屏)
  • 懒人支架,放在床头上夹住手机,保持平躺保护脊椎😄
  • 迷你手柄(如下图,按键还挺舒服)
    • 个人使用ABXY四个按键,竖过来可以握在手里

方案

淘宝的那种我也没有买实物,下面方案没有实际做出来,只从理论上判断可行性,现阶段没有实际制作的计划。

全体结构

Android APP

  • 每次同步时,同步当天单词表及字模(Flash寿命?)
  • 蓝牙升级
    • 固件来自服务器
  • 设置锁屏壁纸(个性化+蓝牙丢失后显示的联系方式设置)

固件

  • 功能一览
    • 蓝牙升级
      • WCH貌似有现成的解决方案(没用过😄)
    • 字库
      • 应该和OLED的字模用法是一致的
      • 需要区分语言,以便减小体积
    • E-INK驱动
    • 电源管理
      • 电量显示
      • 电量矫正
      • 充电指示
      • 低功耗设置
      • 按键唤醒
    • 壁纸(低功耗+蓝牙出发)
    • 单词同步
      • 压缩?
      • 增量?
      • 小数据库能跑动不?

硬件设计

我一般认为商品的价格,成本约60%,也就是说淘宝成品成本价格在70元上下。

猜测屏幕约40元,芯片+PCB+电池+外壳+按键30元

  • EINK屏幕
    • 最开始那个图的2.6寸屏幕其实不大,296×152像素的屏幕,在计算字模大小时候发现字真的很小。虽然是墨水屏,但是很担心小孩子们长时间使用这样的设备是否会对视力产生影响。个人还是更推荐黑白的墨水屏安卓手机或电子阅读器,一般几百元就可以搞定,并没有贵多少。
    • 题外话:我选择手机的一个理由一方面是当时没有这种设备,另一方面确实是因为字体比较大。
  • 锂电池容量和尺寸很难凭空想出来,不过可以参考目前在卖的方案尝试下
    • 充电电路网上遍地都是😄
  • USB串口
    • 烧录程序用
    • CH340N最小,应该够用
  • MCU – CH571F因为没有计划实际做,所以Flash容量不太好判断但是这个系列从datasheet上来看,很适合做这个。嘉立创商城价格约等于一瓶饮料
  • 接口
    • USB-C
  • 存储
    • 不太确定是否需要外挂存储芯片
  • 电阻电容MOS等
  • 按键
    • 开模的话可能要大批量才行
    • 遥感的十字按键看起来不错

windows 下webdav连接方法

1. 启用http网络连接

如果是https的连接,可以直接跳到第二步。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"BasicAuthLevel"=dword:00000002

把上面文件保存为 xxx.reg,导入注册表,或

手动修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters

BasicAuthLevel 值改成 2(支持 http & https)

https://blog.csdn.net/kh766200466/article/details/91951568

2. 添加网络位置

在「我的电脑」画面中右键「添加一个网络位置」,「下一步」,「选择自定义网络位置」,网络地址输入为 WebDAV 的地址,比如坚果云就是 https://dav.jianguoyun.com/dav/,再点「下一步」,给该位置输入名称。

完成后可以在「我的电脑」画面看到新建的这个 WebDAV 地址的快捷方式了。第一次进入的时候需要输入用户名和密码。

https://www.jianshu.com/p/7ba5f0756efc

或者RaiDrive一步到位

直接图形化:

参考:https://sspai.com/post/47830