QSDK校准值与BDF

Gryphon Lv3

QSDK 校准值与BDF

BDF与caldata的关系

对于高通的WiFi芯片平台,BDF文件是一个射频工程师绕不过去的东西,相关信息都是基于最新的WiFi7平台。对比WiFi6以及之前的平台,高通对BDF的一些定义和工具做了很大的变更,欢迎大家一起沟通探讨,有错误的地方,欢迎指正。
针对性的探讨两个问题,一是BDF和caldata的关系以及配合使用,二是BDF中关于T/RX的相关参数如何修改。

第一个问题,BDF和caldata之间的关联和配合方式。

这里我们先了解一下两个文件的基本信息,BDF大而全,可以理解包含所有的射频配置信息,caldata顾名思义,仅仅只有校准数据。但是实际上BDF里面也是有相关校准数据的,分开的原因是大量通用的数据对于每个设备来说都是一样的,所以通常我们在项目阶段都会去做一件事情,收集小批量经过全点校准的样机的BDF,然后通过QRCT工具去生成一个全新的BDF(golden bin),而这个golden bin会根据我们设计的产品的校准数据来优化内部的校准曲线,有了这个golden bin,我们后续的产品生产就可以只做单点校准,并且你会发现校准的功率精度会大幅度提升,没有golden bin之前,如果你做单点校准,你会发现功率偏差非常大,几乎无法做单点校准,因为内部的参考校准数据曲线不符合当前产品。而这里就需要提一下,对于手机类的终端产品,可能后续生产过程中就直接使用golden bin了,没有再校准的过程了,但是网管类AP产品,一般都会在工厂对每一台生产出来的设备做校准,以保证更高的功率精度,优化硬件性能,同时筛选不良品。这个时候的校准数据就会保存在caldata里,这个可以叫做device BDF,这个caldata就是和每一台设备相关,但是同一台设备里这两个文件的数据会最终会合并到一起来用,通用配置大家都一样,直接使用BDF里的,但是校准数据每台设备都有区别,校准数据就调用caldata里的数据。
为什么不直接存入golden bin,从我的理解看,可能是为了优化效率,减少对文件的操作,以免损坏BDF。

第二个问题是如何修改BDF中的T/RX参数。

对于我们来说,我们关心的和需要改动的数据主要就是射频参数,校准数据,法规数据,硬件适配等,其它的大部分数据用默认的即可,也不建议在不了解的情况下去改动。高通目前提供多种方式修改BDF,有python脚本,exe程序,还有excel,都可以实现修改BDF的工具,前面工具基本上都是先修改bdf的txt版本,然后用工具生成bin文件,excel通过宏的方式打开bin文件,在表格中修改好之后重新生成新的bin文件。
修改法规部分的数据,还可以用CTL里的工具,和BDF的工具类似,不过现在高通工具做的有点多,搞得更复杂了。法规部分还会结合另一个bin文件,叫做RegDB,这个文件里涵盖基本全部的法规要求,各个区域对不同信道的功率,PSD,天线增益等等的限制,一般情况下用最新的版本,我们是不需要去修改这个文件的。我们只需要把认证的的功率限制数据通过CTL的EXCEPTIONS加进去即可,最终这些数据都会合并到BDF。
以上就是对于这两个问题的一些解答,有任何疑问,关于探讨!

校准值与BDF加载顺序

CNSS2驱动首先加载BDF用于初始化wifi chip,然后从art分区加载校准值,如果校准值有效则根据校准值进行配置。

高通wifi驱动加载bdf与校准值机制

高通的wifi驱动在加载校准值与bdf时,主要依赖两个部分的配置,分别是:设备树、ftm.conf。
设备树中有一个boardid属性,其主要决定了对应radio使用的bdf,如board id为0x1019那么在加载bdf的时候,CNSS2就会在/lib/firmware/QCNXXXX寻找bdwlan.0x1019并加载,设备树中slotid节点则是决定了加载校准值时的文件名。而ftm.conf主要是用于生成校准值时的数据源、最终生成的文件名等。

设备树

ftm.conf

下图是不同的slotid对应存储的校准值的起始地址与大小。实际存储的校准值大小一般是远小于表中所描述的size_hex.
image.png

ap-mi01.3,12,0,4096,153600,255
ap-mi01.3,0060,1,157696,204800,0
ap-mi01.3,00b1,2,362496,204800,1
ap-mi01.3,0060,3,567296,204800,2
ap-mi01.3,00b1,4,772096,204800,3
如上为一份ftm.conf的示例,对其进行理解,大致可以理解为下表,如果想进行更深入的理解,那么可以参考read与write caldata的脚本,ftm.conf如要是在这两个文件中被调用到

board id offset size suffix des
12 4096 153600 255 Internal 2g 2g
0060 157696 204800 0 PCIE0 5gh
00b1 362496 204800 1 PCIE1 5gl
0060 567296 204800 2 PCIE2 5gf
00b1 772096 204800 3 PCIE3 6gf

bdwlan.xx二进制文件解析

BDF前16字节含义如下:

image.png

0

0

0

0

校准值的读写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 首先获取存储校准值的mtdblock,根据ftm.conf获取每个slot 校准值偏移地址与大小
ap-mi01.3,12,0,4096,153600,255
ap-mi01.3,0060,1,157696,204800,0
ap-mi01.3,00b1,2,362496,204800,1
ap-mi01.3,0060,3,567296,204800,2
ap-mi01.3,00b1,4,772096,204800,3

# 读校准值:
dd if=/dev/mtdblock18 of=2gfr.bin bs=1 count=153600 skip=4096;
dd if=/dev/mtdblock18 of=5ghr.bin bs=1 count=204800 skip=157696;
dd if=/dev/mtdblock18 of=5glr.bin bs=1 count=204800 skip=362496;
dd if=/dev/mtdblock18 of=5gfr.bin bs=1 count=204800 skip=567296;
dd if=/dev/mtdblock18 of=6gfr.bin bs=1 count=204800 skip=772096;

# 写校准值
dd if=2gf.bin of=/dev/mtdblock18 bs=1 count=153600 seek=4096;
dd if=5gh.bin of=/dev/mtdblock18 bs=1 count=204800 seek=157696;
dd if=5gl.bin of=/dev/mtdblock18 bs=1 count=204800 seek=362496;
dd if=5gf.bin of=/dev/mtdblock18 bs=1 count=204800 seek=567296;
dd if=6gf.bin of=/dev/mtdblock18 bs=1 count=204800 seek=772096;


#清空校准值
dd if=/dev/zero of=/dev/mtdblock18 bs=1 count=204800 seek=4096;
dd if=/dev/zero of=/dev/mtdblock18 bs=1 count=204800 seek=157696;
dd if=/dev/zero of=/dev/mtdblock18 bs=1 count=204800 seek=362496;
dd if=/dev/zero of=/dev/mtdblock18 bs=1 count=204800 seek=567296;
dd if=/dev/zero of=/dev/mtdblock18 bs=1 count=204800 seek=772096;



  • Title: QSDK校准值与BDF
  • Author: Gryphon
  • Created at : 2025-10-13 08:46:43
  • Updated at : 2025-10-13 08:46:43
  • Link: https://phoenixs.gitlab.io/2025/10/13/youdaonote/QCA平台开发笔记/002.Calibration相关/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments