日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

實(shí)戰(zhàn)經(jīng)驗(yàn) | 移植 SBSFU 到 STM32G070 的過(guò)程

發(fā)布者:BlissfulDreams最新更新時(shí)間:2024-09-12 來(lái)源: elecfans關(guān)鍵字:實(shí)戰(zhàn)經(jīng)驗(yàn)  移植 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

01

前言


客戶(hù)使用 STM32G070RBT6 給海外用戶(hù)開(kāi)發(fā)產(chǎn)品,由于當(dāng)?shù)匦滦枨?,產(chǎn)品需要增加安全啟動(dòng)的功能。但是由于 X-Cube-SBSFU 包提供的示例中,只有基于 STM32G071 的示例??蛻?hù)因此詢(xún)問(wèn)該怎么移植。本文將講解這個(gè)移植過(guò)程。


02

基于STM32G070和STM32G071的SBSFU 實(shí)現(xiàn)差異


在正式講解之前,我們首先來(lái)看一看 STM32G070 和 STM32G071 的 SBSFU 實(shí)現(xiàn)差異。


STM32G070 是一個(gè) value line 產(chǎn)品,首先,我們要意識(shí)到,有一些安全特性,相比于STM32G071,它是沒(méi)有的,比如:PCROP,BOOT_LOCK 和 Secure User Memory。那么,缺少了這些安全特性的 STM32G070,是否還能實(shí)現(xiàn)安全啟動(dòng)的功能呢 ? 答案是肯定的。我們先來(lái)看 PCROP,BOOT_LOCK,以及 Secure User Memory 在 STM32G071 上的 SBSFU 實(shí)現(xiàn)中所扮演的角色是什么?


圖1.STM32G0 的 SBSFU 安全實(shí)現(xiàn)


如上圖,在 STM32G071 中,在安全啟動(dòng)的實(shí)現(xiàn)中,BOOT_LOCK 用來(lái)參與實(shí)現(xiàn)唯一啟動(dòng)入口,Secure User Memory 則用來(lái)參與實(shí)現(xiàn)信任根。PCROP 在安全固件升級(jí)實(shí)現(xiàn)中用來(lái)與MPU 配合實(shí)現(xiàn)密鑰的安全存儲(chǔ),同時(shí)在安全升級(jí)過(guò)程中涉及到一些密鑰的加解密操作,借助于Secure User Memory 和 MPU 的功能, 將 App 與 SBSFU 本身實(shí)現(xiàn)完美隔離。


圖2.STM32G0 內(nèi)存安全映射(運(yùn)行 SBSFU 時(shí))


回到當(dāng)前問(wèn)題,一旦 BOOT_LOCK,PCROP,以及 Secure User Memory 缺少的情況下,這些功能還能實(shí)現(xiàn)嗎?


我們?cè)賮?lái)看下對(duì)于安全啟動(dòng)而言, 它需要實(shí)現(xiàn)哪些基本功能?

1> 不可更改不可繞過(guò)的一段啟動(dòng)代碼

2> 每次復(fù)位必先執(zhí)行安全啟動(dòng)代碼

3> 驗(yàn)證系統(tǒng)配置的完整性

? 時(shí)鐘配置

寄存器配置

? 存儲(chǔ)器保護(hù)設(shè)置, ….

4> 啟動(dòng)信任根服務(wù)

? 通過(guò)密碼學(xué)算法與密鑰,校驗(yàn) App 的完整性與合法性(來(lái)源可信,未經(jīng)篡改)


這里需要注意地是,上面提到的某一項(xiàng)安全屬性也只是參與實(shí)現(xiàn)某一項(xiàng)功能,比如BOOT_LOCK,它只是”參與”實(shí)現(xiàn)了唯一啟動(dòng)入口這個(gè)功能。從圖 1 可知, 除了BOOT_LOCK,還有 RDP,那么在缺少 BOOT_LOCK 的情況下,RDP 是否也可以實(shí)現(xiàn)唯一入口啟動(dòng)的功能。很明顯,在 RDP2 時(shí),MCU 的入口是唯一的。也就是說(shuō),沒(méi)有 BOOT_LOCK的參與下,RDP2 一樣可以實(shí)現(xiàn)安全啟動(dòng)對(duì)唯一入口啟動(dòng)的需求。RDP2+WRP 就可以實(shí)現(xiàn)安全啟動(dòng)的前兩條基本要求。而第三條基本要求,完全是 SBSFU 內(nèi)的純軟件實(shí)現(xiàn)。第四條要求,通過(guò) RDP2+WRP+MPU 也可以實(shí)現(xiàn)。其實(shí), 在缺少了 PCROP,BOOT_LOCK 和Secure User Memory 后,STM32G070 的安全特性其實(shí)跟 STM32F4 差不多,我們不妨來(lái)看下STM32F4 是如何來(lái)實(shí)現(xiàn) SBSFU 功能的。


圖3.STM32F4 的 SBSFU 安全實(shí)現(xiàn)


如上圖所示,在 STM32F4 中,借助于 RDPL2,WRP,MPU 就實(shí)現(xiàn)了 SBSFU 的全部功能。


圖4.STM32F4 的 SBSFU 內(nèi)存映射


到這里,我們完全可以確信,在缺少了 BOOT_LOCK,PCROP 和 Secure User Memory這些安全特性之后,STM32G070 完全可以按照 STM32F4 實(shí)現(xiàn) SBSFU 的方式來(lái)進(jìn)行!


在確立了大方向后, 我們接下來(lái)看具體如何實(shí)現(xiàn)。


03

開(kāi)始移植


第一步 : 確保原始工程運(yùn)行正常

從 ST 官網(wǎng)上下載最新了 SBSFU 包(v2.6.1),打開(kāi)STM32CubeExpansion_SBSFU_V2.6.1ProjectsNUCLEO-G071RBApplications2_Images目錄,其下有三個(gè)工程,2_Images_SECoreBin(后續(xù)簡(jiǎn)稱(chēng) SECoreBin 工程),2_Images_SBSFU(后續(xù)簡(jiǎn)稱(chēng) SBSFU 工程),2_Images_UserApp(后續(xù)簡(jiǎn)稱(chēng) UserApp 工程)。使用對(duì)應(yīng) IDE 按順序依次編譯, 然后將 SBSFU 工程生成的 bin 文件燒錄到 NUCLEO-G071RB板內(nèi),打開(kāi) Tera Term 串口終端, 通過(guò) Tera Term 燒錄 APP 進(jìn)去。目的是首先確認(rèn)原始工程一切運(yùn)行正常。接下來(lái)就開(kāi)始修改了。


第二步 : 將與 BOOT_LOCK, PCROP, Secure User Memory 相關(guān)的宏全部關(guān)閉

打開(kāi) SBSFU 工程的 app_sfu.h 頭文件,找到并關(guān)閉下面三個(gè)宏 :



重新依次編譯 SBCoreBin,SBSFU,UserApp 三個(gè)工程,并重新測(cè)試通過(guò)。


至此, NUCLEO-G071RB 板上運(yùn)行的是移除了 BOOT_LOCK, PCROP,Secure User Memory 三個(gè)安全特性后的 SBSFU 程序,這個(gè)原理上與 STM32G070 上原則上是一致的。接下來(lái)就是要移植到 NUCLEO-G070RB 板上了,剩下的就只有 STM32G070 與 STM32G071 的非安全特性方面的差異了。


第三步 : 移植到 STM32G070RB

首先得準(zhǔn)備下一塊 NUCLEO-G070RB 板。接著將三個(gè)工程 SBCoreBin,SBSFU,UserApp 的 device 修改成目標(biāo) MCU STM32G070RB,然后將三個(gè)工程的 C++預(yù)定義宏STM32G071xx 修改成 STM32G070xx。


以 Keil 為例 :


圖5.device 選擇 STM32G070RBTx


圖6.C++編譯宏修改


STM32CubeIDE 工程的 device 配置比較難修改,因?yàn)樗臼腔疑?,不允許修改。但我們使用 UE 打開(kāi).cproject 一樣可以強(qiáng)制修改 :


打開(kāi)對(duì)應(yīng)的.cproject 文件,搜索關(guān)鍵字 G071,將以下幾處替換成 G070(修改兩處) :


