Tiny4412裸机程序,时钟操作

发布者:MagicGarden最新更新时间:2022-01-13 来源: eefocus关键字:Tiny4412  裸机程序  时钟操作 手机看文章 扫描二维码
随时随地手机看文章

其实,Exynos 4412的IROM代码已经设置了PLL,我们可以通过串口把IROM设置的PLL寄存器值打印出来,这些值打印出来是这样的(摘自韦东山老师的《嵌入式Linux系统开发完全手册_基于4412__上册》):


CLK_SRC_CPU = 0x01000001

CLK_DIV_DMC0 = 0x00111713

CLK_DIV_DMC1 = 0x01011171

CLK_SRC_TOP0 = 0x01110000

CLK_SRC_TOP1 = 0x00001000

CLK_DIV_TOP = 0x00015470

CLK_SRC_LEFTBUS = 0x00000001

CLK_DIV_LEFTBUS = 0x00000013

CLK_SRC_RIGHTBUS = 0x00000001

CLK_DIV_RIGHTBUS = 0x00000013

APLL_LOCK = 0x00000960

MPLL_LOCK = 0x00000000

EPLL_LOCK = 0x00000FFF

VPLL_LOCK = 0x00000FFF

CLK_DIV_CPU0 = 0x00773730

CLK_DIV_CPU1 = 0x00000077

APLL_CON1 = 0x00003800

APLL_CON0 = 0xA0640301

MPLL_CON1 = 0x00003800

MPLL_CON0 = 0xA0640301

EPLL_CON2 = 0x00000080

EPLL_CON1 = 0x66010000

EPLL_CON0 = 0x00600302

VPLL_CON2 = 0x00000080

VPLL_CON1 = 0x66016000

VPLL_CON0 = 0x006F0302

CLK_SRC_CPU = 0x01000001

CLK_SRC_DMC = 0x00111000

CLK_SRC_TOP0 = 0x01110000

CLK_SRC_TOP1 = 0x00001000


现在来计算 ARMCLK的时钟频率:

由上一节《Exynos4412时钟体系分析》的介绍我们知道,ARMCLK 有如下计算公式:

如下图所示:

143304_r2UT_2888084.png

由上边打印的寄存器CLK_SRC_CPU 的值为:

十六进制:0x01000001

二进制:0000 0001 0000 0000 0000 0000 0000 0001

  1. BIT[0] 控制第1个MUX (即 MUXAPLL) ,该位值为1.

  2. BIT[16]控制 第2个 MUX( 即MUXCORE) ,该位值为0.

所以由此看出ARMCLK时钟走的是如下的路线:

143414_wID2_2888084.png

所以:ARMCLK = MUXCORE的输出 / DIVCORE / DIVCORE2

ARMCLK = MDIV x FIN / (PDIV x 2 ^ SDIV) / (CORE_RATIO + 1) / (CORE2_RATIO + 1)

= 0x64 x 24MHz / (3 x 2 ^ 1) / (0 + 1) / (0 + 1)

= 400 MHz

本次实验涉及3个小实验:

  1. system_clock_disable_apll:不使用 APLL,让CPU运行于 24MHz 频率,观察 LED 闪烁是否变慢

  2. system_clock_apll:重新设置APLL,让 CPU 运行于1.4GHz频率,观察 LED 闪烁是否变快

  3. system_clock_plls:参考厂家提供的u-boot代码,设置所有PLL供后续章节使用

第一个小实验

实现的目标:不使用 APLL,让CPU运行于 24MHz 频率,观察 LED 闪烁是否变慢


一、程序说明

我们在前一个实验,《Tiny4412之C语言实现流水灯》的基础上修改。

start.S大部分相同,只是增加一条函数调用语句


bl system_clock_init // 调用时钟初始化函数


如下图所示:

143609_qhN7_2888084.png

链接脚本system_clock.lds的内容和上一个实验key.lds完全相同,只把名字改了改;Makefile的内容也大部分一样,也只是改了改里边文件的名字,led.c文件和LED实验时完全相同,新增加了文件system_clock.c,代码如下:



/* CMU_CPU */

#define CLK_SRC_CPU (*(volatile unsigned int *)0x10044200)

#define CLK_DIV_CPU0 (*(volatile unsigned int *)0x10044500)

#define CLK_DIV_CPU1 (*(volatile unsigned int *)0x10044504)

 

/* CMU_DMC */

#define CLK_SRC_DMC (*(volatile unsigned int *)0x10040200)

#define CLK_DIV_DMC0 (*(volatile unsigned int *)0x10040500)

#define CLK_DIV_DMC1 (*(volatile unsigned int *)0x10040504)

 

/* CMU_TOP */

#define CLK_SRC_TOP0 (*(volatile unsigned int *)0x1003C210)

#define CLK_SRC_TOP1 (*(volatile unsigned int *)0x1003C214)

#define CLK_DIV_TOP (*(volatile unsigned int *)0x1003C510)

 

/* CMU_LEFTBUS */

#define CLK_SRC_LEFTBUS (*(volatile unsigned int *)0x10034200)

#define CLK_DIV_LEFTBUS (*(volatile unsigned int *)0x10034500)

 

/* CMU_RIGHTBUS */

#define CLK_SRC_RIGHTBUS (*(volatile unsigned int *)0x10038200)

#define CLK_DIV_RIGHTBUS (*(volatile unsigned int *)0x10038500)

 

/* locktime */

#define APLL_LOCK (*(volatile unsigned int *)0x10044000)

#define MPLL_LOCK (*(volatile unsigned int *)0x10044008)

#define EPLL_LOCK (*(volatile unsigned int *)0x1003C010)

#define VPLL_LOCK (*(volatile unsigned int *)0x1003C020)

 

/* APLL */

#define APLL_CON1 (*(volatile unsigned int *)0x10044104)

#define APLL_CON0 (*(volatile unsigned int *)0x10044100)

 

/* MPLL */

#define MPLL_CON0 (*(volatile unsigned int *)0x10040108)

#define MPLL_CON1 (*(volatile unsigned int *)0x1004010c)

 

/* EPLL */

#define EPLL_CON2 (*(volatile unsigned int *)0x1003C118)

#define EPLL_CON1 (*(volatile unsigned int *)0x1003C114)

#define EPLL_CON0 (*(volatile unsigned int *)0x1003C110)

 

/* VPLL */

#define VPLL_CON0 (*(volatile unsigned int *)0x1003C120)

#define VPLL_CON1 (*(volatile unsigned int *)0x1003C124)

#define VPLL_CON2 (*(volatile unsigned int *)0x1003C128)

 

/*

 * 函数名:

 * system_clock_init

 * 功能: 初始化4412的系统时钟

 */

void system_clock_init(void)

{

/* IROM或BL1设置了APLL,

* 本程序设置不启动APLL,

* 而是使在晶振时钟, 以体验一下LED闪灯变慢

*/

CLK_SRC_CPU = 0x0;

}


没什么可说的,很简单,前部分是后期会用到的一些寄存器地址的定义,主要的是下边system_clock_init这个函数,在这个函数中将CLK_SRC_CPU寄存器的值设为0,这样ARMCLK的频率将走下面这条路径,设置为24MHZ:

143739_IAPZ_2888084.png

二、编译、烧写实验

按照前几节介绍的方法,将程序上传到服务器编译,并烧写到SD卡上,给开发板上电,可以明显感觉到LED闪烁的频率大大降低,说明我们设置的时钟起作用了,这里就不上图了(上了图大家也看不出来)。

第二个小实验

实现的目标:重新设置APLL,让 CPU 运行于1.4GHz频率,观察 LED 闪烁是否变快

一、程序说明

文件同第一个小实验,只是在它的基础上对system_clock.c文件中的system_clock_init函数进行修改:



/*

* 函数名: system_clock_init

* 功 能: 初始化4412的系统时钟

* 最终结果: APLL=1.4GHz

*/

void system_clock_init(void)

