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

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

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型7 ]- ]6 Z8 K, \3 N' d
所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。. a5 S3 ]( z" f8 w; h

: B2 W+ Q3 I- B5 q  W* O蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:
. R9 x. ^$ p! R, [• Public Bluetooth address // 1: Z6 ?, `; J4 P, l# T4 u6 U) G6 e
• Random Bluetooth address: q, X+ N! d+ x" n8 j# F
   o Static address // 2
( H$ i2 E+ z, e( |* q0 P   o Private address
" E/ C$ E4 a2 W: F6 T        ▪ Non-resolvable private address // 3
) T, I% K& Y; s4 A) j        ▪ Resolvable private address // 4/ j- U& c# f" x# `7 w
  J4 `; i0 F- N
上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:
: k) g7 _/ O! ]• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。; O( c* j$ C  o; Q8 [
• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。; h+ |- b& b% s4 h
• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。5 k: l" h  S# {

) W2 F. X; d; W$ p  k7 l  }* a, ^# [设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。
- F- C! z; a8 K- J% J" T3 H8 t% {
如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。5 A8 b4 Q* U3 W$ ^( W$ t- }

+ K) t: h1 p+ H4 j
1.1. Public Bluetooth Address  Q, X2 Y! f" ]6 V' h/ g
在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。2 F6 ~3 f% A! j" r8 q+ x& P

. d$ r9 p- V; v# A" }7 C
1.2. Random Static Device Address/ J% ~( F* |5 K  R2 X
蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:
+ I, S% f" e) t; {- L9 W* A& V3 b' [* }
微信图片_20240103192153.jpg
8 x8 D; g& y2 ?  x3 Q
: C- P. s7 s, a& M. M
静态地址是随机生成的48位地址,应满足以下要求 :. Y+ N9 @# U3 O# n1 A
• 地址的随机部分至少有一位应为 0
6 }8 c: L: K, y; A- G• 地址的随机部分至少有一位应为 1  r' V" k9 T2 C  c7 Z& o' N2 Q

- V% \! f6 P# Y0 {+ k2 {9 O( r( n
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
* X& J/ x8 E3 l; ^& G- u1 E8 b( \( O' V/ g  j
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。$ T. q/ E/ P9 W8 x$ n* _+ [9 \

6 d5 c  X( T6 ^" x( w9 A
1.3. Random Non-Resolvable Private Address8 h5 z2 B: N7 ^  a" c0 f  p
隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:
* r9 q. J2 ~& Q) g6 M  d1 W9 o5 X5 p; d5 }
微信图片_20240103192147.jpg
( k* y. [; W2 c
! H- |0 a! o! p, o
• 地址的随机部分至少有一位应为 1% X: K8 D. M# e3 A: u
• 地址的随机部分至少有一位应为 0
7 B. B2 U8 j$ H! D# _3 M• 地址不得等于 Public 地址
. u" P1 k1 c8 Z7 o- A- o" U5 ^5 A# a8 |; e" u" G2 c; A
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。! t# v% `, V- o) d4 g

9 q1 C: k- N( B% ]$ C1 ]' a3 F
1.4. Random Resolvable Private Address/ h1 {4 j& }/ K! i
所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。
  ^) ~8 G* ~( o
7 x, G7 h" E& Q: I  U3 D
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:
8 K+ Q& m& V, ?6 p• prand 的随机部分至少有一位为 0
, J7 l! H! g- q. y8 l  s8 r• prand 的随机部分至少有一位为 1
+ i5 z8 D, D1 M* X$ Z% z4 b% T' e* T4 D* L) D: u
微信图片_20240103192139.jpg
- b4 J" a* a2 m  [0 o
特征如下:
2 P8 f! V( M0 T+ n3 e# }1)由两部分组成:# ~0 X0 c5 B2 x
高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;* U# k& |1 p) c" b8 i- G  B
低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。- J- \# G5 N' J8 J9 n$ U0 ?$ ^& {

$ T! i1 {) T2 [$ I+ G2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。
4 i9 ^0 A) X* q. Y1 J3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。9 s+ w, Z5 r( F0 Z& b! e8 q
4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。
, Q5 j0 \& w$ z
: \$ T: q, Z$ Q3 o, N
02MAC 地址相关函数
$ P) o6 Z8 v- b下面介绍两个比较重要的和 MAC 设置相关的函数。  r& H+ E7 f5 p2 o: J8 i
. ]) p6 G) T8 [% W1 H! z

6 a7 h4 M+ G9 V' T: P) `8 g// 配置 MAC 地址的函数0 S7 d$ y$ C+ [1 Q# [
) Q  j, @) ]+ r
微信图片_20240103192132.jpg

