你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于是STM32的BLE 设备地址经验分享

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型
3 `2 Z! C4 ]% c# ^1 z1 \  L2 Y所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。* f" @3 ?" R5 F- c/ g

! H, p( m1 g" B1 c) B蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:
( Z' }" L- ^, Y7 p) U! U4 T• Public Bluetooth address // 1
, W# D' ?! f  q  f6 V7 P% ?9 {( k. Z• Random Bluetooth address0 R1 `/ q* S. Y! m" L. j3 Z$ i
   o Static address // 26 {1 l1 p* z1 b: e# z( z8 d
   o Private address
4 Y- v+ W4 ?5 z; @. a        ▪ Non-resolvable private address // 30 P1 t* V* H, J
        ▪ Resolvable private address // 4
& s' t% R0 L3 @4 ^8 P) W) r0 e# F7 b7 e1 G4 ]' c
上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:
, F4 U/ M8 ?/ A, ^5 D• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。( Z3 C" M) c6 |2 f4 A
• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。
* t& |8 J! q# {8 H# w• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。# Q5 y9 V7 v  m: M; L) R) y
9 u) G+ y# E$ H/ s) C# A, u
设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。
: f: x  }3 j% x: N4 q$ f: u$ n" K3 x5 R8 U5 ]
如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。6 z. g0 \2 o7 C/ P0 Q
& S4 r* q0 ?0 O
1.1. Public Bluetooth Address6 S2 ?/ U' ]* I* e
在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。
4 c* H3 S6 s- \% U
8 ^/ ?, p* H$ J5 {: S8 C* e1 R/ j
1.2. Random Static Device Address) s6 y+ L2 w! O6 O6 I, o. g" i% w
蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:
- c6 w' H: g0 v' A/ b) @2 n' j  Q* b* E  r+ C
微信图片_20240103192153.jpg

, p; |( z: l4 I$ ]. i

- _* u7 n4 ^, b$ u) I: z& ~/ D静态地址是随机生成的48位地址,应满足以下要求 :: O: Z* E+ W1 w% w
• 地址的随机部分至少有一位应为 0' M1 S( S1 N2 A/ W6 |. n9 t1 {
• 地址的随机部分至少有一位应为 1
$ L1 R& O- j: _* f8 _) w! K1 z1 e+ ~! V/ P% D2 T* X. d
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
, B" K# l$ M( c
; Y8 W" N% a( A5 x% P3 ~" y- f
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
/ u% r! u; l$ S* `* w
" a, p4 b! K4 Q2 f
1.3. Random Non-Resolvable Private Address
" g! |  T6 S4 l5 W隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:
; j, r  u- D- O: I% L6 [8 ?* v- W2 t2 L4 j! n
微信图片_20240103192147.jpg
7 f% n) T/ }! _- b3 R( L& W" }: z0 T. X
) e7 u6 y/ d( |
• 地址的随机部分至少有一位应为 1
, j) B. j& h9 E• 地址的随机部分至少有一位应为 08 }4 h+ |: m7 w* s0 e6 c
• 地址不得等于 Public 地址
4 I  L$ l2 O6 n4 ^& C! R5 V2 \* y1 O6 o, Q6 k# u. ^! [1 c8 a6 G0 ?
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。
* A$ a1 B1 |! Y: H. P( q  M* g( j8 ?( l: l  O/ Q
1.4. Random Resolvable Private Address  i) T! C% J8 r# d7 W. A
所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。; p5 I5 o  ~1 W5 ?  [. e
8 W0 u: e5 t& s& e  R3 z: ?: S8 i
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:) L& r! O, d8 i  @3 P- ~
• prand 的随机部分至少有一位为 07 Y  a: p" c1 Q" K$ t  K8 H( q) p0 o
• prand 的随机部分至少有一位为 1
8 U8 G' g1 w/ L/ \1 q1 ^; B. o% w
微信图片_20240103192139.jpg
- G0 |" ^8 ]3 }  [! X: ^+ q6 @
特征如下:
0 v. m9 n# v# I. M! E3 i1)由两部分组成:1 ~% j9 w" W5 M# J; {" D( y
高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;+ G. g8 F2 Z* j2 w/ C
低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。2 `$ _6 J8 b3 E) D' u

, O" o7 M2 t2 G1 m4 Y0 ~. g; _2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。
% k) o6 x" y4 s3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。
& W5 |5 u6 C; t6 h6 x7 O) q9 q$ y. c0 C4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。. L# q$ c0 b7 \
6 [, T$ A! {6 X
02MAC 地址相关函数
3 M% v' m" |* z3 v4 B下面介绍两个比较重要的和 MAC 设置相关的函数。
! ?! @& \+ }) L  P7 Q. B: [% D0 @' S4 P$ Y* N5 p  ?( E3 V

% V. H$ a. R+ l  N. q2 P1 D// 配置 MAC 地址的函数: @9 R# H$ ]# E1 s1 t
  }5 H4 e1 Y# @: v! X  ~1 M0 k- l
微信图片_20240103192132.jpg
- a# i- V& m2 i2 L- y) M
- n8 T" X  b5 V9 O
其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:
# i+ x5 i* Z  z; J8 a•  0x00:  CONFIG_DATA_PUBADDR_OFFSET
/ b) R  A# a- }$ M•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS" u8 {0 r+ _4 Y. y4 _! ?, A

! o$ b( {; L# M) Y$ G, C  c//配置使用哪种 MAC 地址的函数:7 o& |, P' P2 v

  ]/ f& @, h4 i+ g8 L3 Q
微信图片_20240103192129.jpg

; t  n0 X& s4 T3 O% K2 p; P( }
0 r7 O5 m7 |) r* n
Identity_Address_Type :- r: g! R% S4 d; }+ D
• 0x00: Public Address
0 {3 Q; _8 v9 ]  X, E• 0x01: Static Random Address0 [. v; ^) W- `2 g' u/ l

6 L0 R' Q3 P! t2 B03蓝牙 Random 静态设备地址的生成与设置参考方法1 F4 U$ ?5 `4 P) o; _9 Q2 i* T3 C
为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。! S3 Q8 v' J( B. {% ^5 }
: o* a3 t2 Q, B( H9 c
sha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:
0 c+ }4 L, R# L3 N0 J4 s3 r6 l) s8 h8 h# F( J# u% X
将 “#include” 更改为 “#include”
: j* ^" s& \8 Z
/ N8 E) R3 n2 b3 c3 q2 J
以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列7 t* a2 h2 r( {1 G* z
8 N0 `& w$ \$ B* {* b3 Z" o8 ?
// 生成静态 MAC 地址参考函数
( n5 t3 ^6 [0 a' u/ d' b/ y  Y/ \5 x* `8 [- A! b9 r
微信图片_20240103192125.jpg

. J0 J1 x" R* P5 l
- o6 j$ `  h* ^( r) D7 Y
5 }) B9 U) o. {  @/ B
04蓝牙 Public 设备地址的购买流程
, P% @# z1 k- ?; p( l+ [全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。- G# r) J) X0 Q( ~

' E; l2 R0 U6 k% @3 b$ {* v4.1. OUI 介绍0 D7 S, S# G4 S
Organizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。
) g$ M$ Z& @' F( N
8 T1 N3 [7 t6 E$ b. B
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。% n1 i* _" ~# w
; `# ?% a' X! q* l0 c: j3 D2 k
目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。
( ~  ^4 u9 b+ E

! V! H/ R0 f7 s$ t8 L如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问4 x& X$ S) Y3 e$ O% Z  L

7 U& p2 N! y$ o. }  h& n4 ?" r* z输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。
! T7 L) X/ Y$ N# B. j# i1 O2 h( _6 }9 u2 h5 U1 a
如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。
/ C* S" o8 H1 s
1 C/ w3 e+ T5 b" @5 l) i! B9 E6 g4.2. 购买流程7 h, C8 J1 j' \3 @
如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。) H7 u9 [% Q6 F! T6 b

3 z" @" I9 q5 I图1.申请购买 public 地址入口
2 I5 M! `3 p, A6 c. P- }, E
7 n6 f! r$ h, J. Q4 G
微信图片_20240103192122.jpg
' o- w" x2 |2 Y$ \8 {$ s, B

3 t  t2 `  [! y/ `" a5 B图2. 选择购买的 MAC 地址数量和类型9 E! w- f* w7 ]% I

7 W3 U9 f- F) n7 J7 K
微信图片_20240103192111.jpg
; M; x, `, `% Z6 P
. F9 _) e3 O8 r7 `3 o, x& J1 C2 J如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。( [4 _! u2 p! `- z8 ~* F* V
2 m% u1 S0 t2 {
图3.申请过程中的 4 个步骤
/ a- b' @' }. ]/ D' a) c9 Q
) n" y* ?: F$ w5 k# l  R
微信图片_20240103192107.jpg
  E& N0 |: G% T; Q4 U- D8 d! g  D6 k; F; S5 x: v0 c, ]. p  D
主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;
9 ]. B! \  z4 k9 S7 t2 e" ]' k/ W/ z5 F
公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否+ [  v7 }5 a( s7 j8 F
8 ?1 m/ b, O7 U+ s! {" G3 x/ Z- A
如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。
' x* j8 x! i9 t& s! _  S
3 k. [4 P% M, K/ g4 R: E4 M5 x$ B
完成以上内容后在线提交即可。
  Y( o/ H  z, x8 E5 [1 I; |7 w, d7 d2 ~1 p0 O* ^- ?; ~
4.3. 购买后检查确认
3 B. I( `& k6 a. ^9 C1 _# x如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。
5 Z7 ^; f; ?, T. T" @- v- K
$ N! a( Q0 `2 ?. Y! y/ z
微信图片_20240103192103.jpg
( q# r; ]' {- I

: P1 j: X, K7 M% ~+ L% V' K, d' n8 T图4.在更新的列表中检查申请的地址+ s* c7 i. n. ], a7 A$ K

- Y  }) S, u/ a/ a6 I" L3 G7 {6 O
( i4 ]  y1 L5 `, @9 I% {/ C6 |% J) j
05小结
. [1 q2 l# T- l" i本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。
5 F$ L0 n! r& l  X2 D: B9 v& V! F3 K$ `
9 v2 W# @4 F( u6 G5 W
转载自: STM32单片机
, \$ Z+ [# D# Z( D+ M如有侵权请联系删除: y/ M! R2 n8 _! l$ x4 [/ x9 _
# H1 e0 v% Z+ G( ?) K2 e- A7 H8 y
- J! J2 N7 A2 d' `# R& c& ]
/ G0 Y6 d' f/ e  A3 [0 {& M
赞 收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版