圖7.STM32CubeIDE 下的 device 修改


修改完后,打開(kāi) STM32CubeIDE 工程,在其 MCU 和 Board 的配置也會(huì)有相應(yīng)的變化:


圖8.STM32CubeIDE 的 MCU 配置


由此可見(jiàn),在 STM32CubeIDE 工程的 MCU 配置也可以做相應(yīng)的修改了。這是一個(gè)小技巧。


至此,三個(gè)工程的工程配置都做完了相應(yīng)修改。接下來(lái)的就是代碼方面的修改了。


首先 STM32G070 的時(shí)鐘樹(shù)是沒(méi)有 PLLQ 輸出的,因此,在 SBSFU 和 UserApp 這兩個(gè)工程內(nèi)找到 SystemClock_Config()函數(shù),注釋掉 PLLQ 的設(shè)置,如下所示 :



原先 STM32G071 的工程中的打印信息是通過(guò) LPUART1 對(duì)應(yīng)的 PA2,PA3 打印的,換成NUCLEO-G070RB 板后,其引腳雖仍然是 PA2,PA3 引腳用來(lái)串口打印,但是 STM32G070中是沒(méi)有 LPUART1 這個(gè)外設(shè)的,需要換成 USART2,因此,其對(duì)應(yīng)的代碼修改如下 :


在 SBSFU 工程中, 打開(kāi) sfu_low_level.h 頭文件 , 和 UserApp 工程的 com.h 頭文件中:



如上紅色部分即為修改處。


至此,代碼部分全部修改完成。重新按順序依次編譯 SBCoreBin,SBSFU,UserApp 三個(gè)工程,將 SBSFU 工程首先燒錄到 NUCLEO-G070RB 板,然后通過(guò)串口終端,按提示,用 YModern 協(xié)議將 UserApp 對(duì)應(yīng)的.sfu 文件燒錄進(jìn)去。整個(gè)流程都可以正常運(yùn)行的。這說(shuō)明軟件框架基本已經(jīng) OK。接下來(lái)運(yùn)行下 APP 中各種安全測(cè)試。


04

測(cè)試安全保護(hù)特性


當(dāng)程序跳入到 APP 后,顯示如下界面


圖9.測(cè)試主界面


當(dāng)選擇 2 Test Protection :Secure User Memory 時(shí),結(jié)果會(huì)出錯(cuò) :


圖10.測(cè)試保護(hù)


很明顯,這里需要修改下,因?yàn)?STM32G070 是沒(méi)有 Secure User Memory 的。查看其對(duì)應(yīng)代碼:



原來(lái) UserApp 是測(cè)試直接讀取保存在 SECoreBin 內(nèi)的密鑰數(shù)據(jù), 測(cè)試是否能讀出。結(jié)果發(fā)現(xiàn)是可以的,因此,保護(hù)效果是出問(wèn)題了。


首先我們修改下此函數(shù),由于 STM32G070 中 Secure User Memory 是不存在的, 此函數(shù)叫 TEST_PROTECTIONS_RunSecUserMem_CODE()已經(jīng)不再合適, 依照 STM32F4 的SBSFU 實(shí)現(xiàn),將此函數(shù)換成 TEST_PROTECTIONS_RunSE_CODE()函數(shù):



同樣的嘗試讀取密鑰:


圖11.UserApp 嘗試讀取密鑰


測(cè)試結(jié)果可想而知, 肯定是可以讀取的。于是得查看下為什么可以。


仔細(xì)查看圖 2 的 STM32G071 的 SBSFU 原來(lái)實(shí)現(xiàn)中,SE Key 是通過(guò) PCROP+Secure User Memory 來(lái)保護(hù)的,現(xiàn)在換成 STM32G070,原本 Secure User Memory 用來(lái)作隔離機(jī)制, 現(xiàn)在換成了 MPU, 而原本保護(hù) SE Key 的 PCROP 在 G070 中壓根就不存在,于是 SE Key 只剩下 MPU 來(lái)保護(hù),因此,我們接下來(lái)得著重分析 MPU 對(duì) SE Key 的保護(hù)。


