19. Cortex-A9 uboot启动代码详解

一口Linux 2021-01-25 00:00

本篇文章是彭老师第一次在B站直播间,边直播边记录笔记,视频已经上传到B站。

现在完善整理成该篇文章,有想学习uboot启动的代码详细流程的老铁可以进入我B站空间配合视频一起学习。

 B站用户名:一口Linux

ARM系列文章,请点击以下汇总链接:

从0学arm合集



前言

我们在前面的arm系列课程,已经讲解了arm的架构、汇编指令、异常、常用外设的控制器驱动,那么我们已经具备开发arm系列产品的基本技能。

本篇给大家介绍一款比较常用的bootloader:uboot,通过uboot的介绍以及源代码的详细分析,让大家把之前所有ARM相关的知识点融会贯通起来。

一、uboot

1. 概念

U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。

U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。

2. uboot基本功能

U-Boot可支持的主要功能列表:

  • 系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
  • 基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
  • CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好;
  • 设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
  • 上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号。

3. 常用命令

uboot命令比较多,下面只列举网络启动要用到的命令:

命令 含义
printenv 打印Uboot环境变量
setenv 设置Uboot环境变量
ipaddr 本地的IP地址
serverip TFTP服务器端的IP地址
ethaddr 以太网的MAC地址
netmask 以太网的网络掩码
gateway 以太网的网关
bootcmd 自动启动时执行命令
bootargs 传递给Linux内核的启动参数
bootm 引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。
bootdelay 执行自动启动(bootcmd中的命令)的等候秒数
baudrate 串口控制台的波特率

4. 配置参数举例

以下以网络下载内核、网络挂载nfs为例。

1)ubuntu环境

ubuntu ip:192.168.6.186

nfs配置:

配置文件如下:

/etc/exports

配置信息如下:

nfs

2)开发板设置

开发板ip:192.168.6.187

配置命令:

setenv ipaddr 192.168.6.187      ;板子的ip
setenv serverip 192.168.6.186    ;虚拟机的ip
setenv gatewayip 192.168.1.1     ;网关
saveenv                          ;保存配置
  • 加载内核和设备树
setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000

bootcmd:uboot2启动之后,首先先执行找到这个参数,执行后面的命令。

从tftp服务器下载内核镜像uImage到地址41000000,设备树文件exynos4412-fs4412.dtb到42000000,并通过命令bootm加载启动内核。

  • 挂载nfs
setenv bootargs root=/dev/nfs nfsroot=192.168.6.186:/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.6.187

挂载nfs文件系统

  • root=/dev/nfs
  • nfsroot=192.168.6.186:/rootfs    nfs服务器地址192.168.6.186,目录为/rootfs,
  • rw  文件系统操作权限为可续写
  • console=ttySAC2,115200   串口名称和波特率
  • init=/linuxrc 内核启动后运行的进程为linuxrc
  • ip=192.168.6.187  开发板地址

二、exynos-4412 Soc 启动顺序

要想了解exynos-4412的启动顺序,我们首先需要了解该soc的内存布局。

1. exynos-4412内存布局

通常一款soc的内存在厂家设计的时候就已经规定死了,对于使用者来说,我们无法改变。

