RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)談BlueNRG-LP和-LPS的代碼空間優(yōu)化

STM32單片機(jī) ? 來源:STM32單片機(jī) ? 2023-11-15 14:08 ? 次閱讀

01

引言

客戶在使用 BlueNRG-LP/LPS 芯片時(shí),增加 OTA 服務(wù)后常常反饋說,編譯代碼區(qū)域超空間了,需要幫忙優(yōu)化一下。后文主要通過下列步驟進(jìn)行分析和優(yōu)化 BlueNRG-LP/LPS 的代碼空間:

a. 通過分析 BlueNRG-LP/LPS 的 OTA 方式,讓客戶可以選擇合適的方式;

b. 通過整體分析 BlueNRG-LP/LPS 的鏈接文件(*.icf/*.sct/*.ld)了解默認(rèn)工程的存儲(chǔ)分布;

c. 通過裁剪協(xié)議棧,選擇合適的協(xié)議棧功能,優(yōu)化 BlueNRG-LP/LPS 的代碼空間;

d. 通過使用靜態(tài)協(xié)議棧,進(jìn)一步優(yōu)化 BlueNRG-LP/LPS 的代碼空間;

e. 其他方案;

總的來說通過兩個(gè)維度來節(jié)省空間:一個(gè)是協(xié)議棧的裁剪維度:主要是通過修改宏配置實(shí)現(xiàn)編譯對(duì)應(yīng)應(yīng)用需要的協(xié)議棧。另一個(gè)是 OTA 和靜態(tài)協(xié)議棧的維度:OTA 和靜態(tài)協(xié)議棧的選擇流程圖如下圖所示

072e98dc-837d-11ee-939d-92fbcf53809c.jpg

02

BlueNRG-LP/BlueNRG-LPS的OTA

2.1 OTA 的框架

手機(jī)或者電腦做 GATT Client,給帶 OTA 服務(wù)的設(shè)備升級(jí)。

07420b7e-837d-11ee-939d-92fbcf53809c.jpg

2.2 官方提供的 OTA 方式

默認(rèn)提供的 OTA 應(yīng)用和協(xié)議棧編譯在一個(gè)固件上。

a. 不帶備份的(右圖中的右半部分)

升級(jí)服務(wù)程序在 Boot 端(OTA Service manager)。

省空間(存放了 2 份協(xié)議棧,1 份應(yīng)用)

管理簡(jiǎn)單(只需管理一份應(yīng)用)

b. 帶備份的(右圖中的左半部分)

升級(jí)服務(wù)程序在應(yīng)用端

更消耗空間(存放了 2 份協(xié)議棧,2 份應(yīng)用)

管理稍微麻煩(需要管理兩份應(yīng)用,Lower 區(qū)域應(yīng)用不能放置 Higher 區(qū)域運(yùn)行)

更安全

0753a3ac-837d-11ee-939d-92fbcf53809c.jpg

a. 不帶備份的方式由以下組件構(gòu)成:

BLE_OTA_ServiceManager+ application

b. 帶備份的由以下組件構(gòu)成:

BLE_OTA_ResetManager +Lower Application (with BLE OTA service) orBLE_OTA_ResetManager + Higher Application (with BLE OTA service)

對(duì)應(yīng)在 SDK 中工程和配置如下圖所示:

a.BLE_OTA_ServiceManager 配合 BLE_SerialPort 中的 Sever_Use_OTA_serviceManager

b.BLE_OTA_ResetManger 配合 BLE_SerialPort 中的 Service_LowerApp_OTA 或者Service_LowerApp_OTA 使用

07651858-837d-11ee-939d-92fbcf53809c.jpg

2.3 使用帶備份類型 OTA 升級(jí)錯(cuò)誤變磚頭問題

編譯器編譯的 Higher Application 如果放置在 Lower Application 的位置,程序無法運(yùn)行。APP 程序可以知曉當(dāng)前運(yùn)行的固件是 Lower 還是 Higher APP。可以在編譯固件 Higher Application 和 Lower Application 中加入一些標(biāo)記,用于給升級(jí)工具識(shí)別,當(dāng)前需要下載的是Higher Application 還是 Lower Application 或者是否混用。建議每次發(fā)布時(shí)兩個(gè)應(yīng)用程序都編譯生成,不要人為來管理固件,否則容易造成混亂,應(yīng)該讓升級(jí) app 自動(dòng)選擇對(duì)應(yīng)的來升級(jí)。

076c54ba-837d-11ee-939d-92fbcf53809c.jpg

03

BlueNRG-LP/LPS的存儲(chǔ)分析

3.1 linker 中宏定義作用范圍

Linker 中可定義一些宏、用于指定鏈接腳本文件所需的配置。這些宏定義不作用于.c文件或者.h文件,只作用于鏈接文件(.icf 或者.sct 或者 *.ld)。

3.2 鏈接腳本文件分析(代碼區(qū)域)

不同的 IDE 所使用的鏈接腳本文件的格式不同。比如,Keil 使用“*.sct”文件,IAR 使用“*.icf”文件,而 TrueStudio 使用 “*.ld”文件。

下面分析BlueNRG-LP最新SDK中BLE_SerialPort項(xiàng)目IAR工程目錄下的BlueNRG_LP.icf文件, 其他IDE一樣,可以進(jìn)行類比。由于Flash的擦除必須是整頁操作的,寫Flash之前必須將對(duì)應(yīng)的頁擦除,所以Flash的劃分需要2KB對(duì)齊。就算只使用到0.9KB,也需要?jiǎng)澐?KB區(qū)域。

默認(rèn)SDK中提供了4種程序的鏈接配置:

CONFIG_OTA_HIGHER

CONFIG_OTA_LOWER

CONFIG_OTA_USE_SERVICE_MANAGER

其他

078179f8-837d-11ee-939d-92fbcf53809c.jpg

對(duì)于這四種鏈接配置編譯后,代碼區(qū)域放置在如下地址。BLE_OTA_ServiceManager 工程使用的是非 OTA 程序,而 BLE_SerialPort 中的 Sever_Use_OTA_serviceManager 工程使用的是CONFIG_OTA_USE_SERVICE_MANAGER。

078f2a9e-837d-11ee-939d-92fbcf53809c.jpg

上述4種程序的鏈接配置由以下宏定義來指定:MEMORY_FLASH_APP_SIZE: 定義程序使用Flash的大小。以工程BLE_OTA_ServiceManager為例子,在linker中定義了MEMORY_FLASH_APP_SIZE = 0x3000, 則表明BLE_OTA_ServiceManager的大小不能超過0x3000(12*1024) 字節(jié)。BLE_OTA_ServiceManager是一個(gè)帶OTA服務(wù)的啟動(dòng)程序,宏定義MEMORY_FLASH_APP_SIZE限制這個(gè)工程編譯的程序空間大小不能超過這個(gè)范圍。

如果在linker中沒有定義MEMORY_FLASH_APP_SIZE,則對(duì)應(yīng)的4種配置分別是:

07a3b0cc-837d-11ee-939d-92fbcf53809c.jpg

MEMORY_FLASH_APP_OFFSET: 定義程序編譯鏈接地址的偏移(非OTA程序)。如果在linker中沒有定義MEMORY_FLASH_APP_OFFSET,則對(duì)應(yīng)的4種配置分別是:

07b49144-837d-11ee-939d-92fbcf53809c.jpg

前面提到默認(rèn)SDK中提供了4種程序的鏈接配置,本質(zhì)上只是計(jì)算MEMORY_FLASH_APP_OFFSET和MEMORY_FLASH_APP_SIZE的方式不同而已,如果應(yīng)用需要,也可以改動(dòng)這個(gè)鏈接腳本文件。

04

通過協(xié)議棧的初步裁剪與自定義優(yōu)化空間

SDK 中默認(rèn)提供了 4 種默認(rèn)配置的協(xié)議棧加一種自定義的協(xié)議棧配置(BLE_STACK_CUSTOM_CONF),如下圖所示。

07c5ce50-837d-11ee-939d-92fbcf53809c.jpg

上述 5 種不同協(xié)議棧的配置,本質(zhì)上就是通過使用宏控制不同的特性功能是否打開。只是前面 4種提供了默認(rèn)便捷的設(shè)置,而最后一種可以進(jìn)行細(xì)粒度更細(xì)的自定義的協(xié)議棧。

可以在 Preprocesor Symbols 中定義相關(guān)的宏來配置使用哪種協(xié)議棧配置。

07cd245c-837d-11ee-939d-92fbcf53809c.jpg

如果選用細(xì)粒度更細(xì)的 BLE_STACK_CUSTOM_CONF 協(xié)議棧配置,則在 其中在頭文件“custom_ble_stack_config.h”中開關(guān)不同功能特性,大致占用的代碼如下圖所示。

07e25b56-837d-11ee-939d-92fbcf53809c.jpg

05

協(xié)議棧的進(jìn)一步裁剪:使用靜態(tài)協(xié)議棧

5.1 靜態(tài)協(xié)議棧工程的 4 種默認(rèn)的配置

ST 官方 SDK 中已經(jīng)提供了靜態(tài)協(xié)議棧的 Demo,分為協(xié)議棧工程和應(yīng)用工程兩部分,路徑為:C:Usersuser nameSTBlueNRG-LP DK 1.x.xProjectsBLE_ExamplesBLE_StaticStack 靜態(tài)協(xié)議棧工程默認(rèn)提供了 4 種配置:

? Release

? Basic

? OTA_BTL_ResetManager

? OTA_BTL_ResetManager_Basic

C:Usersuser nameSTBlueNRG-LP DK 1.x.0ProjectsBLE_ExamplesBLE_SensorDemo_StaticStack

? Release

? LowerApp_OTA

? HigherApp_OTA

07eeb090-837d-11ee-939d-92fbcf53809c.jpg

那它們有什么區(qū)別呢?它們可以分為兩組。

Release 和 Basic 是一組:它們運(yùn)行時(shí)都是由協(xié)議棧程序直接跳轉(zhuǎn)到一個(gè)固定的應(yīng)用上;

Release 和 Basic 的區(qū)別:Basic 的協(xié)議棧配置是 BLE_STACK_BASIC_CONF, 而 Release的協(xié)議棧配置是 BLE_STACK_FULL_CONF。

不同的協(xié)議棧配置,包含的功能和占用的 Flash 空間也不一致。

? 不同的協(xié)議棧配置包含的功能請(qǐng)查看 stack_user_cfg.h

? 占用的 Flash 空間可以通過編譯的 Map 文件查看? 宏 RESET_MANAGER_SIZE 用于協(xié)議棧程序的跳轉(zhuǎn)偏移,即預(yù)留多少空間給協(xié)議棧,因此這個(gè)宏的大小也會(huì)因?yàn)閰f(xié)議棧占用的空間不同而不同。

? Linker 中宏 MEMORY_FLASH_APP_SIZE 用于定義程序可用的大小。即預(yù)留多少空間給協(xié)議棧,因此這個(gè)宏的大小也會(huì)因?yàn)閰f(xié)議棧占用的空間不同而不同。

OTA_BTL_ResetManager 和 OTA_BTL_ResetManager_Basic 是另外一組:它們都是由協(xié)議棧程序跳轉(zhuǎn)到 Lower 應(yīng)用程序或者 Higher 應(yīng)用程序;

? OTA_BTL_ResetManager 和 OTA_BTL_ResetManager_Basic 的區(qū)別:OTA_BTL_ResetManager_Basic 的協(xié)議棧配置是 BLE_STACK_BASIC_CONF, 而OTA_BTL_ResetManager 的協(xié)議棧配置是 BLE_STACK_FULL_CONF

? 不同的協(xié)議棧配置,包含的功能和占用的 Flash 空間也不一致。

o 不同的協(xié)議棧配置包含的功能請(qǐng)查看 stack_user_cfg.h

o 占用的 Flash 空間可以通過編譯的 Map 文件查看

o 宏 RESET_MANAGER_SIZE 用于協(xié)議棧程序的跳轉(zhuǎn)偏移,即預(yù)留多少空間給協(xié)議棧,因此這個(gè)宏的大小也會(huì)因?yàn)閰f(xié)議棧占用的空間不同而不同。

o Linker 中宏 MEMORY_FLASH_APP_SIZE 用于定義程序可用的大小。即預(yù)留多少空間給協(xié)議棧,因此這個(gè)宏的大小也會(huì)因?yàn)閰f(xié)議棧占用的空間不同而不同。

其中,一個(gè)工程負(fù)責(zé)生成協(xié)議棧,另一個(gè)工程負(fù)責(zé)應(yīng)用,那么這里 BLE_StaticStack 中的Release or Basic 與 OTA_BTL_ResetManager or OTA_BTL_ResetManager_Basic 怎么和Release,LowerApp_OTA 和 HigherApp_OTA 組合呢?

? BLE_StaticStack 中的 Release or Basic + BLE_SensorDemo_StaticStack 中的Release //不帶備份 OTA 的使用固定協(xié)議棧的方法

? BLE_StaticStack 中的 OTA_BTL_ResetManager or OTA_BTL_ResetManager_Basic + BLE_SensorDemo_StaticStack 中的 LowerApp_OTA or HigherApp_OTA //帶備份OTA 的使用固定協(xié)議棧的方法

5.2 將工程實(shí)例化為靜態(tài)協(xié)議棧工程編程基礎(chǔ)

將工程實(shí)例化為靜態(tài)協(xié)議棧涉及比較多的步驟,可以參考官方的文檔 :BlueNRG-LP_LPS DK 1.2.0ProjectsBLE_ExamplesBLE_SensorDemo_StaticStackREADME.txt

以及 SDK 安裝目錄的 index.html 中的靜態(tài)協(xié)議棧的介紹如下圖所示。

08065c86-837d-11ee-939d-92fbcf53809c.jpg

如果在實(shí)例化 OTA 程序時(shí),可能需要修改鏈接腳本和 Preprocesor Symbols 中下面幾個(gè)宏(具體不同應(yīng)用,不同 OTA 類型,具體需要定義的宏和宏的數(shù)值也不同):

RESET_MANAGER_SIZESERVICE_MANAGER_OFFSETSERVICE_MANAGER_SIZEMEMORY_FLASH_APP_SIZEMEMORY_RAM_APP_OFFSET

5.3 使用默認(rèn)配置的協(xié)議棧

如果使用了 OTA,發(fā)現(xiàn)空間不夠,可以考慮將應(yīng)用協(xié)議棧和 OTA 協(xié)議棧合并使用如下圖所示。

082649e2-837d-11ee-939d-92fbcf53809c.jpg

上圖列舉的是基于 BlueNRG-LP 的默認(rèn)提供的工程的大致數(shù)值(BlueNRG-LPS 類似,這里不再舉例)。如果遇到不同的應(yīng)用,可以實(shí)際裁剪協(xié)議棧適配不同的應(yīng)用需求。

5.4 使用自定義配置的協(xié)議棧

使用靜態(tài)協(xié)議??梢詫?shí)現(xiàn)更為精確的函數(shù)級(jí)別的裁剪:通過注釋協(xié)議棧工程中的 bluenrg_lp_cmd_if.c 中的 cmd_call_table 中對(duì)應(yīng)的函數(shù),編譯時(shí)可以將不使用的協(xié)議棧函數(shù)裁減出協(xié)議棧。

08599608-837d-11ee-939d-92fbcf53809c.jpg

5.5 使用靜態(tài)協(xié)議棧這種模式如何支持升級(jí)協(xié)議棧

當(dāng)使用靜態(tài)協(xié)議棧,默認(rèn)協(xié)議棧就無法升級(jí)。為了能夠支持協(xié)議棧也升級(jí)。需要增加一段 boot代碼,當(dāng)升級(jí)協(xié)議棧時(shí),先放置在 APP 區(qū)域,當(dāng)升級(jí)完協(xié)議棧后,將 APP 區(qū)域的協(xié)議棧拷貝到協(xié)議棧區(qū)域。接著繼續(xù)升級(jí)被擦除的應(yīng)用程序。Boot 代碼決定搬運(yùn)協(xié)議棧和跳轉(zhuǎn)到下一級(jí)。

086ea3c2-837d-11ee-939d-92fbcf53809c.jpg

06

優(yōu)化后空間仍不足的其他方法

如果使用靜態(tài)協(xié)議棧和空間仍然不足,可以考慮將一些常用而不需修改的通用模塊編譯進(jìn)協(xié)議棧的工程。如果空間仍然差距比較遠(yuǎn)則考慮用片外 Falsh 或者選用 STM32WB 系列,再或者使用 STM32+協(xié)處理器模式。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    350

    瀏覽量

    36664
  • OTA
    OTA
    +關(guān)注

    關(guān)注

    7

    文章

    578

    瀏覽量

    35193
  • BlueNRG
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    9647

原文標(biāo)題:實(shí)戰(zhàn)經(jīng)驗(yàn) | 簡(jiǎn)談 BlueNRG-LP 和-LPS 的代碼空間優(yōu)化

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    意法半導(dǎo)體發(fā)布Bluetooth?LE系統(tǒng)芯片(SoC)—— BlueNRG-LP

    BlueNRG-LP支持藍(lán)牙遠(yuǎn)程模式,采用前向糾錯(cuò)(FEC)編碼物理層(Code PHY)將無線通信距離延長(zhǎng)到數(shù)百米,并提高了連接可靠性。
    發(fā)表于 10-18 09:36 ?1365次閱讀

    請(qǐng)問如何在BlueNRG-LP上看門狗處理程序?

    使用 BlueNRG1/2,我們得到了 WEAK_FUNCTION(void WDG_Handler(void) {}); 在 system_bluenrg1.c 中,但對(duì)于 BlueNRG-LP,在 system_
    發(fā)表于 12-14 06:38

    請(qǐng)問一下在哪里可以找到BlueNRG-LP網(wǎng)格示例呢

    大家好,我是 ST 世界的新手,我對(duì)自己的評(píng)估有些懷疑。我正在研究 BlueNRG-LP 控制器。因?yàn)槲掖_定 LP 系列支持 Ble Mesh,所以為什么我在 STSW_BNRG_Mesh(它僅包含
    發(fā)表于 12-16 08:23

    BlueNRG-LP、BlueNRG-LPS(無線)固件升級(jí)程序

    本應(yīng)用筆記介紹運(yùn)行于隨 BlueNRG-LPBlueNRG-LPS 片上系統(tǒng)提供的 Bluetooth?低功耗(LE)棧之上的 BlueNRG-LPBlueNRG-LPS 無線(O
    發(fā)表于 08-14 10:19

    BlueNRG-LP/BlueNRG-LPS設(shè)備的PCB設(shè)計(jì)指南

    BlueNRG 系列是符合藍(lán)牙規(guī)范的超低功耗 Bluetooth? Low Energy(BLE)器件。BlueNRG-LP、BlueNRG-LPS 是一款采用 Cortex-M0+微控制器, 且
    發(fā)表于 08-14 06:35

    BLUENRG-LP無線處理器介紹

    意法半導(dǎo)體的第三代BlueNRG2.4 GHz Radio IP符合藍(lán)牙SIG核心規(guī)范5.2版本要求,兼具出色的射頻性能和極長(zhǎng)的電池壽命。BlueNRG-LP SoC適用于點(diǎn)對(duì)多點(diǎn)連接和藍(lán)牙SIG
    發(fā)表于 09-08 06:57

    【應(yīng)用筆記】BlueNRG-LP、BlueNRG-LPS+省電模式

    BlueNRG-LP、BlueNRG-LPS 是超低功耗的 BLE 單模 SoC,符合 Bluetooth?規(guī)范。其架構(gòu)核心是 32 位的 Cortex-M0+。 本應(yīng)用筆記將介紹
    發(fā)表于 10-08 15:35

    意法半導(dǎo)體首款藍(lán)牙LE 5.2 SoC產(chǎn)品BlueNRG-LP

    BlueNRG-LP (STSW-BNRGLP-Mesh)的藍(lán)牙Mesh協(xié)議棧目前可供下載?!?BlueNRG-LP:開頭第一步 STEVAL-IDB011V1評(píng)估板和更新的BlueNRG軟件
    的頭像 發(fā)表于 04-23 10:35 ?2755次閱讀
    意法半導(dǎo)體首款藍(lán)牙LE 5.2 SoC產(chǎn)品<b class='flag-5'>BlueNRG-LP</b>

    BlueNRG-LP支持128個(gè)并發(fā)連接的藍(lán)牙低功耗SoC

    ST推出的BlueNRG-LP,這是首款支持 128 個(gè)并發(fā)連接的藍(lán)牙低功耗 SoC。它也是我們第一款獲得藍(lán)牙低功耗 5.2 認(rèn)證的設(shè)備。BlueNRG-LP 支持遠(yuǎn)程、2 Mbps 傳輸和廣告擴(kuò)展
    的頭像 發(fā)表于 05-12 10:26 ?2566次閱讀
    <b class='flag-5'>BlueNRG-LP</b>支持128個(gè)并發(fā)連接的藍(lán)牙低功耗SoC

    應(yīng)用筆記|使用 BlueNRG-LP SoC 方案無法掃描到擴(kuò)展廣播包

    關(guān)鍵字:BlueNRG-LP, 傳統(tǒng)廣播,擴(kuò)展廣播 目錄預(yù)覽 1 引言 2 問題描述 3 問題分析與定位 4 問題解決 5 小結(jié) 1. 引言 BlueNRG-LP 是意法半導(dǎo)體第三代低功耗藍(lán)牙單芯片
    的頭像 發(fā)表于 06-08 11:55 ?715次閱讀
    應(yīng)用筆記|使用 <b class='flag-5'>BlueNRG-LP</b> SoC 方案無法掃描到擴(kuò)展廣播包

    BLUENRG-LP無線處理器:符合未來要求的藍(lán)牙低功耗5.2可編程片上系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《BLUENRG-LP無線處理器:符合未來要求的藍(lán)牙低功耗5.2可編程片上系統(tǒng).pdf》資料免費(fèi)下載
    發(fā)表于 08-01 16:27 ?0次下載
    <b class='flag-5'>BLUENRG-LP</b>無線處理器:符合未來要求的藍(lán)牙低功耗5.2可編程片上系統(tǒng)

    BlueNRG-LPBlueNRG-LPS 2.4GHz無線電私有驅(qū)動(dòng)程序

    本文檔介紹 BlueNRG-LP、BlueNRG-LPS 2.4 GHz 無線電私有底層驅(qū)動(dòng)程序,它提供對(duì) BlueNRG-LPBlueNRG-LPS設(shè)備的訪問權(quán)限,以便在不使用
    發(fā)表于 09-12 09:37 ?0次下載

    BlueNRG-LP、BlueNRG-LPS定時(shí)器模塊

    an5469 ?BlueNRG-LP、BlueNRG-LPS 是超低功耗的 BLE 單模片上系統(tǒng),符合 Bluetooth?規(guī)范。其架構(gòu)核心是 32 位的 Cortex M0+。本文檔介紹管理
    發(fā)表于 09-12 09:36 ?0次下載

    BlueNRG-LP、BlueNRG-LPS省電模式

    BlueNRG-LP、BlueNRG-LPS 是超低功耗的 BLE 單模 SoC,符合 Bluetooth?規(guī)范。其架構(gòu)核心是 32 位的 Cortex-M0+。本應(yīng)用筆記將介紹
    發(fā)表于 10-09 17:27 ?0次下載

    實(shí)戰(zhàn)經(jīng)驗(yàn) | BlueNRG-X 原理圖參數(shù)說明(附資料下載端口)

    關(guān)鍵詞:BlueNRG-1, BlueNRG-2, BlueNRG-LP/LPS 目錄預(yù)覽 1、前言 2、BlueNRG-1/-2 的原理圖
    的頭像 發(fā)表于 10-18 19:15 ?714次閱讀
    RM新时代网站-首页