為了方便調(diào)試,我們首先得將除 MPU 以外的所有保護(hù)通通關(guān)閉,只剩下 MPU 保護(hù)。于是在 SBSFU 工程中,在 app_sfu.h 頭文件中,將以下宏通通注釋掉:



然后開(kāi)始調(diào)試。在調(diào)試過(guò)程中,發(fā)現(xiàn)程序在從 SBSFU 跳轉(zhuǎn)到 UserApp 之前,在代碼中特意將 MPU 關(guān)閉:


如在 sfu_low_level_security.c 源文件中的內(nèi)存函數(shù) SFU_LL_SECU_ActivateSecUser()中有這么一行代碼:



這就是為什么 UserApp 中仍然可以直接讀取密鑰的原因了。很明顯,接下來(lái)我們需要將 SEKey 用 MPU 保護(hù)起來(lái)。但在這之前,我們得首先弄清楚,當(dāng)程序跳轉(zhuǎn)到 UserApp 后,F(xiàn)lash 和Ram 該如何設(shè)置 MPU 保護(hù)?


在 UM2262 中, 有提到當(dāng)程序跳轉(zhuǎn)到 UserApp 后 flash 和 RAM 的狀態(tài):


圖12.UserApp 運(yùn)行時(shí)的 flash 和 RAM 狀態(tài)


從上圖可以看出,原本 Secure User Memory 保護(hù)的區(qū)域,我們得使用 MPU 來(lái)替代實(shí)現(xiàn)相應(yīng)功能,包含 SBSFU 整個(gè)代碼和 Slot#1 內(nèi)的 header 信息。這也就是在代碼跳轉(zhuǎn)到 UserApp之前需要做的事情。而黃色對(duì)應(yīng)的 SRAM 區(qū)別已經(jīng)擦除,當(dāng)程序跳轉(zhuǎn)到 UserApp 后其實(shí)已經(jīng)沒(méi)必要再保護(hù)。


于是在跳轉(zhuǎn)到 UserApp 的內(nèi)存函數(shù)中配置 MPU:



注意這里是一個(gè)內(nèi)存函數(shù),它所調(diào)用的所有子函數(shù)也都是內(nèi)存函數(shù)。在這個(gè)函數(shù)中我們將SBSFU 所在的 64K Flash,再加上 2K 的 Active Slot 的 header 信息保護(hù)起來(lái)。內(nèi)存 RAM 我們并沒(méi)有配置保護(hù),因?yàn)樘D(zhuǎn)到 UserApp 后它就完全開(kāi)放,且內(nèi)容已經(jīng)清空。


對(duì)應(yīng)的, 我們?cè)?UserApp 中增加對(duì) Header 的測(cè)試函數(shù) :



重新燒錄程序,當(dāng)程序運(yùn)行后,選擇 2 進(jìn)行 protection 測(cè)試,然后再選擇 2,測(cè)試訪問(wèn)SBSFU 所有的 64K 區(qū)域:


圖13.測(cè)試 SBSFU 的 64K 代碼區(qū)


發(fā)現(xiàn)會(huì)一直卡住, 這說(shuō)明 MPU 對(duì)整個(gè) SBSFU 64K 區(qū)域的保護(hù)已經(jīng)生效。同樣的,選擇’3’測(cè)試 header 所在區(qū)域:


圖14.測(cè)試 Header 對(duì)應(yīng)的 2K 區(qū)域


發(fā)現(xiàn)程序讀取 0x0801 0000 地址時(shí)會(huì)一直卡住,這說(shuō)明 MPU 對(duì) header 的保護(hù)也已經(jīng)生效。然后再測(cè)試了下其它選項(xiàng),包含下載新固件,還有其它默認(rèn)的一些安全特性,基本都是OK 的。這說(shuō)明整個(gè)程序基本已經(jīng) OK。


最后再恢復(fù)之前注釋掉的除 MPU 之后的保護(hù)。


05

后述


本文旨在通過(guò)一個(gè)相對(duì)容易的移植, 讓讀者對(duì) SBSFU 的移植過(guò)程有一個(gè)大概了解以起到參考和示范作用。


關(guān)鍵字:實(shí)戰(zhàn)經(jīng)驗(yàn)  移植 引用地址:實(shí)戰(zhàn)經(jīng)驗(yàn) | 移植 SBSFU 到 STM32G070 的過(guò)程