{

/*

* 1. 在设置APLL之前, 先设置时钟源为晶振

*/

CLK_SRC_CPU = 0x0;

 

/*

* 2. 设置APLL

*/

 

/* 2.1 设置锁定时间: APLL_CON0中PDIV=3, 所以APLL_LOCK = 270x3 */

APLL_LOCK = 270 * 3;

 

/* 2.2 设置分频参数 */

/*

* CORE2_RATIO = 0;

* APLL_RATIO = 2;

* PCLK_DBG_RATIO = 1;

* ATB_RATIO = 6;

* PERIPH_RATIO = 7;

* COREM1_RATIO = 7;

* COREM0_RATIO = 3;

* CORE_RATIO = 0;

*/

CLK_DIV_CPU0 = ((0<<28) | (2<<24) | (1<<20) | (6<<16) | (7<<12) | (7<<8) | (3<<4) | 0);

 

/*

* CORES_RATIO = 5;

* HPM_RATIO = 0;

* COPY_RATIO = 6;

*/

CLK_DIV_CPU1 = ((5 << 8) |(0 << 4) | (6));

 

/* 2.3 设置控制参数并使能PLL */

/* 默认值 */

APLL_CON1 = 0x00803800;

 

/*

* 设置APLL的M,P,S值, APLL输出 = 0xAF x 24MHz / (3 x 2 ^ 0) = 1.4GHz

* 使能APLL

*/

APLL_CON0 = (1<<31 | 0xAF<<16 | 3<<8 | 0x0);

 

/* 3. 设置MUX, 使用APLL的输出 */

CLK_SRC_CPU = 0x01000001;

}


注释的已经很清楚了,需要注意的就是:上电之后 IROM设置了APLL ,CPU工作于APLL提供的时钟;当我们要改变 APLL时,要先使得CPU工作于另一个时钟源,即晶振。设置完APLL后,再让CPU重新工作于APLL提供的时钟。


二、编译、烧写实验

按照前几节介绍的方法,将程序上传到服务器编译,并烧写到SD卡上,给开发板上电,可以明显感觉到LED闪烁的频率大大提高(比《Tiny4412之C语言实现流水灯》时闪烁的还要快,因为当时CPU运行在400MHZ,现在运行在1.4GHZ),说明我们设置的时钟起作用了,这里就不上图了(上了图大家也看不出来)。


第三个小实验

实现的目标:参考厂家提供的u-boot代码,设置所有PLL供后续章节使用

一、程序说明

文件同第一个小实验,只是在它的基础上对system_clock.c文件中的system_clock_init函数进行修改:



/*

函数名:

system_clock_init

功能:

初始化4412的系统时钟

最终结果:

A=1400000000, M=800000000, E=96000000 V=350000000

ARMCLK=1500000000, DMC=400000000, ACLK200=160000000

ACLK100=100000000, ACLK160=160000000, ACLK133=133333333

*/

void system_clock_init(void)

