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

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

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型5 k% F6 S" W! J0 l+ p4 E+ }4 e
所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。
0 K2 L: u1 d3 g& h/ P: R
" P# H7 q3 @5 W% I6 [+ {蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:. I, e4 [, z, a3 P' |! U
• Public Bluetooth address // 16 G- M/ k! A, ]: V/ e
• Random Bluetooth address
0 G5 T2 Z5 k: a9 E, l& n2 |; ?2 d: t   o Static address // 2" m& {0 Z  e1 |5 ^$ L
   o Private address
8 D% e8 K$ m; f, W9 M0 N9 {        ▪ Non-resolvable private address // 3
$ [0 I- m0 J3 w" n. F        ▪ Resolvable private address // 4
- s/ P, H" V% x# n
' y& ^7 Q6 v; H6 _* ^3 o) Z上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:
7 {/ H. \/ i# |0 G. z# t• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。
/ W' b9 j; N7 F: Z( v5 ~0 z, V• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。7 S3 u" d7 t& C5 Q
• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。
: t) L8 r, H: a4 A

/ H  O( }1 S3 }% E9 n" r! v! [设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。7 |! Y+ K0 G7 q. {: \3 u

6 F$ q0 ], e6 b+ n1 J' O如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。/ X+ N( [0 q6 Y
: Z5 c7 X9 Z5 z! F8 W4 N- a
1.1. Public Bluetooth Address: e: O6 W2 L6 ?
在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。
% Z  |' o7 t/ j+ H
# e# `7 d! R* V) o% {
1.2. Random Static Device Address
# z5 \& l# a" n* r蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:9 B  [: C' C% P  Q6 X

7 F4 w+ E# K; n
微信图片_20240103192153.jpg

- y) v4 B7 l, r5 {7 N  g* L9 c
0 ]- b3 J/ Q. Z! T6 i, u9 D8 x8 f
静态地址是随机生成的48位地址,应满足以下要求 :1 X# n% Z% X, K( B
• 地址的随机部分至少有一位应为 0  U6 T8 [( T* F& `: r1 N
• 地址的随机部分至少有一位应为 1
% u( O: j' i1 |9 X: p
3 ?3 n% `9 g  h  t
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
: u+ {2 Q/ m; l! T, P( j% s! L4 _: ~& Y$ |+ j0 Q+ z
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
' d: S; C2 L6 G. V; T/ V. k
, s4 E8 W( ]6 P2 `9 O) s# F$ V9 Y
1.3. Random Non-Resolvable Private Address) H* c& E+ w7 a7 J4 f+ J; q; n
隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:  q1 ]0 J2 l, A! r

- a- W: @/ b# y! B6 D7 o+ G
微信图片_20240103192147.jpg

- v0 }/ M4 P5 R. M* c2 H
. m2 g  M7 ?5 s0 u7 }  J! G$ y• 地址的随机部分至少有一位应为 1
. k  B- e- p- m• 地址的随机部分至少有一位应为 0* m0 L' w  }, ]$ Z
• 地址不得等于 Public 地址
. |0 {8 K! l. G% C4 V
* |3 H/ u  d! @0 ~; ]3 ?+ v
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。
9 a, f( F) S- Q5 {+ p% k( }5 @) Y7 l0 @
1.4. Random Resolvable Private Address, X: p- B2 k5 h* d
所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。
) ^4 j1 b8 k! ~% |2 K5 x: \- j8 l4 _- V! A% Q5 B
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:# \) l" h- `2 Z6 `8 D, w
• prand 的随机部分至少有一位为 0
! ]- O: Z( @, L- X" _% \( ~• prand 的随机部分至少有一位为 1% |/ L+ ?0 P# u/ b0 G+ T

% w1 D" ?# Z( K' P1 I$ W$ S' E7 h
微信图片_20240103192139.jpg

7 l6 i, O5 a; B& u
特征如下:7 Q: k  W7 S$ g6 a$ w0 m$ g
1)由两部分组成:
9 ~9 k5 I5 m0 G/ l0 A高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;
" V% z( }/ p: }! P* H6 ~低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。
4 [; t8 _* T$ P8 I' @1 L1 {+ l" a" s1 G+ S
2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。* }# W5 D* U) z8 Q
3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。
4 i9 b' y* D& \6 {: n$ t4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。
2 d1 _& F1 j) f- {1 g7 ~4 Z2 g6 e
02MAC 地址相关函数
9 h/ q9 m9 N8 K下面介绍两个比较重要的和 MAC 设置相关的函数。6 Y4 y9 _3 F1 k. M) }  o6 e! x9 a

& `8 P7 v2 }8 G0 Y; [: U9 d% }5 \7 X; o

; @4 A" D! N  v  P$ H. Y( S// 配置 MAC 地址的函数
* Q: I4 S' @& B8 r$ E5 O6 j! T# x
微信图片_20240103192132.jpg

- X2 T" p8 ?' D+ @+ l, h
! Q& A1 C  D  J, A9 m1 \
其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:: N9 g$ e' `' x4 j$ w' r
•  0x00:  CONFIG_DATA_PUBADDR_OFFSET- q* c, t$ v  g' P4 ~2 |
•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS
$ U! z5 _' l5 S' @+ j. {4 F3 X2 `* K
//配置使用哪种 MAC 地址的函数:3 u% Y/ v3 t. E

; l2 Z9 W) E  Z3 [1 K7 M
微信图片_20240103192129.jpg
" Q) l3 V3 o! v$ c! G
. Q4 }! q' W/ o$ V* d4 z
Identity_Address_Type :" a6 i# M' U2 |- W+ l" V
• 0x00: Public Address/ l: n0 W" _9 T7 e; R. M8 P( \! o& t
• 0x01: Static Random Address; W, X* |& ~2 _2 `' O/ y- Z7 F8 w& z+ q

# t) o6 g) o* L. |" c* p* ^0 k, t03蓝牙 Random 静态设备地址的生成与设置参考方法5 ^4 f: U. U0 @
为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。% k) S* [. I. ^- k7 l' j

* ]- q0 O* p+ I9 Usha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:1 i5 l- }; Z  }/ T7 F
3 |; S/ f' J, I
将 “#include” 更改为 “#include”
$ X& j* w. I" ~

7 C. a: b8 _4 ~9 M) H" G以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列
) w$ N. ~; L) A8 _5 [. e
7 m: d% m- \' c; ~- \2 z// 生成静态 MAC 地址参考函数6 [% z/ l* w0 L3 T% E/ d1 J; Q( |

  S6 S6 Q# ~" T7 W3 y* T
微信图片_20240103192125.jpg
, h# U5 A/ D: D; \

# m) T# k8 [, o( U
( z$ W% d$ p% p04蓝牙 Public 设备地址的购买流程
" U5 B' \* _* v. P( F& t" \全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。0 t& }7 t" i; d( r7 T, v
4 j, \. p2 Y* @6 n
4.1. OUI 介绍6 M# F( [( F- F( ~+ t6 G
Organizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。3 e; y; y' w- z# ?  R5 [

0 ?- M7 W2 J' h通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。$ I5 Q' `* W; N, J6 H2 k

6 K' |& o. e' `目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。
. [8 e& q) J9 m: y' i

. Z0 Z. ^& p* [7 E9 y如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问0 W) z& w& \9 F: X1 l8 n! W

% x7 z# I  o) P8 A4 j1 [输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。
7 x% O2 S5 E( O! {. z, I; U' R( r' E: M2 Q" b' _9 D
如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。
3 N( ]3 f! i" ]% c  d9 H2 J4 I7 n/ Q
4.2. 购买流程
  t2 K( K* V3 S- F* F  y1 d" U如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。4 {7 _# F$ S* L, X! E  }7 N

+ z5 C/ Q. E6 n) ?4 L( U图1.申请购买 public 地址入口1 u- U4 E$ g6 O1 a$ x

+ [2 z. B0 V9 G
微信图片_20240103192122.jpg
# K* e% a* ?# g! w/ U, \0 Z, Y& E
" X+ E# L' h& s( V
图2. 选择购买的 MAC 地址数量和类型1 a4 S9 S7 O0 p- C3 p

% D- _8 g+ Q  W
微信图片_20240103192111.jpg ( B8 f2 S8 ^- {. B( Y2 v% O$ c
; f& G1 C2 l& {- @! C( h
如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
) e- X7 N. R1 B) k5 M& |* h' E( r/ \: v( q. {
图3.申请过程中的 4 个步骤
$ ~# Y7 s& t/ n: i) C- M4 b$ x. t, t& I& d8 A, m3 a/ v/ o
微信图片_20240103192107.jpg
8 _0 T( x/ N" o$ ^, u; R. C7 M4 L, |0 B/ O1 u" x: k* {8 {
主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;
- o: ^% R1 f5 o, X; W' _, t
1 u. z( r* ]! G" x( t# @公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否
4 C/ \2 W+ ?7 [* G& N7 W6 f) \' f1 H) u! `+ E7 z: T7 w9 ^
如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。
, e7 S: ~' o: L! i: j4 ?
& h2 @& W$ ?$ O5 U7 h
完成以上内容后在线提交即可。
( P9 k7 y. f4 }4 U5 i9 I
/ a( S  M+ O3 I8 y. v4 W' S' n4.3. 购买后检查确认1 W$ J. B8 P! L1 L8 E8 \3 Z( q
如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。
3 j& Y8 p3 ~% H% y# E& Z1 F: Q  N; m0 T  K8 I2 m% q! x" e5 V' o, }. Z
微信图片_20240103192103.jpg

  D0 s* _% R. r7 Z0 s/ f
# V, o: z7 \, o& B# Q
图4.在更新的列表中检查申请的地址
" T* u7 H2 M/ W: ?; q0 @* J( I; j( Q/ c' l& Z# p# v- [5 f
% w; E( u7 n/ {
05小结
) b1 _4 ]; p2 C本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。3 ~, T3 h# D5 |- Q) g

+ o7 O; ]% K: D! v- L) O1 S& [

0 Z; V( Z& T1 I+ t* C转载自: STM32单片机9 S: h  o1 u: Z/ ~
如有侵权请联系删除
( I- b# w8 x0 ^3 b5 z' Y  A5 ~8 |$ u+ |2 Z  \5 L# u3 R
' [; r" {: f& A! `: z' A4 g

0 C$ K( e4 |& o6 |/ E
收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版