我们只关心和启动相关的一个地址,


  1. iROM  在soc内部,出厂时厂家固化了特定的程序,iROM中程序对应用户来说不可改变

    1. iRAM   在soc内部,速度较快,但空间不大

    1. DMC    RAM控制器,位于SOC内部,用于驱动RAM,大容量的RAM都需要连接到该控制器

    2. Booting Sequence

    不同的厂家的启动顺序是不太一样的,本篇主要以三星的exynos-4412 soc为基础,讲解该基于该板子的uboot启动顺序。

    根据上图,系统启动的大概顺序:

    • iROM在SOC内部,是一个64KB的ROM,他树池化一些系统启动必须的功能。比如:时钟、栈。
    • iROM负责从特殊的启动外设加载BL1的image到soc内部的256KB的SRAM中。启动的外设由操作按钮来决定的。根据不同按键的值,iROM将会对bl1 的image做不同的校验。
    • BL1初始化系统时钟和DRAM控制器,然后从启动外设加载OS image到DRAM中。根据启动按钮的值的不同,BL1会对OS做不同的校验。
    • 启动完成之后,BL1跳转到操作系统(kernel)。

    iROM会根据OM 引脚的不同选择不同的启动设备,对应的OM寄存器需要提供对应的启动信息。

    三、内核启动流程概述

    1. 内核启动流程 概述

    uboot启动流程

    如上图所示:

    1. 设备上电之后,先执行iROM中的出厂代码,先进行必要硬件的初始化 去执行uboot,
    2. 通常把kernel、设备树文件放到flash中
    3. 程序启动之后,往往先从flash启动,运行uboot
    4. 第一步:先进行硬件的初始化(svc模式栈、clock、内存、串口) 第二步:自搬移:把uboot从flash中拷贝到RAM中,跳转到RAM中执行剩下的uboot代码
      第三步:把内核拷贝到RAM中,执行内核,把控制权交给内核。

    2. 内核启动详细流程

    开发板从上电到启动内核的过程

    四、uboot启动流程代码详解

    1. lds文件

    要想了解uboot整个项目的代码流程,必须首先了解链接脚本【链接脚本参考《7. 从0开始学ARM-GNU伪指令,lds使用》】。

    该文件决定了uboot最终生成的镜像文件,各个段的布局。

    uboot链接脚本如下:

    u-boot-2013.01/arch/arm/cpu/u-boot.lds

    文件内容:

    26 OUTPUT_FORMAT("elf32-littlearm""elf32-littlearm""elf32-littlearm")
     27 OUTPUT_ARCH(arm)
     28 ENTRY(_start)
     29 SECTIONS
     30 {
     31     . = 0x00000000;
     32 
     33     . = ALIGN(4);
     34     .text :
     35     {
     36         __image_copy_start = .;
     37         CPUDIR/start.o (.text*)
     38         *(.text*)
     39     }
     40 
     41     . = ALIGN(4);
     42     .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
     43 
     44     . = ALIGN(4);
     45     .data : {
     46         *(.data*)
     47     }
     48 
     49     . = ALIGN(4);
     50 
     51     . = .;
     52 
     53     . = ALIGN(4);
     54     .u_boot_list : {
     55     #include <u-boot.lst>
     56     }
     57 
     58     . = ALIGN(4);
     59 
     60     __image_copy_end = .;
     61 
     62     .rel.dyn : {
     63         __rel_dyn_start = .;
     64         *(.rel*)
     65         __rel_dyn_end = .;
     66     }
     67 
     68     .dynsym : {
     69         __dynsym_start = .;
     70         *(.dynsym)
     71     }
     72 
     73     _end = .;
     74 
     75     /*
     76      * Deprecated: this MMU section is used by pxa at present but
     77      * should not be used by new boards/CPUs.
     78      */

     79     . = ALIGN(4096);
     80     .mmutable : {
     81         *(.mmutable)
     82     }
     83 
     84     .bss __rel_dyn_start (OVERLAY) : {
     85         __bss_start = .;
     86         *(.bss*)
     87          . = ALIGN(4);
     88         __bss_end__ = .;
     89     }
     90 
     91     /DISCARD/ : { *(.dynstr*) }
     92     /DISCARD/ : { *(.dynamic*) }
     93     /DISCARD/ : { *(.plt*) }
     94     /DISCARD/ : { *(.interp*) }
     95     /DISCARD/ : { *(.gnu*) }
     96 }
     97 

    核心内容解释:

     27 OUTPUT_ARCH(arm)       :    该镜像运行在arm架构的硬件上
     28 ENTRY(_start)          :    程序的入口是 _start
     29 SECTIONS
     30 {
     31  . = 0x00000000;      :   程序的链接地址,不是运行地址【uboot一定是位置无关码】
     34     .text :
     35     {
     36         __image_copy_start = .;    : 宏对应整个程序编译好后首地址,自搬移代码的初始位置
     37         CPUDIR/start.o (.text*)    : 第一个目标文件CPUDIR/start.o中的代码段
     38         *(.text*)                  : 剩下的目标文件的代码段
     39     }
     60     __image_copy_end = .;          : 自搬移代码的结束为止

    BSS全局未初始化变量、全局初始化为0的变量所在的段:

     84     .bss __rel_dyn_start (OVERLAY) : {
     85         __bss_start = .;
     88         __bss_end__ = .;
     89     }

    2. uboot启动代码流程概要

    代码只分析到uboot命令行,函数main_loop()位置。

    3. 启动代码详细分析

    _start入口位于以下文件:

    u-boot-2013.01/arch/arm/cpu/armv7/start.S

    第一阶段:

    第二阶段

    第二阶段代码从_main开始:

    以上代码详细解释,请结合B站视频同步学习。

    五、uboot启动的几个关键知识点

    1. 如何判断第一条机器指令的位置?

    链接脚本决定了内存的布局。

    uboot链接脚本如下:

    u-boot-2013.01/arch/arm/cpu/u-boot.lds

    文件内容:

     28 ENTRY(_start)
     29 SECTIONS
     30 {
     31     . = 0x00000000;
     32 

    uboot的入口是_start

    链接地址是0x00000000


    1. uboot如何搬运代码?

    代码位于:

    u-boot-2013.01/arch/arm/cpu/armv7/start.S

    搬移代码如下:

    ENTRY(relocate_code)
     mov r4, r0 /* save addr_sp */
     mov r5, r1 /* save addr of gd */
     mov r6, r2 /* save addr of destination */

     adr r0, _start
     cmp r0, r6
     moveq r9, #0  /* no relocation. relocation offset(r9) = 0 */
     beq relocate_done  /* skip relocation */
     mov r1, r6   /* r1 <- scratch for copy_loop */
     ldr r3, _image_copy_end_ofs
     add r2, r0, r3  /* r2 <- source end address     */

    copy_loop:
     ldmia r0!, {r9-r10}  /* copy from source address [r0]    */
     stmia r1!, {r9-r10}  /* copy to   target address [r1]    */
     cmp r0, r2   /* until source end address [r2]    */
     blo copy_loop

    详情参考第四章,第3节。


    1. uboot中,如何判断此次开机是从断电状态开机还是从休眠状态启动的?
    board/samsung/fs4412/lowlevel_init.S

    代码如下:

     41   lowlevel_init:
     54     /* AFTR wakeup reset */
     55     ldr r2, =S5P_CHECK_DIDLE
     56     cmp r1, r2
     57     beq exit_wakeup
     58 
     59     /* LPA wakeup reset */
     60     ldr r2, =S5P_CHECK_LPA
     61     cmp r1, r2
     62     beq exit_wakeup
     63 
     64     /* Sleep wakeup reset */
     65     ldr r2, =S5P_CHECK_SLEEP
     66     cmp r1, r2
     67     beq wakeup_reset

     112 wakeup_reset:
     113     bl system_clock_init
     114     bl mem_ctrl_asm_init
     115     bl tzpc_init
     116 
     117 exit_wakeup:
     118     /* Load return address and jump to kernel */
     119     ldr r0, =(EXYNOS4_POWER_BASE + INFORM0_OFFSET)
     120 
     121     /* r1 = physical address of exynos4210_cpu_resume function */
     122     ldr r1, [r0]
     123 
     124     /* Jump to kernel*/
     125     mov pc, r1

    由上可知,当手机因为各种原因进入休眠时,会将当前程序执行的上下文保护起来,并向一些pmic的寄存器中写入指定的数据,以表明此次是因为何种原因进入休眠。

    而手机并没有完全断电,而是处于一个低功耗模式下,此时启动RAM仍然有数据,所以在此启动后,只需要从特殊的寄存器中读取相应的值,就可以知道之前是因为什么原因休眠,进而回复休眠之前的上下文即可。


    1. uboot代码搬到ram之后,代码的运行地址发生了变化,如何保证程序跳转不会出错?

    除了要保证uboot代码是基于地址无关的,此外.rel.dyn帮我们解决了,其实主要还是编译器帮我们做了很多工作。

    位置无关码参考《15. 从0学ARM-什么是位置无关码?》

    1. 设备启动的时候,有可能直接从ram启动, 如何知道当前是从flah启动还是ram启动的?

    文件:

    board/samsung/fs4412/lowlevel_init.S

    代码:

    lowlevel_init:

    85     /*
     86      * If U-boot is already running in ram, no need to relocate U-Boot.
     87      * Memory controller must be configured before relocating U-Boot
     88      * in ram.
     89      */

     90     ldr r0, =0x0ffffff      /* r0 <- Mask Bits*/
     91     bic r1, pc, r0      /* pc <- current addr of code */
     92                     /* r1 <- unmasked bits of pc */
     93     ldr r2, _TEXT_BASE      /* r2 <- original base addr in ram */
     94     bic r2, r2, r0      /* r2 <- unmasked bits of r2*/
     95     cmp r1, r2          /* compare r1, r2 */
     96     beq 1f          /* r0 == r1 then skip sdram init */


    原理:RAM地址空间是:0x40000000-0xA0000000   0xA0000000-0x00000000 而iROM/iRAM地址的bit:28-31均是0,所以只需要读取出执行到lowlevel_init时pc的值,判断其bit:28-31是否是0即可知道现在代码是否运行在RAM中。


    文中用到的源码、datasheet、交叉编译工具,在公众号后台回复 【uboot2013】即可获得。



    推荐阅读


    【1】18.基于Cortex-A9 SPI、MCP2515详解必读
    【2】网络/命令行抓包工具tcpdump详解 
    【3】 13.一文搞懂Cortex-A9 RTC  必读
    【4】 DNS 原理入门指南
    【5】 14. 从0学ARM Cortex-A9 看门狗入门
    【6】apt 和 apt-get 之间有什么区别?必读
    【7】16.从0学arm,基于Cortex-A9 ADC裸机驱动详解
    【8】 17.基于Cortex-A9,i2c 外设详解 必读
    【9】 【粉丝问答8】用C语言在Linux下实现CC2530上位机-1
    【10】 CAN】嵌入式CAN总线入门篇(底层细节) 必读

     


     

    进群,请加一口君个人微信,带你嵌入式入门进阶。


    在公众号内回复「1024」,即可免费获取学习资料,期待你的关注~



    一口Linux 写点代码,写点人生!
    评论 (0)
    • 据先科电子官方信息,其产品包装标签将于2024年5月1日进行全面升级。作为电子元器件行业资讯平台,大鱼芯城为您梳理本次变更的核心内容及影响:一、标签变更核心要点标签整合与环保优化变更前:卷盘、内盒及外箱需分别粘贴2张标签(含独立环保标识)。变更后:环保标识(RoHS/HAF/PbF)整合至单张标签,减少重复贴标流程。标签尺寸调整卷盘/内盒标签:尺寸由5030mm升级至**8040mm**,信息展示更清晰。外箱标签:尺寸统一为8040mm(原7040mm),提升一致性。关键信息新增新增LOT批次编
      大鱼芯城 2025-04-01 15:02 189浏览
    • 探针本身不需要对焦。探针的工作原理是通过接触被测物体表面来传递电信号,其精度和使用效果取决于探针的材质、形状以及与检测设备的匹配度,而非对焦操作。一、探针的工作原理探针是检测设备中的重要部件,常用于电子显微镜、坐标测量机等精密仪器中。其工作原理主要是通过接触被测物体的表面,将接触点的位置信息或电信号传递给检测设备,从而实现对物体表面形貌、尺寸或电性能等参数的测量。在这个过程中,探针的精度和稳定性对测量结果具有至关重要的影响。二、探针的操作要求在使用探针进行测量时,需要确保探针与被测物体表面的良好
      锦正茂科技 2025-04-02 10:41 56浏览
    • 升职这件事,说到底不是单纯靠“干得多”或者“喊得响”。你可能也看过不少人,能力一般,甚至没你努力,却升得飞快;而你,日复一日地拼命干活,升职这两个字却始终离你有点远。这种“不公平”的感觉,其实在很多职场人心里都曾经出现过。但你有没有想过,问题可能就藏在一些你“没当回事”的小细节里?今天,我们就来聊聊你升职总是比别人慢,可能是因为这三个被你忽略的小细节。第一:你做得多,但说得少你可能是那种“默默付出型”的员工。项目来了接着干,困难来了顶上去,别人不愿意做的事情你都做了。但问题是,这些事情你做了,却
      优思学院 2025-03-31 14:58 112浏览
    • 随着汽车向智能化、场景化加速演进,智能座舱已成为人车交互的核心承载。从驾驶员注意力监测到儿童遗留检测,从乘员识别到安全带状态判断,座舱内的每一次行为都蕴含着巨大的安全与体验价值。然而,这些感知系统要在多样驾驶行为、复杂座舱布局和极端光照条件下持续稳定运行,传统的真实数据采集方式已难以支撑其开发迭代需求。智能座舱的技术演进,正由“采集驱动”转向“仿真驱动”。一、智能座舱仿真的挑战与突破图1:座舱实例图智能座舱中的AI系统,不仅需要理解驾驶员的行为和状态,还要同时感知乘员、儿童、宠物乃至环境中的潜在
      康谋 2025-04-02 10:23 76浏览
    • 文/Leon编辑/cc孙聪颖‍步入 2025 年,国家进一步加大促消费、扩内需的政策力度,家电国补政策将持续贯穿全年。这一利好举措,为行业发展注入强劲的增长动力。(详情见:2025:消费提振要靠国补还是“看不见的手”?)但与此同时,也对家电企业在战略规划、产品打造以及市场营销等多个维度,提出了更为严苛的要求。在刚刚落幕的中国家电及消费电子博览会(AWE)上,家电行业的竞争呈现出胶着的态势,各大品牌为在激烈的市场竞争中脱颖而出,纷纷加大产品研发投入,积极推出新产品,试图提升产品附加值与市场竞争力。
      华尔街科技眼 2025-04-01 19:49 197浏览
    • 北京贞光科技有限公司作为紫光同芯授权代理商,专注于为客户提供车规级安全芯片的硬件供应与软件SDK一站式解决方案,同时配备专业技术团队,为选型及定制需求提供现场指导与支持。随着新能源汽车渗透率突破40%(中汽协2024数据),智能驾驶向L3+快速演进,车规级MCU正迎来技术范式变革。作为汽车电子系统的"神经中枢",通过AEC-Q100 Grade 1认证的MCU芯片需在-40℃~150℃极端温度下保持μs级响应精度,同时满足ISO 26262 ASIL-D功能安全要求。在集中式
      贞光科技 2025-04-02 14:50 92浏览
    • 职场之路并非一帆风顺,从初入职场的新人成长为团队中不可或缺的骨干,背后需要经历一系列内在的蜕变。许多人误以为只需努力工作便能顺利晋升,其实核心在于思维方式的更新。走出舒适区、打破旧有框架,正是让自己与众不同的重要法宝。在这条道路上,你不只需要扎实的技能,更需要敏锐的观察力、不断自省的精神和前瞻的格局。今天,就来聊聊那改变命运的三大思维转变,让你在职场上稳步前行。工作初期,总会遇到各式各样的难题。最初,我们习惯于围绕手头任务来制定计划,专注于眼前的目标。然而,职场的竞争从来不是单打独斗,而是团队协
      优思学院 2025-04-01 17:29 180浏览
    • 在智能交互设备快速发展的今天,语音芯片作为人机交互的核心组件,其性能直接影响用户体验与产品竞争力。WT588F02B-8S语音芯片,凭借其静态功耗<5μA的卓越低功耗特性,成为物联网、智能家居、工业自动化等领域的理想选择,为设备赋予“听得懂、说得清”的智能化能力。一、核心优势:低功耗与高性能的完美结合超低待机功耗WT588F02B-8S在休眠模式下待机电流仅为5μA以下,显著延长了电池供电设备的续航能力。例如,在电子锁、气体检测仪等需长期待机的场景中,用户无需频繁更换电池,降低了维护成本。灵活的
      广州唯创电子 2025-04-02 08:34 136浏览
    • REACH和RoHS欧盟两项重要的环保法规有什么区别?适用范围有哪些?如何办理?REACH和RoHS是欧盟两项重要的环保法规,主要区别如下:一、核心定义与目标RoHS全称为《关于限制在电子电器设备中使用某些有害成分的指令》,旨在限制电子电器产品中的铅(Pb)、汞(Hg)、镉(Cd)、六价铬(Cr6+)、多溴联苯(PBBs)和多溴二苯醚(PBDEs)共6种物质,通过限制特定材料使用保障健康和环境安全REACH全称为《化学品的注册、评估、授权和限制》,覆盖欧盟市场所有化学品(食品和药品除外),通过登
      张工13144450251 2025-03-31 21:18 137浏览
    •        在“软件定义汽车”的时代浪潮下,车载软件的重要性日益凸显,软件在整车成本中的比重逐步攀升,已成为汽车智能化、网联化、电动化发展的核心驱动力。车载软件的质量直接关系到车辆的安全性、可靠性以及用户体验,因此,构建一套科学、严谨、高效的车载软件研发流程,确保软件质量的稳定性和可控性,已成为行业共识和迫切需求。       作为汽车电子系统领域的杰出企业,经纬恒润深刻理解车载软件研发的复杂性和挑战性,致力于为O
      经纬恒润 2025-03-31 16:48 88浏览
    • 提到“质量”这两个字,我们不会忘记那些奠定基础的大师们:休哈特、戴明、朱兰、克劳士比、费根堡姆、石川馨、田口玄一……正是他们的思想和实践,构筑了现代质量管理的核心体系,也深远影响了无数企业和管理者。今天,就让我们一同致敬这些质量管理的先驱!(最近流行『吉卜力风格』AI插图,我们也来玩玩用『吉卜力风格』重绘质量大师画象)1. 休哈特:统计质量控制的奠基者沃尔特·A·休哈特,美国工程师、统计学家,被誉为“统计质量控制之父”。1924年,他提出世界上第一张控制图,并于1931年出版《产品制造质量的经济
      优思学院 2025-04-01 14:02 141浏览
    • 引言随着物联网和智能设备的快速发展,语音交互技术逐渐成为提升用户体验的核心功能之一。在此背景下,WT588E02B-8S语音芯片,凭借其创新的远程更新(OTA)功能、灵活定制能力及高集成度设计,成为智能设备语音方案的优选。本文将从技术特性、远程更新机制及典型应用场景三方面,解析该芯片的技术优势与实际应用价值。一、WT588E02B-8S语音芯片的核心技术特性高性能硬件架构WT588E02B-8S采用16位DSP内核,内部振荡频率达32MHz,支持16位PWM/DAC输出,可直接驱动8Ω/0.5W
      广州唯创电子 2025-04-01 08:38 156浏览
    • 文/郭楚妤编辑/cc孙聪颖‍不久前,中国发展高层论坛 2025 年年会(CDF)刚刚落下帷幕。本次年会围绕 “全面释放发展动能,共促全球经济稳定增长” 这一主题,吸引了全球各界目光,众多重磅嘉宾的出席与发言成为舆论焦点。其中,韩国三星集团会长李在镕时隔两年的访华之行,更是引发广泛热议。一直以来,李在镕给外界的印象是不苟言笑。然而,在论坛开幕前一天,李在镕却意外打破固有形象。3 月 22 日,李在镕与高通公司总裁安蒙一同现身北京小米汽车工厂。小米方面极为重视此次会面,CEO 雷军亲自接待,小米副董
      华尔街科技眼 2025-04-01 19:39 191浏览
    • 退火炉,作为热处理设备的一种,广泛应用于各种金属材料的退火处理。那么,退火炉究竟是干嘛用的呢?一、退火炉的主要用途退火炉主要用于金属材料(如钢、铁、铜等)的热处理,通过退火工艺改善材料的机械性能,消除内应力和组织缺陷,提高材料的塑性和韧性。退火过程中,材料被加热到一定温度后保持一段时间,然后以适当的速度冷却,以达到改善材料性能的目的。二、退火炉的工作原理退火炉通过电热元件(如电阻丝、硅碳棒等)或燃气燃烧器加热炉膛,使炉内温度达到所需的退火温度。在退火过程中,炉内的温度、加热速度和冷却速度都可以根
      锦正茂科技 2025-04-02 10:13 50浏览
    • 引言在语音芯片设计中,输出电路的设计直接影响音频质量与系统稳定性。WT588系列语音芯片(如WT588F02B、WT588F02A/04A/08A等),因其高集成度与灵活性被广泛应用于智能设备。然而,不同型号在硬件设计上存在关键差异,尤其是DAC加功放输出电路的配置要求。本文将从硬件架构、电路设计要点及选型建议三方面,解析WT588F02B与F02A/04A/08A的核心区别,帮助开发者高效完成产品设计。一、核心硬件差异对比WT588F02B与F02A/04A/08A系列芯片均支持PWM直推喇叭
      广州唯创电子 2025-04-01 08:53 182浏览
    我要评论
    0
    0
    点击右上角,分享到朋友圈 我知道啦
    请使用浏览器分享功能 我知道啦