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

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

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型+ ~( U# s. g' E$ d9 ?# p
所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。
- _- Y, X% U" i2 @" m% V8 ^
" X- I. J% F6 E$ R# T4 e, r蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:; J* f. g, B  R6 g! ^
• Public Bluetooth address // 1
6 N* L' J( ^8 i2 v9 P• Random Bluetooth address; C! r% ?7 ^  ^$ q3 X4 T$ l( d* w
   o Static address // 2
3 @( u. E, ]$ V* M8 L: J. [2 n   o Private address1 \' s/ x6 @2 I0 v: {
        ▪ Non-resolvable private address // 31 m4 V( B" K1 z- d1 A$ {4 [3 j% u
        ▪ Resolvable private address // 41 d" }8 H3 L: T3 w" x

9 x6 w1 O! s  C, o# c上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:/ z7 o5 w' t0 I( h4 |% o2 Q# o
• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。
! ^7 K; |8 F6 B0 a& ]$ k• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。
0 v. R# i9 o# X  k* X• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。
3 ^" r1 ~# R0 {: G( t
! f( g0 Z5 E) S( D" a+ k
设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。' e* C5 {: L: p1 G: j! S! {
" Y" x( |0 Q& T* j& l
如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。$ k# w! u& W1 D9 c
! \" c& S& w: N) {
1.1. Public Bluetooth Address1 r0 _+ E( k. }' D6 O- `. l
在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。
* e) E3 O* V& `9 {; T
; ?# Q1 z! I- B, p% c6 X
1.2. Random Static Device Address, X# q9 u6 S, n7 O0 ]9 u
蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:
8 H# B  r" d; q1 p. Z; U# l9 y
7 a, @4 N3 E0 N7 X+ D& P
微信图片_20240103192153.jpg
4 Q0 f  y! y3 D4 Y& I& H

1 s. M+ _$ l4 f* o5 A静态地址是随机生成的48位地址,应满足以下要求 :4 b1 Y8 A* C( U4 T2 U/ ~0 |
• 地址的随机部分至少有一位应为 0! h# W' ^3 w% z6 i) m& p6 Y
• 地址的随机部分至少有一位应为 1# X! |3 W' C- |! {( {

# s- M; I# b! z- H/ h* H
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
, ]  @. E* N- j2 V# K* l. c7 U
# X- Y9 U( Y% m6 I
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
) D, W' H1 b4 J& L9 w7 h' {/ }) O3 n& H
0 p5 c+ s" p2 M. q) e/ X
1.3. Random Non-Resolvable Private Address7 m! J! a$ w+ B8 I8 @, m+ H
隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:9 r) o. w$ K; w5 x( s3 F6 B  i* @

+ y5 j! v7 Z: [2 }
微信图片_20240103192147.jpg
9 ?/ ^! h0 D. S2 B' R
* ~% D7 W5 x, g: R0 I. H1 f
• 地址的随机部分至少有一位应为 18 i2 ~: d" z* p2 V8 d; R' N
• 地址的随机部分至少有一位应为 0
/ ^6 ]7 K  Q0 q8 |; V0 s/ N• 地址不得等于 Public 地址
: X+ \- b8 |7 T& i% b2 b& L
9 D; c# u& A0 q, R
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。8 j5 t- K2 o: A* b1 x0 {
1 B6 Z4 o7 e& Z8 X; A* s1 Z
1.4. Random Resolvable Private Address
: y9 d; u# s; ]) b/ ?. h所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。) f6 ?' B0 c8 X0 y

) h8 {4 B* A$ E# _
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:0 @8 h( [$ ]" L5 X1 F
• prand 的随机部分至少有一位为 0
3 }3 A* Q; d& C- x) |9 k• prand 的随机部分至少有一位为 1% r4 ?; f7 |% P5 {, V

# E6 m2 T3 Y2 T  H  H' o
微信图片_20240103192139.jpg

3 \4 _+ t6 U9 `% ~  L
特征如下:
3 i  u: I: U, u& n+ \$ a. J1)由两部分组成:) Z  U/ W3 Z$ G$ Z6 U& k1 C! d5 i0 @
高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;' c; [/ }: P0 W% L6 v& u
低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。
- k& H8 h3 O- q# [1 Q* f1 Y+ T8 W. s. t2 F/ c
2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。
, G' d& L0 k/ @* v9 G! i3 s9 }' u3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。; ~: Y) p' K4 M3 S: M
4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。
2 ?* p: x- u& A) v6 N3 H9 b# x0 r# G9 _; o6 r
02MAC 地址相关函数
, v+ F  j3 ~' |下面介绍两个比较重要的和 MAC 设置相关的函数。
5 W0 j; r2 M7 V
: m  a% L( D, ]

