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

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

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型
4 e) v6 g- G$ M3 ]& Z2 ^' i所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。& U; w% C; W% T8 T5 z

2 ~9 x; L( ^4 O4 }蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:
; H  A/ Q. W* f& v1 @8 L• Public Bluetooth address // 1) t# z) ^' b& D# z6 Y1 H
• Random Bluetooth address
2 z: [9 P6 w* Z" m  q   o Static address // 2
" {' y7 O3 r: S* W3 `& e8 S; a+ g9 M   o Private address( T9 {. m4 f* {! X
        ▪ Non-resolvable private address // 3
. Q& B/ }+ m# A; Z        ▪ Resolvable private address // 43 E' P8 ]% r7 q: _

7 A; }8 b7 G; K7 Z上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:5 L/ G8 \6 N& v; u$ b; H. I; d+ z+ _
• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。
4 f6 M0 a9 Z# G• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。
( N# f7 E# q+ T. x2 B6 N* c  _• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。% V. N3 X6 L% R6 f
. `: P- H. \) _) c1 n* z
设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。7 p1 R8 a: }9 E6 X3 h( p4 J; ?
# _3 n. R- M" z  D& @; g+ E
如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。
5 p; S- G% O5 h3 N' u% Y
0 L' z; g/ G% x. Y) M
1.1. Public Bluetooth Address4 P: v5 {; ?4 n) `# t- G
在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。8 C- B1 {# H+ I3 }1 J" D

: x) L  B% W3 B; O
1.2. Random Static Device Address
+ u( ?+ b, C& g蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:
* {6 d4 P2 |) w' b# T7 p9 |: ^5 ?2 t" N& S' u. n2 l: E; b9 I
微信图片_20240103192153.jpg

" J# G; d; T  y; ]/ a

$ O* B/ n6 g, e静态地址是随机生成的48位地址,应满足以下要求 :- h* m! n$ J% a, m7 F$ ~
• 地址的随机部分至少有一位应为 04 X% G' e' \3 h( X- n' G  s  a% [
• 地址的随机部分至少有一位应为 1
- }5 s+ W; f9 e% V& l
$ G6 e( Z, O% {4 m1 g$ ]6 a- z
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
! K0 ]2 c) d! o, `0 q! p$ V% @  ]# j/ P) [% F
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
8 ~) ?( M5 K( ^7 w. Y: s% I6 T
& w* X6 ^# E* ^& q6 ~6 ^4 n: h; y
1.3. Random Non-Resolvable Private Address
+ ~, g1 O! }% i: Z. O0 r& u" h' t隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:
! a& h5 s) C. ?! K$ \7 c" Q
4 ^+ H+ K5 ^, D( \4 l1 u
微信图片_20240103192147.jpg
+ ?  s# F2 @  p# v: b
$ s9 \* J, f3 e: p1 o: e+ Q
• 地址的随机部分至少有一位应为 1
. Y% S1 i2 U+ p- S( O# X$ u' N• 地址的随机部分至少有一位应为 0
) W. U$ r! V* `  G  r3 |6 |• 地址不得等于 Public 地址* @) E* C2 a7 b5 \( t
$ J" N; {) m" m, v* U* [3 K9 j' |
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。0 K! J1 p; o% z* R  [8 x
: B* o( v3 a( W( F" M+ ]
1.4. Random Resolvable Private Address6 t6 ?6 n# ?3 Z3 |  S8 E1 U
所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。* \  t$ Z) H! I- C

4 J9 |+ f( i- h# T
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:
6 N' b) U  f8 V2 O! I• prand 的随机部分至少有一位为 0
" o" T$ s. c- A2 b  P% W• prand 的随机部分至少有一位为 11 _% R6 h* W3 H* b- s! g9 A5 k
: u( N' e4 x% j/ P
微信图片_20240103192139.jpg
2 {2 k! ^0 w! D6 @2 H. m% z
特征如下:4 {4 A' l* X. `) I  ^8 B, a
1)由两部分组成:
- S& ~# t3 D; p& P4 |3 u高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;
( [/ P1 X  Z( C3 Z  y5 ]! K低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。
) Y4 T5 N; o6 I2 p8 H) K! O: H2 e% t& A5 A  _6 ?9 b
2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。! F) T% W. o2 S
3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。* \8 Z" g: X* c  m/ e; V
4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。
0 Y% I8 [% o0 ]8 ~! \* I' [4 r" q% T! n" N& E3 ~' L/ }3 K( D+ j0 h; H
02MAC 地址相关函数
* s" Z/ i& d+ ]6 f下面介绍两个比较重要的和 MAC 设置相关的函数。7 n) |7 Z  N; N2 n4 P6 d$ ?- p
. R  Q: t9 s0 p, E- l8 E

- V1 M. S1 D- H( y, h/ i// 配置 MAC 地址的函数
, x2 z# Y- \: _- h8 h- Q
3 b  L# `4 K# E) R; K& j
微信图片_20240103192132.jpg

7 o- k) F* ~# ^: n+ {
1 v" z& L2 Z4 U' b5 I
其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:4 `1 ^# W: C5 i" q8 l5 H
•  0x00:  CONFIG_DATA_PUBADDR_OFFSET
1 f3 v$ C# J1 Q7 }0 O% \% G•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS$ |  v5 X9 I/ c! q/ Y

5 U9 k' Z7 D! J& S* c//配置使用哪种 MAC 地址的函数:) b* h( l9 B8 a4 d
1 O/ P) d/ S# [2 Y
微信图片_20240103192129.jpg

0 `2 F  y9 A7 a7 K# K4 ~: S
/ q( Y* Y- @* x+ @- L
Identity_Address_Type :! ^2 w  R5 A* P: k% L4 \
• 0x00: Public Address( D% n& s5 g% S& q) E: A" X( ?1 \
• 0x01: Static Random Address
4 B" J* W- [1 W
0 p8 \9 K( j: C9 j; z; @
03蓝牙 Random 静态设备地址的生成与设置参考方法# D& N/ p% h) G
为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。
3 U. E2 v+ A4 a
' A3 B$ T( K! q8 asha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:
, m% T- @- g2 h! L  }% Q% ]4 P
9 M% }- e( o& H" L$ a将 “#include” 更改为 “#include”' H% F! K9 r& E: e! |8 E8 z* P

% d* `0 {; X4 H以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列
5 H6 C1 Z" X! P1 i+ @) R7 \0 u. ]
// 生成静态 MAC 地址参考函数6 I9 j# c8 X4 F% x

6 O. L% W4 C6 r( {
微信图片_20240103192125.jpg

6 s: D* S! g3 |

  C! k7 z. m3 |6 [% k3 I  d
+ t$ [4 G) k, Y0 M% I04蓝牙 Public 设备地址的购买流程) R0 j$ b/ l* N* w, [% a$ q
全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。8 L1 k* R4 C- ~# n
0 C2 i# n' D' q
4.1. OUI 介绍
0 G* G; B, S: P  Z, {# v) g. HOrganizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。
' g& i' J7 ~- |
7 ~! r! k! b( ]* Y* O
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。% f, o! I8 P0 B: l3 {5 e4 X/ ]; b, `

0 O6 a& e/ f( @, \目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。
* p% n4 ]$ `; x
  r( X& J& i) g, E4 Z
如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问. h2 k+ J$ s) N9 B! V
8 ~; t2 _8 g- x! Z2 _/ d7 z6 s2 p
输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。  P# `, A5 _" }

* w1 b: j6 l: y如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。$ K. N7 _! X- O* ^8 U# O$ J

6 ~1 d( @* W# P4 V& B9 y  F4.2. 购买流程3 C( u7 a/ \. f( {
如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。) c! o/ q- ?! |  S5 L
* b& d- f8 }$ }
图1.申请购买 public 地址入口
! w% i; R; B6 D# R4 T& R" {) ]. w5 \4 I+ ^
微信图片_20240103192122.jpg ; F" @* m" u8 l9 i

5 E! l4 V9 u# P  n; x图2. 选择购买的 MAC 地址数量和类型
. y. [+ Q7 D2 G% x; ~
6 Q) i% e8 J) S$ a) Z
微信图片_20240103192111.jpg 3 [; s% {% T0 Z! M: p1 h

: Q  f5 ^" T: J( k如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
+ Q$ H& o/ x7 B/ S3 _
/ k4 H) Q6 e" x' L图3.申请过程中的 4 个步骤
. R, b9 R* P' M6 Q
2 ~8 w; O  L. \1 W0 K2 H" O
微信图片_20240103192107.jpg
0 E! b& B9 O" W' U# A6 ]: V' V2 z1 J& |9 a9 p
主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;. c. d6 @3 j1 a: m
% n+ i+ o0 U: h, b6 A2 _, [
公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否8 {5 |3 M4 g8 |7 h1 e" g" H8 N( I
2 Z7 h- _1 h, n
如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。
% X- ^" a  w4 ~
& S) `8 c' _) y( ?* `
完成以上内容后在线提交即可。, u( w$ ?" S: F* A
: C( |  o; g- K. w1 B
4.3. 购买后检查确认
7 x! t# y9 S* M7 d2 X! p如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。
! _: ?: M) U+ X0 D- a7 j8 `  f9 y2 k# |& Z
微信图片_20240103192103.jpg
' Y& B% ]3 ^9 q9 t1 S/ [7 ~

& Z& z- Q- M- N" T图4.在更新的列表中检查申请的地址& i6 E2 h: j4 }, P+ t, E

+ A  L1 g! @% t& h) f
. k6 b! a: s/ K: U& k
05小结. @: }! S; `  O# C" P0 t
本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。
) X. }+ _6 T* x: h  z) a  P
) Y9 ~7 E7 o2 o; v5 y

: z5 E, c! ~# }& c转载自: STM32单片机
5 F7 G3 N' B$ \9 v如有侵权请联系删除
& [7 Z; H" U6 Y" h
' Z# y( Y: V9 `- t, v  ?

/ |& ?1 F! Q3 s0 q) S. t
( S9 w9 U) V6 e/ {( I6 t6 [
收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版