{

/* 1.设置CMU_CPU相关 */

CLK_SRC_CPU = 0x0; // 设置CMU_CPU部分中所有的MUX的源

 

/* 2.设置CMU_DMC相关 */

/*

CORE_TIMERS_RATIO = 0x0;

COPY2_RATIO = 0x0;

DMCP_RATIO = 0x1;

DMCD_RATIO = 0x1;

DMC_RATIO = 0x1;

DPHY_RATIO = 0x1;

ACP_PCLK_RATIO = 0x1;

ACP_RATIO = 0x3;

*/

CLK_DIV_DMC0 = ((0x0 << 28) | (0x0 << 24) | (0x1 << 20) | (0x1 << 16) | (0x1 << 12) | (0x1 << 8) | (0x1 << 4) | (0x3));

CLK_DIV_DMC1 = 0x07071713;

 

/* 3.设置CMU_TOP相关 */

/*

MUX_ONENAND_SEL = 0x0;

MUX_ACLK_133_SEL = 0x0;

MUX_ACLK_160_SEL = 0x0;

MUX_ACLK_100_SEL = 0x0;

MUX_ACLK_200_SEL = 0x0;

MUX_VPLL_SEL = 0x1;

MUX_EPLL_SEL = 0x1;

*/

CLK_SRC_TOP0 = ((0x0 << 28) | (0x0 << 24) | (0x0 << 20) | (0x0 << 16) | (0x0 << 12) | (0x1 << 8) | (0x1 << 4));

CLK_SRC_TOP1 = 0x01111000;

 

/*

ACLK_400_MCUISP_RATIO = 0x1;

ACLK_266_GPS_RATIO = 0x2;

ONENAND_RATIO = 0x1;

ACLK_133_RATIO = 0x5;

ACLK_160_RATIO = 0x4;

ACLK_100_RATIO = 0x7;

ACLK_200_RATIO = 0x4;

*/

CLK_DIV_TOP = ((0x1 << 24) | (0x2 << 20) | (0x1 << 16) | (0x5 << 12) | (0x4 << 8) | (0x7 << 4) | (0x4));

 

/* 3.设置CMU_LEFTBUS相关 */

CLK_SRC_LEFTBUS = 0x10;

 

/*

GPL_RATIO = 0x1;

GDL_RATIO = 0x3;

*/

CLK_DIV_LEFTBUS = ((0x1 << 4) | (0x3));

 

/* 4.设置CMU_RIGHTBUS相关 */

CLK_SRC_RIGHTBUS = 0x10;

 

/*

GPR_RATIO = 0x1;

GDR_RATIO = 0x3;

*/

CLK_DIV_RIGHTBUS = ((0x1 << 4) | (0x3));

 

/* 5.设置各个锁相环(PLL)的locktime */

APLL_LOCK = (0x3 * 270);

MPLL_LOCK = (0x3 * 270);

EPLL_LOCK = (0x2 * 3000);

VPLL_LOCK = (0x2 * 3000);

/*

APLL_RATIO = 0x2;

CORE_RATIO = 0x0;

CORE2_RATIO = 0x0;

COREM0_RATIO = 0x3;

COREM1_RATIO = 0x7;

PERIPH_RATIO = 0x7;

ATB_RATIO = 0x6;

PCLK_DBG_RATIO = 0x1;

*/

CLK_DIV_CPU0 = ((0x0 << 28) | (0x2 << 24) | (0x1 << 20) | (0x6 << 16) | (0x7 <<12) | (0x7 << 8) | (0x3 << 4) | (0x0));

/*

CORES_RATIO = 0x5;

HPM_RATIO = 0x0;

COPY_RATIO = 0x6;

*/

CLK_DIV_CPU1 = ((0x5 << 8) |(0x0 << 4) | (0x6));

 

/* 6.设置APLL = 1400000000 */

APLL_CON1 = 0x00803800;

APLL_CON0 = (1<<31 | 0xAF<<16 | 0x3<<8 | 0x0);

 

/* 7.设置MPLL = 800000000 */

MPLL_CON1 = 0x00803800;

MPLL_CON0 = (1<<31 | 0x64<<16 | 0x3<<8 | 0x0);

 

/* 8.设置EPLL = 96000000 */

EPLL_CON2 = 0x00000080;

EPLL_CON1 = 0x66010000;

EPLL_CON0 = (1<<31 | 0x40<<16 | 0x2<<8 | 0x3);

 

/* 9.设置VPLL = 350000000 */

VPLL_CON2 = 0x00000080;

VPLL_CON1 = 0x66010000;

VPLL_CON0 = (1<<31 | 0x48<<16 | 0x2<<8 | 0x3);

 

/*10.修改源*/

CLK_SRC_CPU = 0x01000001;

CLK_SRC_DMC = 0x00011000;

CLK_SRC_TOP0 = 0x00000110;

CLK_SRC_TOP1 = 0x01111000;

}


二、编译、烧写实验

按照前几节介绍的方法,将程序上传到服务器编译,并烧写到SD卡上,给开发板上电,现象和第二个小实验完全相同。

关键字:Tiny4412  裸机程序  时钟操作 引用地址:Tiny4412裸机程序,时钟操作

上一篇:tiny4412 时钟测试
下一篇:Tiny4412裸机程序之操作ICache

推荐阅读最新更新时间:2024-11-17 03:04