5 Q0 H' E, B" J1 ~% S
+ V1 E0 y3 F+ w/ B: I, [# j: ?% U
其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:
) _5 r9 u, A0 a3 Z•  0x00:  CONFIG_DATA_PUBADDR_OFFSET
' \# K/ @( C+ Z•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS
* Q4 s5 W# v2 ^4 R! ?" v0 I, r4 u* w( b# A% ~
//配置使用哪种 MAC 地址的函数:' w; B( K5 n  P% z  q9 w  {- i  E6 C
5 ?# {' }  M0 r3 n9 C/ z+ _
微信图片_20240103192129.jpg
1 e1 Z( \% \' T. a% h; i4 d" c
; q0 g: w. m# j+ c( `9 O- X
Identity_Address_Type :
* g  ^5 n2 ]+ ?9 s2 {* b, j: b• 0x00: Public Address
6 n2 E3 P# H( r• 0x01: Static Random Address* R" m8 U/ c: M' k- n

; N( T. E, M& B9 h; J& T# V7 f) R03蓝牙 Random 静态设备地址的生成与设置参考方法4 U9 p# c4 v3 t/ t4 ?; P
为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。
" h5 K% v: g+ i' H/ ~/ ~# b; b! q  E5 K% r0 o6 m0 `. I
sha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:7 ~- k% ^8 C0 H+ }
+ N* p! a4 T; [
将 “#include” 更改为 “#include”. @  }/ ]/ U/ V8 M

( V/ O, l$ t- ?  ^以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列1 K% M( f  c1 H  A

5 M5 G) f8 z) W3 x" e1 |// 生成静态 MAC 地址参考函数7 E: M8 G+ R9 K( o) F3 G4 U
( U7 v9 D1 o9 S" @. ~& F' l: g7 z! Y
微信图片_20240103192125.jpg
+ K; I0 w5 F% l+ l' q, s  E

6 G- ?- b# H1 S, K0 F. y/ ^9 o4 ^' a6 t; D, d$ F. c
04蓝牙 Public 设备地址的购买流程' A* M- Y, l/ {! P( {& T
全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。
2 S% i1 E% e) k$ W6 O
8 X8 @6 x, `  X# Q: c" e6 p+ E4.1. OUI 介绍  e* W2 C, E! v- v8 W* X
Organizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。
" D' {4 d4 U: J* ]  R9 w
8 l' g' O7 p; O' U8 F
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。
& E; a, e% d- N: n* y( k5 T
2 C% e! E7 h! V1 C目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。' U8 @5 Z8 @) j
8 {3 _2 ^8 Y6 z+ M7 C6 r  U
如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问6 f3 A1 b% z3 w! N" m

% \, e9 K3 H2 d7 K1 r输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。1 y# u& L- y/ K8 ~, ?& b; G/ Y1 ~

- V" F% n7 f& w3 E! |5 s如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。+ M/ D! q+ z+ R
2 t# v; r- a9 C, L/ s# C
4.2. 购买流程
, b# ]" W0 g- l( h! w- |如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。+ a3 R6 G3 S! X$ o
8 C/ h  B. f. _3 L  B* x( Y
图1.申请购买 public 地址入口
) u6 D+ M1 M, E6 k# `( P+ D: ^6 t: R: ~7 r' O
微信图片_20240103192122.jpg
4 L( y7 i( [5 [6 N# J2 ^# G* S

- {6 N. U3 y+ w4 s  y1 ?& |图2. 选择购买的 MAC 地址数量和类型
4 k, N7 g- O9 D( g* [& Y, ~6 y6 K3 M6 J" `! g
微信图片_20240103192111.jpg
7 h6 m" Z6 W$ Z3 Q8 M% q- ?) w, V; r: C  e, m2 ?7 V% k
如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
4 }9 M( E8 Y) H- X5 Y: p' Q3 h
3 x/ W( D5 d( m  b& g图3.申请过程中的 4 个步骤% t2 c0 l- F# i3 E; N* D. b
* w3 ?6 W) n( A  B  G
微信图片_20240103192107.jpg
! d$ |5 ~2 ?! A1 c
( q. x4 T9 M( X) q4 y主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;4 z0 _. L# Y  z. Z; W; V- O2 d
" S1 k: I4 }; r/ J3 ~, u4 S
公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否
# [& j2 H( c, V# \
- L% ^3 ?) Z7 ~, ~0 J如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。
% c7 d. W  R/ ~. R* P
: x: c5 _% U9 j
完成以上内容后在线提交即可。
* k" |( @6 U6 j- w& K3 Q! s2 d
4 \  ^7 Z( f# F) w' y9 {4.3. 购买后检查确认
! @& ?- k6 F' r* ~% ~: K4 K* R* u如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。
( y* H. u' `, Y, w. u/ k4 t2 q) \! z9 X; Y5 ^  u+ O, w& l
微信图片_20240103192103.jpg
( \9 Z8 B/ f3 G. G* Q

5 i" G1 `1 J, f, v图4.在更新的列表中检查申请的地址, A* W2 ^, `. j( X  q* O1 ^/ E' v

/ z$ ]. ^3 y3 f; `1 R* D/ h8 D2 }

5 S3 L% u2 U1 H# S05小结$ S6 e/ ~9 N) q' b9 D
本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。& k. F- s; ^. `

  S8 d/ P$ k* h' F6 ~& {3 y
+ y) W1 F! l7 D, B
转载自: STM32单片机
: G: w4 f# c" S$ Q  V7 ~7 b如有侵权请联系删除
) M  _1 d' J4 |* S' h( e$ e0 f3 q/ N& [1 `
$ ^6 l) \& l* }& _# Z% B
! M2 H; b3 G, E# Q5 C  F
收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版