# ^( t! {9 G5 o3 D1 w// 配置 MAC 地址的函数% ~0 J3 j6 s; o) M/ m& F9 H
- c0 ]5 o" U. x4 J
微信图片_20240103192132.jpg
: ~- c3 M4 t, n  o& c
2 e8 D1 V6 S" U
其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:% J1 @$ e3 l2 K! e( ]! n
•  0x00:  CONFIG_DATA_PUBADDR_OFFSET
, ~# F* {# O; G8 |& s$ [4 q0 w% W•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS0 ^4 J: Y+ e0 a
6 M9 N7 ^8 U; v
//配置使用哪种 MAC 地址的函数:
0 o" y- F  _3 h1 F& T$ z! b) ]. i' {8 Q+ `; ]# n/ I# ~& N
微信图片_20240103192129.jpg
& h" u; m  z0 T
0 E' z1 V$ f, e9 M# q; g) V' Q! h
Identity_Address_Type :
8 n1 ?2 i& L7 o" E5 ]• 0x00: Public Address) R* Q/ z: C  q1 {$ `6 E* x9 B7 L
• 0x01: Static Random Address; r- v' c. o. ]2 j( H8 g
* Z. @4 `" ]2 I+ @2 ]. u, _+ i
03蓝牙 Random 静态设备地址的生成与设置参考方法
/ |1 S* C" c8 H' P4 Q为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。
5 \0 u# [1 _- y- T: e) T& _! ]5 ~7 C5 u- a4 ^
sha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:7 n# m4 h/ c; V. T: h+ t

. m9 n# S( O( Y% V" k4 J将 “#include” 更改为 “#include”6 X8 F0 ?, V. J5 u& W6 t( N/ t

7 x7 o8 p/ _' {+ [4 Z% H以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列$ u8 a4 P: M7 J

' W  q; d4 f; j, p. a  b// 生成静态 MAC 地址参考函数
+ e5 L- F  G  T, K& g
' }/ b9 ~0 b3 n9 L# O: y1 D
微信图片_20240103192125.jpg

$ K+ @9 A6 l1 j- W* E7 ~& n

% K7 Q9 M/ r7 V1 ~" b9 x0 @5 Q
3 G4 a  ~8 ]0 l$ u04蓝牙 Public 设备地址的购买流程! W- E' b) |1 x' N- b3 l
全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。, w) j7 S6 b  z; b% ^( W

3 Y% o- \6 I7 \4.1. OUI 介绍
- w7 o0 y# p% @* f0 D8 d( N4 a. HOrganizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。
, P6 v  G0 w0 h* I/ ~
) R+ c" Z; e3 K5 e( e
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。4 t- \" B0 B2 T! t7 G3 d  y5 [

$ }6 q5 s$ O! H2 h+ |6 F, w1 ]目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。
% r# U; U: b7 R, A4 B
; ~$ U6 g) \! f$ j& k; Q7 P3 E
如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问
$ J- Z0 k; z1 y2 ^( |, B2 {  l: V" C
输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。: k7 |. Z2 N+ o; x6 U- Z

: x, |  K# d" @1 F5 B" Y& x如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。
/ [# W* X+ r! j6 n
) }/ j4 h& q' i4.2. 购买流程
) Y) M( Z$ |: C2 N# J4 ~" e如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。, P  R; V! P: v9 u1 t6 Y* C
' [2 T) ?. v- D$ `. ?4 d; E5 C; {
图1.申请购买 public 地址入口
7 t# W6 S/ o9 G/ {2 H5 m! S$ v- O% D: [* Q) E+ o
微信图片_20240103192122.jpg 2 `0 O0 b5 ]5 x4 q
% ?7 e0 Z9 b/ C4 Q  W: U
图2. 选择购买的 MAC 地址数量和类型# \* H1 W) F4 S$ h& y* Q/ [  s
7 K1 n; n9 L0 q3 Z( H
微信图片_20240103192111.jpg
( r, w5 k, Z  b( @+ e! N6 ?
. E# H$ J; ^9 e  R- }. f6 [如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
% G4 `: k4 a( {: I* g! |% R6 I2 q5 \7 x- _
图3.申请过程中的 4 个步骤
3 P; L, W% C' D& @) y* D
3 ]  t/ q# m9 c. v6 \1 K
微信图片_20240103192107.jpg
# [" E. ^( k! q& ~1 r( v( a
! r! L! ]7 n/ y) X/ l主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;
0 d# D. w, v/ ]  ^7 n
6 J1 S: O" N+ V7 a' P  w/ g* k公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否
# A8 ]& c! H8 S8 w, a% P( G+ ]2 Q# |! ~5 b
如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。
3 [' y' K- q4 I

5 Q; U& z' a# [3 {& w完成以上内容后在线提交即可。8 [2 V6 d8 c; {. }+ n
7 [9 {% @! b6 o/ s# d9 f
4.3. 购买后检查确认
& V6 o3 P9 {; h$ n* l5 x. ]5 n4 y" j如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。% C! I. ^" o8 t1 p& [

+ ^; R7 w1 i2 ^3 _$ z+ f$ Z
微信图片_20240103192103.jpg

. s! X2 o$ J# G) i
1 @5 y, b) f* \1 m* `; c" R6 |
图4.在更新的列表中检查申请的地址' Z6 x9 ], e3 ~& Z6 V
2 C$ j! g$ {& \( B
  p7 W8 G0 B+ V
05小结* H, U' m4 m+ P- L+ T; P4 T
本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。
9 ]" K8 h, H: Q, l
* k; L9 p+ I+ r" m

9 e2 R5 [, _: [) ]! F- R# }$ D# O转载自: STM32单片机
1 `! S$ s& S8 N0 A2 c! L  o如有侵权请联系删除
& f8 r/ _8 w- g* B' O6 P+ _$ Q# k6 \: d/ H* t9 [
% k/ q* V7 d2 z$ C  `% ~

7 i# c/ {, v# w7 e3 N+ L
收藏 评论0 发布时间:2024-1-3 19:22

举报

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