Eclipse开发调试ARM裸机程序(三)C语言LED_LINUX使用DNW
第二个程序用C语言实现的LED程序,Startup.S是启动代码;led_on_c.c是C语言实现的LED点灯程序。代码分别如下: @ @ File:Startup.S @ 功能:通过它转入C程序 @ .text .global _start _start: ldr r0, =0x56000010 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
[单片机]
Eclipse开发调试ARM<font color='red'>裸机</font><font color='red'>程序</font>(三)C语言LED_LINUX使用DNW
基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 摘要 上一篇 博文在tiny4412上移植了MMA7660驱动程序,使用的是exynos4
[单片机]
基于<font color='red'>tiny4412</font>的Linux内核移植 -- MMA7660驱动移植(九-2)
S3C2440裸机------异常与中断__定时器中断程序示例
1.定时器的工作原理 注意当TCNTn=TCMPn时不会产生中断。 2.代码 2.1 timer.c 首先是根据上面的两个寄存器设置时钟; /* 设置TIMER0的时钟 */ /* Timer clk = PCLK / {prescaler value+1} / {divider value} = 50000000/(99+1)/16 = 31250 */ TCFG0 = 99; /* Prescaler 0 = 99, 用于timer0,1 */ TCFG1 &= ~0xf; TCFG1 |= 3; /* MUX0 : 1/16 */ 然后根据上图的寄存器设置初始值。 /*
[单片机]
S3C2440<font color='red'>裸机</font>------异常与中断__定时器中断<font color='red'>程序</font>示例
mini2440烧写裸机程序
1、实现1+2+3------+100 AREA test02,CODE,READONLY start MOV R0,#0 MOV R1,#1 MOV R2,#1 LOOP ADD R2,R2,R0 ADD R1,R1,#1 CMP R1,#101 BEQ label ADD R2,R2,R1 B LOOP label NOP NOP NOP END 2、汇编LED测试 /************************************ *注意修改段名为testLED(两处修改) *在MDK中,要添加簇文件RuninRAM.sct *在MDK中,要添加初始化文件Ext_RAM.ini
[单片机]
Exynos4412裸机程序之DDR工作原理与时序(二)
上一篇文章 Tiny4412裸机程序之DDR工作原理与时序(一) 我们学习了DDR SDRAM的工作原理,这一节我们接着讲一下DDR2的一些知识,看看与DDR、SDRAM 有什么不同,这一节的内容也基本来自于网络。 DDR的发展沿着更高数据传输频率,更大内存容量的方向发展,DDR2中做到更高数据传输频率,由DDR的2-bit pretetch向4-bit pretetch发展,而扩展容量,除了增加每个L-Bank的容量以外,另外就是增加L-Bank数,也就是说在内存中,原来DDR中Bank线只有2根,一块内存芯片最多2^2=4片L-Bank,而在DDR2中变成了2^3=8片L-Bank。(下面的一些图和文档出自于芯片手册) 一、4
[单片机]
Exynos4412<font color='red'>裸机</font><font color='red'>程序</font>之DDR工作原理与时序(二)
openocd 命令行烧写ARM裸机程序
以前是用RVDS 的IDE来烧写调试ARM程序的,不过RVDS虽然是集成化的调试工具调试起来方便,但是有的时候只知其一,不知其二,只知道按部就班的来点击按钮,忽略了一些本质性的东西。而且RVDS还有一个不好的地方是它只能在windows平台下运行,不支持Linux OS。为了便于学习Linux,使用Openocd会是个不错的选择,可以学习gnu 汇编,Makefile编写,工具链命令行使用。 如果这些命令搞熟悉了,你还可以利用Qt 来做个自己的图形化界面烧写调试工具。(不过这只是个壳子而已,精髓在于openocd ,所以如果有时间你还可以分析一下Openocd的源码,因为它是开源的,开源的东西就是好,它可以满足你的好奇心,虽然有些
[单片机]
正在删除 s3c6410裸机程序(2)
  本来以为自己可以很快就把中断程序写好的,但是没想到知道昨天才有了点眉目,虽然还不知道对不对,但是写出来给大家批评指正。   笔者自从上次写了一个轮询式的按键驱动LED灯之后就一直在弄中断这一部分,可是弄来弄去都没什么起色,只好也中断一段时间去配置自己的linux系统,写写应用程序,果然停了几天后突然就成了,真是不知道怎么回事。下面说说笔者的思路。   笔者从《ARM体系结构与编程》这本书中知道了ARM中有七种中断,中断需要中断向量表,而且中断向量表需要放在最低端从地址空间0开始的连续32字节内,为什么七个中断要32字节呢?因为倒数第三个四字节的空间需要空出来。然后是ARM中的中断处理体系,想必阅者都知道x86的中断过程
[单片机]

推荐帖子

某宝买了几个金封三极管,丝印徒手可以擦掉
这样的三极管是不是假的?引脚吸力超强某宝买了几个金封三极管,丝印徒手可以擦掉假货宝,假货宝虾大要做多大功率的电源?都上金封了:lol 想不加风扇弄个35V5A的能行不?拆机件的可能性比较大 不加散热器或是风扇不行。就是加了散热器也需根据散热器的体积以及自然风冷的空气对流实际状况验证,最好是计算出三极管的功耗。看不出来真假,估计是翻新的,我买器件,认可买原装进口拆机件,也不买国内翻新的。丝印徒手可以擦掉,字迹必是后来印上去的。估计是拆机件,外形相同,型
littleshrimp 电源技术
存储介质的类型有哪些?
存储设备已经成为许多嵌入式应用中不可缺少的组成部分。要选择最优的存储介质,需要考虑应用的具体需求。嵌入式应用中最常用的存储介质包括NORFlash、NANDFlash、SD/MMC卡、大容量存储设备和RAM。NORFlash和NANDFlash都是非易失性存储介质,即使没有电源,也可以保留数据。MultiMediaCard(MMC)和SecureDigital(SD)卡是符合相应标准的Flash存储卡,也是非易失性存储设备。USB大容量存储设备类(USBMSC)是
MamoYU 综合技术交流
嵌入式USB设备问题请教
一个USB指纹采集设备,用本地编译成的可执行文件SYDemo,运行SYDemo后,USB设备在PC机上可以正常运行,接着用交叉编译生成的SYDemo下载到板子上,显示不能打开USB设备。请问是什么地方出错了呢???嵌入式USB设备问题请教linux的东西正要学习,帮你顶顶了会不会是没写驱动?
sda4576 嵌入式系统
关于DM642视频采集驱动问题
自己做了一个图像处理板,解码芯片用的tvp5150am1,连接DM642的videoport1端口,图像采集驱动使用的是TI,datasheet文档中的案例程序。经过一系列的调试,发现最后VPIS寄存器中的CCMPA位始终为0,通过轮询和中断的方式都检测不到CCMPA的变化,从而capNewFrame始终为0,程序一直停留在while(capNewFrame==0){}处。其中我已经对videoport和edma按照文档要求进行了设置,不知道还有那些情况没有考虑到?请教做过这种开发的同志们
xmd DSP 与 ARM 处理器
求高通DB142 development board资料(QCA4002)
今天放假,整理板子发现一块qualcomm的wifi开发板,网上找了一圈没有找到任何资料。拍了几个细节图,大家帮忙找找看,能找到资料么,或者有哪位坛友正好有这个板子,希望可以来点资料。正面:背面:细节1:细节2:最后一幅图,前几天用E金币兑换的破壁机,那天可以便宜200。实际效果还可以,比想象的好点,当然没法和进口的比了,不是一个档次的。谢谢大家了。求高通DB142developmentboard资料(QCA4002)高大上的板子
lyzhangxiang RF/无线
【2024 DigiKey 创意大赛】+总结
一、作品简介本项目是利用自己设计一款功能强大的PCB扩展板,与现有的Espressif(乐鑫)ESP32-S3-LCD-EV-Board触摸屏显示评估板相连接,实现温湿度数据显示、数据存储等实用功能。使用软件部分将基于ESP32-S3和rp2040双核心进行通信开发,其中ESP32-S3作为主核心负责LVGL用户交互界面的运行和显示,而rp2040作为副核心则负责温湿度数据的采集、处理以及与主核心的两者之间通信,并实时的显示在屏上,而且也在PC端进行数据打印,使用LVGL界面
meiyao DigiKey得捷技术专区
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved