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

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

[复制链接]
STMCU小助手 发布时间:2024-1-3 19:22
01蓝牙设备地址的类型
5 d4 m9 b6 O, @3 _所有蓝牙设备都应具有一个蓝牙设备地址 (BD_ADDR),该地址(及其地址类型)可以唯一地(一定范围内唯一)标识该设备。使用者如果不了解其概念,看上去可能会有很多疑惑,甚至容易造成侵权问题。, R6 q) c" n9 C( u

  O2 v- v( x+ |4 G蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:- Z9 N$ |# w6 |4 S  D
• Public Bluetooth address // 1
% G: n: T1 s% Z4 ]4 k• Random Bluetooth address; }9 j5 f/ x( r1 O6 i
   o Static address // 2: e' u1 v$ j5 Q9 L& v" x- H
   o Private address
5 A3 b5 X1 R8 @2 z  j- H' k        ▪ Non-resolvable private address // 3
+ g3 ^# `% X0 F& e        ▪ Resolvable private address // 47 u6 d5 H$ R/ c8 u% r' g4 {

5 C% B! Y) p& x5 o+ _上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:
7 @+ @6 L6 s2 _9 u2 B5 ?• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。7 @6 X& V+ B6 H* d  v
• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。
" e; E) c  N- k8 o7 C& C• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。* @( G3 H6 ]( d' @9 v/ f5 \
7 n% V/ w0 O. J+ L( W
设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。
' p2 h% s8 Q- u  o- b6 f$ {
  M6 H$ K$ ^" o+ ^8 g) u8 g如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。2 m4 R, Q8 X1 y$ d( o5 y* ]; y4 d
* N9 H2 v$ u9 r* E: f
1.1. Public Bluetooth Address
) A1 r3 e$ _) I+ L* h7 U2 S在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。+ R2 P, e/ v# @" e/ j1 c

1 A9 F3 A9 }8 m7 [
1.2. Random Static Device Address3 u9 X4 B+ C+ \( `  r" T
蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:
1 {7 o, d' A" U! x1 ^: U) @& v+ P
4 `+ O) O1 k; G* t% p0 n5 i! w
微信图片_20240103192153.jpg

; e* t) _0 C  t( q' x- d% Y

! z3 n6 D! G5 ~1 Q静态地址是随机生成的48位地址,应满足以下要求 :
! o9 D1 M: l' }6 k& M• 地址的随机部分至少有一位应为 0( n" x6 C/ }/ z# x+ `- D0 B. M
• 地址的随机部分至少有一位应为 1: n+ v0 o% z- i. u1 Y5 G
3 P; E; `) l5 C4 {: n; N4 }* P
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
% D, h5 a+ \8 M4 g0 U5 n
% \+ e" o5 y% m+ }# J9 L. e7 h
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
. P: {6 q' j! @6 W! o/ j  _4 M6 v( d; {
1.3. Random Non-Resolvable Private Address
! E* }! z8 F5 v! L隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:# q3 F+ z! ?' {, S! B/ C  V/ w- G

& L- v8 E5 Q9 ?- V
微信图片_20240103192147.jpg

0 q) X6 u; p  l6 i6 C7 s% @
+ V% J7 h" i, @8 {" M• 地址的随机部分至少有一位应为 1
$ D# k9 g5 W/ o4 T- V- W5 D& ^2 [• 地址的随机部分至少有一位应为 0) V; \5 I" O# A2 {4 r5 Z
• 地址不得等于 Public 地址
. a1 H- o% H+ e1 v5 j. ]* U" U/ A# C4 M9 [0 H/ `- _% ?* r
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。
3 v2 _: f6 [) ^( e% W
+ X" C/ b1 J, c- I' g" ~% E
1.4. Random Resolvable Private Address3 L9 n$ B: A# n
所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。
& E" s4 b9 [4 n$ x; p/ x
! ]3 p( h$ q0 n0 F5 E& p
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:% a% O! W; J/ Q- t/ x
• prand 的随机部分至少有一位为 0
4 e2 |- \( ]- p8 b% G5 |• prand 的随机部分至少有一位为 1, b- w# Q. B( A: |

* y! l% L: x7 w1 r2 C- D
微信图片_20240103192139.jpg
* n3 {/ A1 e/ o0 s4 y
特征如下:* `8 o- x" ?" n
1)由两部分组成:, p' x. u) f. d7 M
高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;
7 B) w9 G2 J( W1 E) y8 ^低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。
# c+ I  O0 H$ q! S, k7 T
: F- C+ r3 `  `5 D2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。
7 U5 V; }3 @2 ^. M3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。
8 }; g+ |. g: x) }4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。# q6 ~% G; K. {. n

8 Z* u! S- m  t
02MAC 地址相关函数
; |+ M9 N, C/ r" v$ @+ C: s+ b8 r# t) X下面介绍两个比较重要的和 MAC 设置相关的函数。
% W6 M1 l3 Y; `7 |. x' ~7 a4 ~" Q9 {7 k; ], m: a
. B, S; B4 `1 r; u" V  S, @
// 配置 MAC 地址的函数( n9 d6 |) K" l, m8 u! ?# W
1 E7 b$ H8 ~2 Q
微信图片_20240103192132.jpg

3 {1 S- f# B* V) P9 A

. |7 _# g6 q5 G: P4 ^- s0 W( w2 E! e* X其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:/ x  m! X& ^% G
•  0x00:  CONFIG_DATA_PUBADDR_OFFSET7 |* P. r2 x# L
•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS' a( M' g0 ?6 S) P0 ]
  N9 C# ^& m9 W
//配置使用哪种 MAC 地址的函数:
  k; p* n* w; N4 b. T2 Z% K- v4 N! \' L6 t6 `* M, E
微信图片_20240103192129.jpg
& v1 N5 m4 l! k3 f
+ a& l8 \" [' [6 [! x1 [. y
Identity_Address_Type :
  Q$ @7 A; D0 B; T% j4 q3 F• 0x00: Public Address+ M0 {* Z5 z& q! c4 j" U
• 0x01: Static Random Address
- A4 _3 H% x* N- R7 ~$ J

. p4 Y; n% G. H: K! f8 f. z03蓝牙 Random 静态设备地址的生成与设置参考方法. K1 E; d  L5 j7 v$ u$ x* m. e
为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。
' X& F& o4 H7 v/ ]1 x" d/ Q
. l" X, l5 u3 I5 s& Q( H3 b( Qsha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:4 S( g& H2 D4 Y1 M0 @, r& R

7 g4 G4 y) @) O5 U* L$ P将 “#include” 更改为 “#include”
, s5 A: Y" I- H# L/ I& H
% N6 f3 Z: c: P. ]2 q+ C( ^
以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列
1 R! j3 Q& E+ n, {/ h' d7 ], e
6 X. w* B# ?  R' K- ]$ @// 生成静态 MAC 地址参考函数
' h4 m/ U% _0 V4 Y2 S7 N" y: Y8 h' {. E* C1 k  {
微信图片_20240103192125.jpg
2 k* A' ?* Y8 p" d; K, P3 r! T3 T
% U8 w4 d- B% y1 Q0 S: \
! o$ W+ p: H8 {: Q6 ]
04蓝牙 Public 设备地址的购买流程# _/ K1 [; _5 W2 }- [) e/ E
全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。6 Y/ [; E' u. |
3 ~9 c# q0 P9 L* P. b( r/ Q# ^
4.1. OUI 介绍
! N$ v0 r8 V, G% r% o& ?Organizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。
  N9 h+ i8 X- p* y# w) g' ~
- u, Z2 w! p7 I& P3 r
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。) _8 C. i+ r* f* g& @# `$ U
8 d; ?1 |2 r  n4 t
目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。
# C3 T' q; G, c% y; r. Q" |* s
% V, K4 [! p- v" l) X* k
如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问
4 U! ]' d! ]  b$ h5 H( T
. k( A: l; {3 Y# N& A+ Z, f输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。' R$ Y$ X% N, g; j) _

# L. g/ x  D" j2 _5 f: p如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。
: D$ ~7 z  ~! g+ A- g- V
" r% t, V  O4 H/ d" e: K4.2. 购买流程
& Z) K# G4 w4 M. Q# o( K' {4 t如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。
' q6 u1 @  q0 A$ z! p$ x* P, x( S4 d" ?: d
图1.申请购买 public 地址入口
% C$ @+ y8 c& g, `
6 l+ l8 o9 h9 x5 j# H9 J
微信图片_20240103192122.jpg - ~; [0 o$ O; m
: j' e# d7 F( r$ j
图2. 选择购买的 MAC 地址数量和类型  n0 x0 u  {! R' K8 F! A/ Q8 W
; A9 c( ?! s* e7 v" r; f/ o. w) e
微信图片_20240103192111.jpg
2 k' ^/ h+ q+ Y" s9 X/ M- H0 F5 g- T
如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
& U+ w2 Z' M) G5 K& ^
4 O0 Q9 o# _, _. D( n" E图3.申请过程中的 4 个步骤
2 C; w4 U" M: l) }0 M5 p9 O+ h$ B8 F, [5 F; w8 Y; G
微信图片_20240103192107.jpg
* m- i& f0 V! A2 y$ _' H5 ?* z
2 w2 |6 }/ ?8 ]. e- D7 D主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;
/ M! [+ ?2 K7 x$ v
; B: w5 D' K5 w3 m: Z# h: L公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否" h/ u$ F3 }. S/ m- Q- n
% i6 C0 s, S, @; T1 \% M& P
如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。
- W. V& Y. t- @( c2 |8 E

+ ^5 G$ o# q% H; L4 P4 i2 B完成以上内容后在线提交即可。  p6 m, [8 y/ o
( M! t" V: H2 ?
4.3. 购买后检查确认& o* {5 J4 g( o3 G5 T8 k7 Q
如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。
: [. p  G# Z/ b! _; F- a3 j! F, e0 I/ u1 {
微信图片_20240103192103.jpg

) Z+ a+ Z1 m/ W/ E% W2 e* b9 Z3 _3 W

) b" j4 ~2 h0 A2 S- g图4.在更新的列表中检查申请的地址- M( ?2 G/ a) C  M# Z9 U  A

* `3 ^6 Z( |& H1 e, U$ j

. O9 n$ [: A! L, F4 V8 B05小结( t7 a0 r9 r$ H" z1 T
本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。
: v8 f5 `: a' x- G. C, B. w* T8 @" s) M/ }! |, `2 W3 ~
9 O& x# X/ T, l) u" w8 Y% s7 W
转载自: STM32单片机
9 l0 R% ^. ]; s如有侵权请联系删除
* A) l6 d. z$ u  j# u4 B6 r
: Y! R7 ~, R- {% ], E$ N7 Y( g% t* h
; _7 C) T6 b+ `/ F3 m" @. l5 c2 k% d

( B! \9 E' |% t7 J6 `0 K6 m
赞 收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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