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

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

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

5 r( D, D6 X. P2 f蓝牙的设备地址分为两大类,一类是 Public,一类是 Random 的。其中 Random 类地址里面又分为静态地址和私有地址。私有地址又分为不可解析的私有地址和可以解析的私有地址。这些地址类型列举如下:
% Y6 R4 q; {4 N  ~/ y/ o! R• Public Bluetooth address // 1
% Y$ g+ P) c3 W( \• Random Bluetooth address
, t) H- Y" P* Z9 ^: j% y) _   o Static address // 27 q) F8 R+ H3 z* X0 X+ Z
   o Private address
: r+ [8 G% T: W& o2 V: M2 F# P        ▪ Non-resolvable private address // 3
4 Q6 q* e0 U) r% o/ ^        ▪ Resolvable private address // 4
& B2 a4 L. }! f! N/ ?" b
" C$ P" X9 Y. h  B3 V6 Q2 @6 }上述 4 种地址类型都使用 48bit 的地址长度。地址类型不同,48bit 地址的格式也会不同;设备地址类型和设备地址共同用于唯一标识该设备。另外需要注意以下几点:
8 o' x, D' Z* U* [/ ?# S* s• Public 或者 Random 地址类型的标识在链路层的广播包 PDU Header 中,不在48bit 地址的内容中。+ B3 O3 R8 D9 @/ z- ]4 q* I
• Random 类型下的三种地址类型,使用 48bit 地址的高 2bit 进行标识。
% S  a$ o2 R$ u2 J- F• 48bit 地址都相同的两个设备,如果它们分别属于 Public 或者 Random 地址类型,则它们是两个不同身份的蓝牙设备。8 q5 Y1 Q" u' _4 L7 {$ c# [  @

* T, V; h/ [, m5 ]& K* N设备应至少使用一种类型的设备地址,也可以同时使用两种。该设备可以通过它使用的任何设备地址来寻址。设备的身份地址是它在传输的数据包中使用的 Public 设备地址或Random 静态设备地址。如果一个设备使用可解析的私有地址,它也应该有一个身份地址。每当比较两个设备地址时,比较应包括设备地址类型(即如果两个地址的类型不同,即使两个 48 位地址相同,它们也不同)。
; S4 @5 c; z8 i% e
( t2 t' @2 x) w3 U% G6 X3 s如果公司有购买 Public 地址,则建议用 Public。如果没有购买地址,又没有设备地址隐私需求,则建议使用 Random Static Device Address。' A0 i+ L# p0 B2 T# H3 R+ {3 f% d

8 f& `) v5 z: ]& M
1.1. Public Bluetooth Address6 n: t& {& E) p9 h
在传统蓝牙和 BLE 中,原则上来说,使用 Public 地址需要向 IEEE 申请购买,使用未授权的 Public 地址如果和已授权的 Public 地址发生地址冲突,可能会面临法律纠纷。使用Public 地址还需要涉及到地址的管理、购买等流程。本文的后面举例描述了购买 Public 地址的流程。
3 x) S7 S" s& q. r0 ~0 j5 o4 q1 h( V7 A1 }9 A5 S1 [) I
1.2. Random Static Device Address. j+ ]6 j4 }8 E9 m' d
蓝牙更新到了 BLE 版本之后,为了让设备厂商可以节省购买 Public 地址授权的费用,引入了 Random 类型的地址。从前文可知,Random 地址类型又分为静态(Static)类型和隐私(Private)类型。静态类型的地址格式如下:
* P! v! b1 Y7 M; |$ p( F
2 v2 b1 S# U) L8 g( V2 g
微信图片_20240103192153.jpg
7 D( E, I, f6 u3 l1 E" K0 R
6 r* u1 i' b6 Z# ]9 s
静态地址是随机生成的48位地址,应满足以下要求 :5 ^3 K9 R6 ?! }7 d8 s. m
• 地址的随机部分至少有一位应为 08 w. x- H2 B6 n- `
• 地址的随机部分至少有一位应为 1/ M+ Y4 ~3 g; B# L

9 i- X7 ^1 q% ~' b6 v
设备可以选择在每次电源循环后将其静态地址初始化为新值。设备在初始化后不得更改其静态地址值,直到设备重新上电。
9 R; z: n/ A4 ?1 Y& i
+ y, V0 d  a8 k0 f
注意:如果设备的静态地址发生更改,则存储在对端设备中的地址将无效,并且将失去使用旧地址重新连接的能力。
$ h  t& w2 O% {" h- F& X/ ~
( ^- g/ N' A# a4 M/ C
1.3. Random Non-Resolvable Private Address+ O$ C; w* m4 ~% |
隐私地址主要是为了解决隐私问题。根据其是否可解析,又分成不可解析地址类型和可解析地址类型,不可解析地址类型的地址格式如下:
+ d1 Z2 `/ J! u$ u' U5 T! o+ g& `: w! s9 }, u: |! P- s
微信图片_20240103192147.jpg

8 F1 S: g# n9 k7 {: i$ M
' M0 `' m& `8 |4 n! K• 地址的随机部分至少有一位应为 18 T8 N7 D! z1 n. |5 o% n+ B+ N& Q
• 地址的随机部分至少有一位应为 09 A6 i" l0 I2 h' R8 x9 m
• 地址不得等于 Public 地址
! l8 ]/ S3 k6 c8 B" n7 X" r0 b1 P
不可解析地址会周期更新(建议值是 15 分钟),这类地址在实际应用中比较少用。7 F4 b% k" v# z0 v9 f! ~4 ~* Z

$ y% R/ K2 X; v: @) i) n
1.4. Random Resolvable Private Address  `$ I/ ~; {% M8 R" ^! A
所谓可解析地址(RPA),是指可以把一个周期变化的地址解析为唯一的身份地址。使用随机可解析地址类型的设备应具备两个地址,一个地址用于标识该设备,称为身份地址(Identity Address),另一个则为随机可解析地址(RPA)。一般情况下,设备会广播RPA,身份地址保存在本地。对端设备可通过解析 PRA 进一步获得其身份地址。' C$ ]: F2 ^  E4 Z
& \" u' b, S5 R  e" U
要生成可解析的私有地址,设备必须具有本地身份解析密钥 (IRK) 或对端身份解析密钥 (IRK)。可解析的私有地址应使用 IRK 和随机生成的 24 位数字生成。随机数称为prand,应满足以下要求:$ y: |; x* q; T9 `4 P" e. Y9 k
• prand 的随机部分至少有一位为 0' e2 w- X% {  F$ d7 L2 Q7 k- R6 j& N
• prand 的随机部分至少有一位为 1
! r; `# u. ~; m% m7 v; L9 Z4 f, c3 \
微信图片_20240103192139.jpg
- ]% f7 _+ A+ ~+ n" \2 o
特征如下:8 X* C, M# k! C5 c7 [) }$ Y8 _
1)由两部分组成:
7 k; f  W9 j. ]; K' ]- w高位 24bits 是随机数部分,其中最高两个 bit 为“10”,用于标识地址类型;
' u8 _0 x2 m0 D! ~! H' C低位 24bits 是随机数和 IRK 经过 hash 运算得到的 hash 值,运算的公式为 hash = ah(IRK, prand)。. G0 j8 }- F+ l  f! I) _0 Y) w

0 j* h) K7 h% e/ _, s2 Z8 H2)当对端 BLE 设备扫描到该类型的蓝牙地址后,会使用保存在本机的 IRK,和该地址中的 prand,进行同样的 hash 运算,并将运算结果和地址中的 hash 字段比较,相同的时候,才进行后续的操作。这个过程称作 resolve(解析),这也是 Non-Resolvable Private Address/Resolvable Private Address 命名的由来。. t4 f7 I! i9 A7 [' f
3)以 T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。3 n- f5 H. o/ M( f( t* a8 N! n
4)Resolvable Private Address 不能单独使用,因此需要使用该类型的地址的话,设备要选择 Public Device Address 或者 Static Device Address 中的一种作为其身份地址。
- `& L8 w" S5 l7 ?0 K6 C* ]9 J6 _& {5 H6 M
02MAC 地址相关函数
$ {3 K/ z6 T+ m# l$ P4 R( i下面介绍两个比较重要的和 MAC 设置相关的函数。! c+ ^. h9 C5 @
- Y6 s- M& z8 @5 I% w
$ t3 C8 M4 ?0 M7 X
// 配置 MAC 地址的函数
2 \  n* c+ R7 B# s% P  a! u# |+ [4 t- h$ t+ n  ^
微信图片_20240103192132.jpg
. d: l) d7 U/ c* C

/ n4 ?, ]) i+ e# M( J/ ^' J# A其中不同的 offset 设置的数值不一样,和 MAC 地址相关的主要是这两个:4 Y. V8 V: \2 {) i, b0 ?( P
•  0x00:  CONFIG_DATA_PUBADDR_OFFSET
' J- M4 N1 A( \# H* U•  0x2E: CONFIG_DATA_STATIC_RANDOM_ADDRESS% Q: x$ h+ b1 H) W+ a; Q4 s8 F' p
5 H! U0 P6 K8 \- B) P3 B& |4 q- |
//配置使用哪种 MAC 地址的函数:5 E! |* N. m+ n8 R
7 h- d% [6 k' S, U/ t
微信图片_20240103192129.jpg
5 f# b$ ?% B) M! {: }+ t6 r

! ?! E' W, ?1 rIdentity_Address_Type :; |7 K9 I" L" G0 E( j# G% O
• 0x00: Public Address
, T8 c8 |5 Z$ b$ o2 v* G+ }9 y• 0x01: Static Random Address
; v* e9 H; j1 ^, e1 ?) X8 s- x9 I

5 O% c. e& ~$ P' |( h) O9 _2 ]03蓝牙 Random 静态设备地址的生成与设置参考方法
  s/ n5 J4 b5 w3 X为了方便一些客户生成免费的相对唯一的 MAC 地址,下面列举一个使用芯片出厂唯一的 UID 来生成 MAC 地址的参考方法。基本原理是通过读取芯片的 UID,然后再进行 Hash计算,截取需要的 46bit 作为随机部分的静态地址。理论上这种方法生成的 MAC 地址重复的几率很小,在 2 的 40 多次方分之一的几率重复,因此实际工程应用中可以认为它相对比较唯一。* }& U3 E4 S5 N+ ?" V& n" q
: W7 a4 ?: Q3 ?5 i5 k* w3 Z: ~4 ]0 ~! e
sha256.c这个库文件在当前开发平台上需要修改前面一个头文件包含:
* c- A, H  B9 L& u$ L9 [$ T1 E/ v7 n' y
将 “#include” 更改为 “#include”
5 f# U3 [3 g1 O' J
3 [: F* L- B# Q& `) w  ?7 M
以下部分伪代码适用于 BlueNRG 系列和 STM32WB 系列8 N$ g* @+ s9 a

8 ^1 c/ x4 u' c* W' W: m1 q0 @; T// 生成静态 MAC 地址参考函数. n- y' ~& P5 h2 q" I4 F7 p5 l2 ?

: F0 e! ?" X( V1 q3 ~: O
微信图片_20240103192125.jpg

7 n2 A5 H+ Z3 S
. S6 R- r+ q8 V+ w
  O1 ]0 F8 J5 G# b: C2 }/ \
04蓝牙 Public 设备地址的购买流程/ G! K2 u- n5 r9 r5 I! z. Y  B9 @1 k
全球唯一设备号,标准化组织是 IEEE,以前的网卡 Ma 地址、PC,现在蓝牙设备、BLE 设备若需要认证的,官方的唯一设备标识,即蓝牙地址,也是 Mac 地址,需向 IEEE申请,并登记付费。即可获得授权。
* _2 I+ M* D2 \- f3 f) e2 q8 ]9 ?; j& @
4.1. OUI 介绍; _, {9 v8 N5 i9 g" P* Q
Organizationally Unique Identifier(OUI) 被称作“组织唯一标识符”,在任何一块网卡中烧录的 6 字节 MAC 地址中,前三个字节就体现了 OUI,通常情况下,该标识符是唯一的。因此,OUI 可以用来创建 MAC 地址、蓝牙设备地址或以太网地址。另外,OUI 也可作为一个公司的 SNAP 协议标识符使用。' C0 y$ s# S( \& U+ w
; ?( D7 @5 x+ ~" j0 {3 W2 S' F# I
通常情况下,IEEE 标准协会将前 24 位组织唯一标识符(OUI)分配给生产企业,剩下的 24 位由厂家自行分配代码。1 Z' A5 k1 a; m# I: |

9 ^- @- ]9 @* p& f- W目前,OUI 只能通过 IEEE 标准协会直接购买,其总价格大概在 3500 美元左右。
$ c7 a+ N7 [0 _0 [$ G( a/ @
0 w$ J7 u- o& s- H
如果如果没有保密需求,支付$3500 就可获得一个 OUI(可生成 1600 万个地址),即上述所指的 publicly registered MA-L,也就是说此类公司的名称和地址是公开的,公众可以访问
) r8 `1 U/ {* j1 |# S6 o
* i. Y7 V% \& F0 g& L9 |; N7 Z输入公司名称查询该公司拥有的 MA-L,或者输入 MA-L查询公司的名称和地址。
$ C* A7 x. |' r8 I1 j! j
# m7 D, A! t0 V' ?& C如果生产厂商希望对以上信息保密,可以选择 Privately registered MA-L,价格会贵很多,且每年需要支付保密费用大概几千美元。
( \$ i. x0 ~' t0 f  k# i# H5 F4 q5 `+ w2 [8 [5 g* T
4.2. 购买流程0 c+ s/ s7 {% e& G$ e
如果需要购买 Public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。
0 q4 |+ P. U7 U: k' D6 b$ G
' g0 i3 z3 g) M/ i5 |/ d图1.申请购买 public 地址入口$ R" ~0 q9 j; m% h

% s$ T) \& V4 w3 n/ ~
微信图片_20240103192122.jpg * S! r" ]% g. d& u# X( D6 m% n

' u/ D: b* U: E" g! T图2. 选择购买的 MAC 地址数量和类型5 G7 y) P. E7 H
9 j9 L& r+ v+ t. P* R4 d, V. c# a
微信图片_20240103192111.jpg
+ _5 D! _5 V* O# ~: o
2 z) P. n9 Z( c" u8 f+ s1 J如果申请的类型是 MA-L 大概有 1677 万个地址,MA-M 大概有 100 多万个。
$ Z# w, |) L- L! X0 d! {& K9 u9 e
1 W) m1 S# E" ?* w, |图3.申请过程中的 4 个步骤* @. P: r" j' _" @4 k/ T2 @
3 h# r2 z: _; T+ W
微信图片_20240103192107.jpg
& B# X" v! `2 p8 f& F9 _' n, q: w
主要填写:申请人信息,包括姓名、职位、公司名称、地址及邮箱电话等;
% l" I( \. u7 g% f3 q2 s
7 [0 d3 c$ m! q0 i: [# z公司信息,如果贵公司为首次申请,initial corporate assignment request 后选择YES,如果不是首次申请 OUI,一定要确保现有的 MAC 地址使用率已达到 95%,否则不予申请,选择 No 之后需要在方框内填写上次申请 OUI 的公司名称并提供再次申请的理由,同时还需提供公司类型,是母公司还是子公司,还是两者皆否2 L- f# @; c4 A9 [

" }3 e. D3 o# k; T) F, u4 v如果公司类型选择了母公司或者是子公司,需要填写至少 3 家联营公司的具体信息,如果公司类型选择了 neither,该部分可不填;为保密信息,如果选择购买的是 publicly registered MA-L,该部分选择 No,反之选择 Yes 并提供理由;目前 IEEE 标准协会接受的付款方式包括邮寄美国银行汇票、美元电汇及信用卡在线支付。如果需要提供形式发票,请选择 please send a proforma invoice 之前的复选框。8 }6 G- d2 V4 H3 P# m1 @5 I
- ]+ z' p, n/ Q+ D4 c4 t7 n
完成以上内容后在线提交即可。2 g. q% q* s8 Q1 B
6 q# g7 f) _2 O# y9 \
4.3. 购买后检查确认
1 _. ?$ f' b9 i/ A' N0 J1 h0 ~. z如果需要购买 public 地址,需要先申请一个 IEEE 账号。登入后点击如下入口开始申请。通常 IEEE 收到款后的第二天,即可邮件收到一个 Mac 地址的生成软件,填上日期等信息后,会生成一个 6BYTE(48bits)的地址段,前 3BYTE 数据为公司名,后面 3BYTE是序号。: Y! @; }& W) d1 S1 y: M7 b3 w

$ i- K) B5 \0 r+ s8 p
微信图片_20240103192103.jpg

) v' Q  b& e0 a+ r; R
$ I/ y; r9 J; l" K, l
图4.在更新的列表中检查申请的地址
% A8 U4 m( o6 e4 Z! s! e$ p
% p! }) d- i3 e0 O' L$ f  Z

' {! x+ J- }& i( M! V05小结
% q) L  W5 [9 K本文介绍了 BLE MAC 地址的类型,基于芯片 ID 生成静态随机 MAC 地址,以及购买Public MAC 地址的流程。
! g& e5 q4 B, {( V$ x4 I4 {! K

+ f: N1 S2 d2 V+ P) V' L转载自: STM32单片机/ O1 z1 e) m/ v+ f0 W6 }
如有侵权请联系删除2 A: C' |- ~% r1 p3 U
3 F- U# g/ n8 D. c5 T. i# z5 L

3 ~! A/ ~8 o4 A" g# E7 T) A$ U; R' o' k: j) B1 u8 O9 i8 Z
赞 收藏 评论0 发布时间:2024-1-3 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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