上一篇:你應(yīng)該知道的STM32F04x單片機(jī)時(shí)鐘切換教程
下一篇:應(yīng)用筆記 | STM32WB基于Custom Template實(shí)現(xiàn)客戶(hù)定制BLE私有協(xié)議

推薦閱讀最新更新時(shí)間:2025-07-05 07:57

用MicroPython開(kāi)發(fā)RGB燈帶,移植TPM2協(xié)議并使用OpenRGB控制
課程設(shè)計(jì)結(jié)束接著5天小長(zhǎng)假,盤(pán)一盤(pán)我吃灰了好久的ws2812燈帶。 第1天,因?yàn)橄M苯佑肬SB傳數(shù)據(jù),使用STM32用CubeMX生成代碼,使用USB虛擬COM口 第2天,發(fā)現(xiàn)hal庫(kù)沒(méi)有現(xiàn)成的控制ws2812的庫(kù),決定換用Arduino開(kāi)發(fā)STM32,在庫(kù)里找到了一個(gè)USB_SERIAL 第3天,翻遍了中英文互聯(lián)網(wǎng)沒(méi)找到USB_SERIAL的用法,啃源碼啃了一天,不知道為什么沒(méi)法發(fā)送只能接收。編譯FastLED的時(shí)候爆了一大片紅,無(wú)力排查 第4天,滾回CubeMX,使用DMA+TIM來(lái)控制ws2812。跟著別人的例子調(diào)了一天,PWM可以輸出1.25us周期的信號(hào)了,但DMA就是不搬數(shù)據(jù)…… 第5天,掏出吃灰許久的ESP32,刷
[單片機(jī)]
u-boot 移植 --->1、u-boot配置(Kbuild)
早期的U-BOOT的裁剪是沒(méi)有使用Kbuild工具的,后來(lái)就借鑒了Linux的Kbuild同時(shí)也是方便使用者裁剪,因?yàn)樗脑砗蚅inux內(nèi)核的配置裁剪原理是相同的。今天拿來(lái)分析的U-Boot的版本是u-boot-2017.11,主要原因是我電腦上的gcc版本編譯不了更新的版本,但是不影響拿來(lái)學(xué)習(xí)。U-boot開(kāi)始編譯之前需要先執(zhí)行make xxxdefconfig 進(jìn)行U-boot 的配置裁剪,之后才能進(jìn)行編譯Kbuild就是在第一步中發(fā)揮主要作用的。本次使用的默認(rèn)文件為三星s5p_goni_defconfig。 運(yùn)行 通過(guò)執(zhí)行make V=1 s5p_goni_defconfig 會(huì)發(fā)現(xiàn)其實(shí)他就是生成了一個(gè)conf可執(zhí)行文
[單片機(jī)]
u-boot <font color='red'>移植</font> --->1、u-boot配置(Kbuild)
[smart210] 裸板移植printf()與scanf()的步驟
平臺(tái):smart210 CPU:S5PV210 目標(biāo):在smart210裸板上移植stdio(標(biāo)準(zhǔn)輸入輸出)的兩個(gè)核心函數(shù),printf()與scanf()。 知識(shí)儲(chǔ)備: 1.這里我們直接從主目錄下的Makefile分析移植所需要的一系列操作 CC = arm-linux-gcc LD = arm-linux-ld AR = arm-linux-ar OBJCOPY = arm-linux-objcopy OBJDUMP = arm-linux-objdump INCLUDEDIR := $(shell pwd)/include CFLAGS := -Wall -O2 -fno-bu
[單片機(jī)]
uboot在s3c2440上的移植(6)
一、移植環(huán)境 主 機(jī):VMWare--Fedora 9 開(kāi)發(fā)板:Mini2440--64MB Nand,Kernel:2.6.30.4 編譯器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz2 二、移植步驟 10)u-boot利用tftp服務(wù)下載內(nèi)核和利用nfs服務(wù)掛載nfs文件系統(tǒng)。 知識(shí)點(diǎn): tftp服務(wù)的安裝與配置及測(cè)試; nfs服務(wù)的安裝與配置及測(cè)試; u-boot到kernel的參數(shù)傳遞(重點(diǎn))。 我們知道使用tftp下載內(nèi)核和使用nfs掛載文件系統(tǒng)的好處是,當(dāng)我們重新編譯內(nèi)核或文件系統(tǒng)后不用重新把這些鏡像文件再燒錄到flash上,而是把
[單片機(jī)]
uboot在s3c2440上的<font color='red'>移植</font>(6)
mini2440上移植sqlite3.7.6.2
一 、 開(kāi)發(fā)環(huán)境: Mini2440 , linux-2.6.38.2 內(nèi)核, Fedora , arm-linux-gcc-4.3.2 在 http://www.sqlite.org/ 上下載 sqlite 源代 碼 二、移植步驟 1. 解壓數(shù)據(jù)庫(kù)源文件并進(jìn)入解壓后的目錄,如下: tar -zxvf sqlite-3.7.22.tar.gz cd sqlite-3.6.22 2. 創(chuàng)建一個(gè)目錄 build 并進(jìn)入該目錄,用于在這個(gè)目錄中進(jìn)行交叉編譯,如下: mkdir build cd build 3. 在 build 目錄中運(yùn)行 sqlite-3.6.22 中的 configure 腳本生成 Makefile 文件,如下: .
[單片機(jī)]
u-boot-2011.03在mini2440/micro2440上的移植 在RAM中運(yùn)行
2.1 include/configs/micro2440.h 刪除 #define CONFIG_S3C2410 1 /* specifically a SAMSUNG S3C2410 SoC */ #define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */ 添加 #define CONFIG_S3C2440 1 /* specifically a SAMSUNG S3C2440 SoC */ #define CONFIG_MICRO2440 #define CONFIG_SKIP_LOWLEVEL_INIT 【說(shuō)明】 定義CONFIG_SKIP
[單片機(jī)]
u-boot-2011.03在mini2440/micro2440上的<font color='red'>移植</font> 在RAM中運(yùn)行
linux-2.6.32在mini2440開(kāi)發(fā)板上移植 添加觸摸屏驅(qū)動(dòng)程序
在內(nèi)核中添加觸摸屏驅(qū)動(dòng)程序 編者:linux2.6.32并沒(méi)有帶S3C2440觸摸屏驅(qū)動(dòng)程序,需要自己實(shí)現(xiàn)。而在此的觸摸屏驅(qū)動(dòng)程序時(shí)作為一個(gè)輸入設(shè)備來(lái)實(shí)現(xiàn)的。在linux中,對(duì)于輸入設(shè)備而言,內(nèi)核專(zhuān)為其設(shè)計(jì)了輸入子系統(tǒng),由核心層處理公共的工作。因?yàn)閷?duì)于輸入設(shè)備而言,只是中斷、讀鍵值/坐標(biāo)值是與設(shè)備相關(guān)的,其余的如輸入事件的緩沖區(qū)的管理以及字符設(shè)備驅(qū)動(dòng)的file_operations接口則是輸入設(shè)備通用的。所以在此是在輸入子系統(tǒng)的框架下進(jìn)行編寫(xiě)觸摸屏驅(qū)動(dòng)程序。對(duì)于這個(gè)驅(qū)動(dòng)的移植以及講解,參考了網(wǎng)上的一些文章,一部分摒棄了手冊(cè)。 1 在內(nèi)核中添加觸摸屏驅(qū)動(dòng)程序 Linux-2.6.32.2 內(nèi)核也沒(méi)有包含支持S3C2440 的觸摸屏
[單片機(jī)]
linux內(nèi)核移植之一 linux-4.1.4的zImage生成(Makefile分析)
一 編譯過(guò)程 仍然以2410的編譯說(shuō)明,執(zhí)行如下步驟 (1)主Makefile修改變量如下 ARCH := arm CROSS_COMPILE := arm-linux- (2)make s3c2410_defconfig (3)make zImage 最終生成用于uboot啟動(dòng)的內(nèi)核應(yīng)該是uImage,uImage是zImage通過(guò)uboot的mkimage工具加上一個(gè)文件頭生成的,這里只分析到zImage。 二 make s3c2410_defconfig分析 主Makefile下有如下定義: %config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved