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

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

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型2 j. D. V1 Y! T: x! [
所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。2 Y; @8 w, O- I$ {# W0 C

% W" P- P& K& L$ y9 v2 M# ^+ G蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:
6 a, t0 a4 b: ^* v% i- L* t) f0 y• Public Bluetooth address // 1
, _  a2 d1 |  w) O& F• Random Bluetooth address
- F7 m+ S3 ?; O5 p6 r% F( v# ^   o Static address // 21 ~# {6 E& t- K0 \9 t- o4 a) j
   o Private address6 F# T; r6 F* q( l! I* a
        ▪ Non-resolvable private address // 3: q" I1 ^) O2 w
        ▪ Resolvable private address // 4
2 [9 a! h- \4 f+ s
/ i: E2 j; K2 ?9 w/ Y上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:2 z2 f# u' f; i5 Y6 h
• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。( [) }3 [! A' u3 Z$ r
• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。9 r8 }" v) H& u, M; s8 F
• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。  N3 ]  u2 h+ _$ K/ ?( S1 Z

" y) g) w/ |. F$ S: @) D7 R3 j! q设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。
0 j" _1 ~/ l# g, ]4 _
' \+ v; U- I+ k2 E. L9 K如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。
5 e( B) d5 H( ~( A2 F
) B- j' m. Q1 n5 K. M
1.1. Public Bluetooth Address
# [7 E; g" c/ t5 I, G在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。
8 {3 S2 }9 Q# y& Q
! A& }: |6 K- Z8 `
1.2. Random Static Device Address
# H/ x# }$ y( w: }# b; \蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:- q5 @4 _& H  F& g
7 x* X" u9 p! y1 q# r- i  S( k: c
微信图片_20240103192153.jpg
4 {; d* N; b8 g# R; b

7 [# }6 w( R8 b3 x6 N静态地址是随机生成的48位地址,应满足以下要求 :
  L; l& q9 S4 ]• 地址的随机部分至少有一位应为 0
: T& l/ U0 _2 X5 C  [5 Z• 地址的随机部分至少有一位应为 14 C$ R) E+ d& q: {
7 [9 n4 a9 @) D
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
* t6 `% B! z- I1 S9 \/ e1 k; u) x0 m% T/ W7 [5 j3 r% ?
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
  f1 Q, x$ M9 V6 Q  T( _: a' N1 N% _1 K8 p6 I
1.3. Random Non-Resolvable Private Address; e7 ?6 W8 s9 k: |: X
隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:
: y6 A! L( ~6 A! x3 T, i% n8 m; x, N* w
微信图片_20240103192147.jpg
0 M7 g$ u2 Z. a% R* \
9 n4 ^# u$ Z* K4 w
• 地址的随机部分至少有一位应为 1
+ @  q/ C, U1 L  Z8 Q; m; ?3 D• 地址的随机部分至少有一位应为 0
% K  e, A$ e3 v  ?5 P+ t• 地址不得等于 Public 地址- L; t4 N! j: V3 W* h
0 b( _! ?- v( ?( Y
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。. p4 ]3 }+ a# x. p8 S
1 |( H0 A9 B9 Q9 O) o
1.4. Random Resolvable Private Address
* ]* [4 F  R% o+ O所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。& y4 Z6 v% l; I# K0 S! m3 d9 M
1 T% n1 s$ _  S$ Y/ [6 v% P
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:  E2 @. @2 t2 Y9 T; `0 `& J: ~
• prand 的随机部分至少有一位为 0" X8 q/ L/ r) x( n" C
• prand 的随机部分至少有一位为 16 P% Y8 X0 P9 {7 ?4 p

( H" j; ]6 _( L. k/ s  H$ f8 P
微信图片_20240103192139.jpg
9 r9 k# l& W' @1 e0 l  K
特征如下:3 i0 F8 |2 j( {+ ^/ v
1)由两部分组成:  V5 }! P+ I3 j6 }* _1 U' o
高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;
3 _/ v5 C" k8 E+ E" s低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。
5 e& w+ B8 l4 b. y0 A' j% z9 E  x
* L4 L: t) {! {) Z2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。
) x' ?6 [) i+ w6 M- X2 O3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。
: H4 r+ F, d# f# e4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。. o% j/ s& R- l5 {4 U, j5 d
$ K+ D3 ]1 S4 R) I
02MAC 地址相关函数5 f: v' E( a( W3 K1 D9 \
下面介绍两个比较重要的和 MAC 设置相关的函数。
- r" @+ a/ y- _4 w8 p
+ z4 i9 j# A+ P6 z$ }
2 ?% o8 K# W5 ^
// 配置 MAC 地址的函数& V3 V0 b3 C) ?1 s* R! s

/ D5 d% e; X& U% Q3 ~
微信图片_20240103192132.jpg

' |% S/ }  Z1 H8 H- N

' D2 Y/ S8 D2 Q1 T其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:7 p7 c% K+ Y  ?! t
•  0x00:  CONFIG_DATA_PUBADDR_OFFSET
. ^: K- n8 M5 Y' `' _•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS
& w7 Y# t  B% F$ y' _% t
) e6 X4 t4 q( u1 L! N; n( ?//配置使用哪种 MAC 地址的函数:
: p- I0 Z5 E0 P' W) Q# D  B( ?6 B+ \
微信图片_20240103192129.jpg
0 B* P" Z" r7 e9 C7 @

; d3 x. G7 m* |7 b& }Identity_Address_Type :
2 _( C2 V5 ~. P  ~0 ~0 Y4 @• 0x00: Public Address* y/ p' w0 j) |$ |  Q( c6 H$ Q  J
• 0x01: Static Random Address, e  W- v2 q2 U( t. E; ~9 R8 g; r2 P

# q! w/ i7 ]! _; r* f# R: M03蓝牙 Random 静态设备地址的生成与设置参考方法
. j0 Q' \2 n5 U为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。
5 C0 ^- n$ W& Y' V  n- p
! e1 r* d: d) M' lsha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:5 g; j, M) e7 \) T. h

) J* q( h1 F: G( i0 [# Z& d; ^' Q将 “#include” 更改为 “#include”
7 ^3 e# v8 A6 {# \" q
- E0 W0 i3 |  E9 w( o- T) a" d
以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列
9 q$ m1 J; J: c% h8 M8 s& L! z8 j0 L( Q  F8 _8 P- S
// 生成静态 MAC 地址参考函数. `7 k; N, X1 j' f* N
- Z3 {4 `0 X* b
微信图片_20240103192125.jpg
8 ^5 p5 e" `' W  u
9 S# t1 C5 b2 K
6 l# C4 ]/ U, }; F( T* a& K
04蓝牙 Public 设备地址的购买流程
$ G3 t* v: B# w: i* {全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。
' m2 _) W) q: o: y9 y, \5 e
; a. p! \9 @, [5 x4.1. OUI 介绍6 X. E. q# j; }  B) i) m# v/ G+ S' e
Organizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。
, j1 Z; J' K  G. A1 V( T7 ^9 S: }" H
7 Q2 K$ e- ]+ H; F5 [
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。) x; B+ S- M( n7 M% i- X
: o- t1 x1 f* o' D. ~1 M
目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。3 C! ^+ K+ W" s1 q& H, \+ N& s
! i" U7 S& P! _- I1 i* u$ K
如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问
% h5 ]  \4 K8 M" w7 a1 j
% j6 t  R8 m3 ^1 H9 \7 G' D输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。
9 U; [$ ^4 y2 Y& a4 u
* w$ N, m7 \% t" C如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。4 ^; Q* s6 P3 z8 U

# x1 y) L: N) [6 R% f+ G4 y4.2. 购买流程' K' G1 m( l( |/ p0 X
如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。
0 p3 U! ~* _( B. \7 Q+ m" d& ]( w- d0 c! u& h8 |5 n
图1.申请购买 public 地址入口
" b3 i! T. E: P( x, q7 j0 `$ Z+ s. R, U, {, y2 o& A0 u
微信图片_20240103192122.jpg $ O5 x! M; U1 s7 C. Y# r" G; y% M

% {+ V# ?. Z4 R3 T图2. 选择购买的 MAC 地址数量和类型
7 }1 J) t) J5 P" ?# |, c
9 Q& ]& Z. L1 s
微信图片_20240103192111.jpg
9 {2 t- B" H  |, ]' W$ ^% k6 A5 s! g  F$ N3 Q: T( N: d
如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
5 a. A7 l+ W) X* ]& @6 ]% o4 c( n8 _
图3.申请过程中的 4 个步骤
) J# O% Z  j+ X. q. ]& Z: |& V" o7 {" z/ D0 X  n  p
微信图片_20240103192107.jpg $ T6 k! z% f4 X1 n, Q' a

% `) {) e6 m6 J% ]& f. r主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;
5 k( L- W. d, B2 p, v& \# a$ S3 f) ?/ H' W) t) V1 o
公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否
( ^. C* V0 y1 J: n0 x# c( O5 ^& X* k9 O
如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。$ z' ^% y3 K& y* r1 q) V

, K) H0 R, D( W' T7 j完成以上内容后在线提交即可。# M2 D% R6 r, ]  P2 f' [

0 ]0 e$ a* n  e4.3. 购买后检查确认
" T3 _+ n0 V6 L$ Z4 {& g3 o8 B0 o如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。7 E" G" a% K9 T; c

/ L9 R, Q- c$ w, L
微信图片_20240103192103.jpg

8 H8 S$ o/ N) n2 u2 K. R/ p$ f
, t7 I- o! S. }5 X3 H7 n' h* s8 O
图4.在更新的列表中检查申请的地址
+ O. Q5 D) o2 v: b* G* {/ `8 {. Q" O

7 B2 D" a- x  n' Y$ i% I: [05小结
0 V7 x5 q5 Y8 R# a8 ]本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。8 ^2 e+ _  o2 D4 m" I$ y# D! m

. z( l! j# d6 B+ A- n; c/ U3 {2 x

6 j' ^' Z; z7 [8 S转载自: STM32单片机& h4 d7 q0 ?2 a3 r9 D# z, }8 M
如有侵权请联系删除
, w2 a" ]5 n- p$ P' l3 T& Z8 F+ K2 Q7 t3 z% E8 G8 K+ \

7 l/ A, i$ T# w* \. A1 ^4 a) u
0 ^& f+ Q' n5 Z9 ?3 @+ d, O
赞 收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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