CSR8311/CSR8811 HCI vendor command说明

原创 专注于无线通信的蓬勃 2021-08-14 09:56

一. 声明


本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

------------------------------------------------------------------------------------------------------------------------------------------

CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144

蓝牙交流扣扣群:970324688

Github代码:https://github.com/sj15712795029/bluetooth_stack

入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708

------------------------------------------------------------------------------------------------------------------------------------------

二. hci vendor command跟hci vendor event的概念

众所周知,由于SIG规定的一些HCI command跟event不能完全满足各个芯片原厂的需求,所以芯片原厂会在SIG规定的基础上去扩展一些command & event,这个就叫做hci vendor & command,这个SIG已经把vendor command的OGF跟event code已经定义好!hci vendor command的OGF是0x3F,我们来看下core spce的原话,

image.png

其中hci vendor command的格式还是会依照hci command的格式来,只不过para部分就是芯片厂商自定义的格式了,也就是红框部分是芯片厂商自己定义

image.png

而controller回复host的event有可能是0x0e,也就是command complete,也有可能是0xff ,也就是vendor event code,这个根据芯片不同而不同,这个跟hci command是一个到底,还是会根据hci event的格式来,只不过payload是芯片厂商自定义

image.png

三.CSR的vendor command格式

image.png

1. HCI extension的格式

包括其中几个filed(参照文档:HCI Externsions(bcore-an-009Pb.pdf)

① 前两个byte是HCI command的opcode,也就是OGG为0x3f(vendor command),OCF为0,如图:

image.png

② para len:参数的长度:也就是后面参数的长度,不包括opcode以及para len

③ parameter:参数部分,从次部分就是csr自己定义的格式,下个小节我们来做说明

2. CSR vendor command格式(也就是HCI command部分的param部分)

此小节我们主要来说明下红框部分,也就是HCI command的param部分

image.png

其中csr vendor 部分一共分为几个field

① Payload Descriptor部分

image.png

上面说明已经很明白,也就是我们如果只有一包完整的数据,那么first跟last都要设置为1

Channel ID有以下值:

image.png

由于我们大部分时间还是只用到BCCMD,所以我们只要给予BCCMD来说明,后续如果会用到HQ等其他channel,BCCMD的话我们的channel是2,整个我们Payload Descriptor的值为11000010b,也就0xc2,

② Payload部分

也就是是红框部分

image.png

整个payload格式为:

image.png

注意,这里的单位的是uint16s,也就是header是10byte,

下面我们就一一来说明下整个格式:

Type: 标示消息类型,一共有以下几种值:

image.png

Length:数据长度,包括Type跟Length部分,注意他的长度是以16bit为单位,也就是2个byte,这里要写1

Seqno: 数据包序号

Varid: 消息id,后续我们再csr8311初始化的时候会用到两种类型,一种是PS,一种是warm reset,后续我们再介绍

Status:状态,一共有以下值:

image.png

Payload: 特定的消息id,附带的信息,这个我们在初始化的时候会详细介绍

3. CSR的vendor event格式

image.png

vendor event也是遵循了hci event的格式,其中0xff就是vendor event的id,其中红框部分就是整个vendor event的格式

image.png

所有的field我们在command中已经介绍,我们就不再重复

4. 格式巩固举例

我们就随便拿个例子举例,这样能加深格式印象

我们就拿这个举例吧:

image.png

其中command的整个数据为(Hex):00 FC 13 C2 02 00 09 00 02 00 03 70 00 00 29 02 01 00 08  00 00 00

其中event的整个数据为(Hex):FF 13 C2 01 00 09 00 02 00 03 70 00 00 29 02 01 00 08 00  00 00

我们先来分析下command:

00 FC        -》HCI vendor command opcode

13             -》HCI comamnd para len,也就是19byte

C2             -》Payload Descriptor, 也就是表示fist&last pack,并且channel id是2,也就是bccmd

02 00        -》Type为2,也就是SETREQ

09 00        -》 长度,也就是在Payload Descriptor之后的长度

02 00        -》SeqNo

03 70        -》Varid,这里其实就是BCCMD的PS知名,后续再介绍

00 00        -》Status,OK

29 02 01 00 08  00 00 00 -》PS指令的格式,后续再介绍

然后我们再分析下event:

FF            -》HCI vendor event code

13            -》 HCI event param len,也就是19byte

C2           -》Payload Descriptor, 也就是表示fist&last pack,并且channel id是2,也就是bccmd

01 00        -》 Type为1,也就是GETRESP

09 00        -》 长度,也就是在Payload Descriptor之后的长度

02 00        -》SeqNo

03 70        -》Varid,这里其实就是BCCMD的PS知名,后续再介绍

00 00        -》Status,OK

29 02 01 00 08 00  00 00 -》PS指令的格式,后续再介绍

四.BCCMD特定PS跟warm reset格式

1. PS格式

PS指令就是把一些值写到芯片的特定位置中(RAM,ROM,FLASH,EEPROM),让其根据我们写的值来工作

整个框架如下图:

image.png

还记得这张图BCCMD的图吗?忘记了没关系我们再贴下

image.png

其中Varid就是命令ID,我们PS是值是0x7003,其中payload,我们一般叫做pskey,这回你终于知道整个CSR的名词的关联性了吧,整个格式如下:

image.png

对应关系我们再贴下,方便加深下印象!

image.png

其中header部分我们已经在前面小节介绍过,接下来我们来说明下PS的格式:

Key:就是pskey文档中的key number,CSR(现高通)文章中有几百个key number,但是不要慌,我们能修改的很少,一般vendor厂商会针对不同芯片给pskey,但是我们也要把常用的了解下,方便针对我们的需求修改,例子我们最终再举例初始化的时候说明下

Length:只是PS value的长度

Stores:标示存储的地方,这里要区分是SETREQ还是GETREQ

SETREQ可以访问的值有:

image.png

GETREQ可以访问的值有:

image.png

可能你会对于你会对psi,psf等这些名词比较懵,别急,上图:

image.png

2. Warm reset格式

image.png

五.初始化命令vendor command说明

可以看到CSR8311在初始化的时候下了这么多vendor command

image.png

整个command为:

//  Set PSKEY_DEEP_SLEEP_STATE never deep sleep

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x02, 0x00, 0x03, 0x70, 0x00, 0x00, 0x29, 0x02, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,

//  Set ANA_Freq to 26MHz

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x03, 0x00, 0x03, 0x70, 0x00, 0x00, 0xfe, 0x01, 0x01, 0x00, 0x08, 0x00, 0x90, 0x65,

//  Set CSR_PSKEY_ANA_FTRIM 0x24 for csr8811

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x04, 0x00, 0x03, 0x70, 0x00, 0x00, 0xf6, 0x01, 0x01, 0x00, 0x08, 0x00, 0x24, 0x00,

// Set CSR_PSKEY_DEFAULT_TRANSMIT_POWER 0x4

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x05, 0x00, 0x03, 0x70, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00,

// Set CSR_PSKEY_MAXIMUM_TRANSMIT_POWER 0x4

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x03, 0x70, 0x00, 0x00, 0x17, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00,

// Set CSR_PSKEY_BLE_DEFAULT_TRANSMIT_POWER 0x4

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x07, 0x00, 0x03, 0x70, 0x00, 0x00, 0xc8, 0x22, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00,

// Set CSR_PSKEY_BDADDR

0x19, 0xc2, 0x02, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x03, 0x70, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x20, 0x00, 0x98, 0x1a, 0x86, 0x00, 0x1d, 0x00,

// Set CSR_PSKEY_PCM_CONFIG32

0x15, 0xc2, 0x02, 0x00, 0x0a, 0x00, 0x09, 0x00, 0x03, 0x70, 0x00, 0x00, 0xb3, 0x01, 0x02, 0x00, 0x08, 0x00, 0x80, 0x08, 0x80, 0x18,

// Set CSR_PSKEY_PCM_FORMAT 0x60

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x03, 0x70, 0x00, 0x00, 0xb6, 0x01, 0x01, 0x00, 0x08, 0x00, 0x60, 0x00,

// Set CSR_PSKEY_USER_LOW_JITTER_MODE

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x0b, 0x00, 0x03, 0x70, 0x00, 0x00, 0xc9, 0x23, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00,

//  Set HCI_NOP_DISABLE

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x0c, 0x00, 0x03, 0x70, 0x00, 0x00, 0xf2, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00,

// Set UART baudrate to 921600

0x15, 0xc2, 0x02, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x03, 0x70, 0x00, 0x00, 0xea, 0x01, 0x02, 0x00, 0x08, 0x00,0x0e,0x00,0x00,0x10,/*0x1b, 0x00, 0x40, 0x77,*/

//  WarmReset

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x0e, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

整个每行是一个命令,其中第一个byte是没有最终下到controller中的,只是为了解析方便加一个长度而已,下面我们就从第一条开始说明下(BCCMD格式我们已经在前面介绍,所以重点不是在解析bccmd,这里说明的重点是pskey):

① Set PSKEY_DEEP_SLEEP_STATE never deep sleep

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x02, 0x00, 0x03, 0x70, 0x00, 0x00, 0x29, 0x02, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,

可以看到这个是BCCMD PS命令(varid是0x7003),pskey的值为红色部分

0x29, 0x02, -> 0x229 pskey

0x01, 0x00, -> len,也就是value是1,也就是2个byte

0x08, 0x00, -> stores,也就是存储在psram中

0x00, 0x00, -> ps value值

下面我们来看下0x229的作用

image.png

image.png

② Set ANA_Freq to 26MHz

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x03, 0x00, 0x03, 0x70, 0x00, 0x00, 0xfe, 0x01, 0x01, 0x00, 0x08, 0x00, 0x90, 0x65,

可以看到这个是BCCMD PS命令(varid是0x7003),pskey的值为红色部分

0xfe, 0x01, -> 0x1fe pskey

0x01, 0x00, -> len,也就是value是1,也就是2个byte

0x08, 0x00, -> stores,也就是存储在psram中

0x90, 0x65, -> ps value值

下面我们来看下0x01fe的作用

image.png

③ Set CSR_PSKEY_ANA_FTRIM 0x24 for csr8811

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x04, 0x00, 0x03, 0x70, 0x00, 0x00, 0xf6, 0x01, 0x01, 0x00, 0x08, 0x00, 0x24, 0x00,

image.png

④ Set CSR_PSKEY_DEFAULT_TRANSMIT_POWER 0x4

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x05, 0x00, 0x03, 0x70, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00,

image.png

⑤ Set CSR_PSKEY_MAXIMUM_TRANSMIT_POWER 0x4

0x13, 0xc2, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x03, 0x70, 0x00, 0x00, 0x17, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00,

image.png

我们下面剩下的命令都不再贴了,大概用法应该都清楚了

六.总结

整个的格式有点绕,我们来看下下图可能你就一下清晰了!

image.png

专注于无线通信的蓬勃 朝气蓬勃——不积跬步 无以至千里, 不积小流 无以成江海
评论 (0)
  • 网约车,真的“饱和”了?近日,网约车市场的 “饱和” 话题再度引发热议。多地陆续发布网约车风险预警,提醒从业者谨慎入局,这背后究竟隐藏着怎样的市场现状呢?从数据来看,网约车市场的“过剩”现象已愈发明显。以东莞为例,截至2024年12月底,全市网约车数量超过5.77万辆,考取网约车驾驶员证的人数更是超过13.48万人。随着司机数量的不断攀升,订单量却未能同步增长,导致单车日均接单量和营收双双下降。2024年下半年,东莞网约出租车单车日均订单量约10.5单,而单车日均营收也不容乐
    用户1742991715177 2025-04-29 18:28 196浏览
  • 在智能硬件设备趋向微型化的背景下,语音芯片方案厂商针对小体积设备开发了多款超小型语音芯片方案,其中WTV系列和WT2003H系列凭借其QFN封装设计、高性能与高集成度,成为微型设备语音方案的理想选择。以下从封装特性、功能优势及典型应用场景三个方面进行详细介绍。一、超小体积封装:QFN技术的核心优势WTV系列与WT2003H系列均提供QFN封装(如QFN32,尺寸为4×4mm),这种封装形式具有以下特点:体积紧凑:QFN封装通过减少引脚间距和优化内部结构,显著缩小芯片体积,适用于智能门铃、穿戴设备
    广州唯创电子 2025-04-30 09:02 202浏览
  •  探针台的维护直接影响其测试精度与使用寿命,需结合日常清洁、环境控制、定期校准等多维度操作,具体方法如下:一、日常清洁与保养1.‌表面清洁‌l 使用无尘布或软布擦拭探针台表面,避免残留清洁剂或硬物划伤精密部件。l 探针头清洁需用非腐蚀性溶剂(如异丙醇)擦拭,检查是否弯曲或损坏。2.‌光部件维护‌l 镜头、观察窗等光学部件用镜头纸蘸取wu水jiu精从中心向外轻擦,操作时远离火源并保持通风。3.‌内部防尘‌l 使用后及时吹扫灰尘,防止污染物进入机械滑
    锦正茂科技 2025-04-28 11:45 107浏览
  • 你是不是也有在公共场合被偷看手机或笔电的经验呢?科技时代下,不少现代人的各式机密数据都在手机、平板或是笔电等可携式的3C产品上处理,若是经常性地需要在公共场合使用,不管是工作上的机密文件,或是重要的个人信息等,民众都有防窃防盗意识,为了避免他人窥探内容,都会选择使用「防窥保护贴片」,以防止数据外泄。现今市面上「防窥保护贴」、「防窥片」、「屏幕防窥膜」等产品就是这种目的下产物 (以下简称防窥片)!防窥片功能与常见问题解析首先,防窥片最主要的功能就是用来防止他人窥视屏幕上的隐私信息,它是利用百叶窗的
    百佳泰测试实验室 2025-04-30 13:28 232浏览
  • 4月22日下午,备受瞩目的飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!1、精彩纷呈的展区产品及方案展区是本场活动的第一场重头戏,从硬件产品到软件系统,从企业级应用到高校教学应用,都吸引了现场来宾的驻足观看和交流讨论。全产品矩阵展区展示了飞凌嵌入式丰富的产品线,从嵌入式板卡到工控机,从进口芯片平台到全国产平台,无不体现出飞凌嵌入式在嵌入式主控设备研发设计方面的
    飞凌嵌入式 2025-04-28 14:43 137浏览
  • 浪潮之上:智能时代的觉醒    近日参加了一场课题的答辩,这是医疗人工智能揭榜挂帅的国家项目的地区考场,参与者众多,围绕着医疗健康的主题,八仙过海各显神通,百花齐放。   中国大地正在发生着激动人心的场景:深圳前海深港人工智能算力中心高速运转的液冷服务器,武汉马路上自动驾驶出租车穿行的智慧道路,机器人参与北京的马拉松竞赛。从中央到地方,人工智能相关政策和消息如雨后春笋般不断出台,数字中国的建设图景正在智能浪潮中徐徐展开,战略布局如同围棋
    广州铁金刚 2025-04-30 15:24 168浏览
  • 贞光科技代理品牌紫光国芯的车规级LPDDR4内存正成为智能驾驶舱的核心选择。在汽车电子国产化浪潮中,其产品以宽温域稳定工作能力、优异电磁兼容性和超长使用寿命赢得市场认可。紫光国芯不仅确保供应链安全可控,还提供专业本地技术支持。面向未来,紫光国芯正研发LPDDR5车规级产品,将以更高带宽、更低功耗支持汽车智能化发展。随着智能网联汽车的迅猛发展,智能驾驶舱作为人机交互的核心载体,对处理器和存储器的性能与可靠性提出了更高要求。在汽车电子国产化浪潮中,贞光科技代理品牌紫光国芯的车规级LPDDR4内存凭借
    贞光科技 2025-04-28 16:52 227浏览
  • 文/郭楚妤编辑/cc孙聪颖‍越来越多的企业开始蚕食动力电池市场,行业“去宁王化”态势逐渐明显。随着这种趋势的加强,打开新的市场对于宁德时代而言至关重要。“我们不希望被定义为电池的制造者,而是希望把自己称作新能源产业的开拓者。”4月21日,在宁德时代举行的“超级科技日”发布会上,宁德时代掌门人曾毓群如是说。随着宁德时代核心新品骁遥双核电池的发布,其搭载的“电电增程”技术也走进业界视野。除此之外,经过近3年试水,宁德时代在换电业务上重资加码。曾毓群认为换电是一个重资产、高投入、长周期的产业,涉及的利
    华尔街科技眼 2025-04-28 21:55 146浏览
  • 在CAN总线分析软件领域,当CANoe不再是唯一选择时,虹科PCAN-Explorer 6软件成为了一个有竞争力的解决方案。在现代工业控制和汽车领域,CAN总线分析软件的重要性不言而喻。随着技术的进步和市场需求的多样化,单一的解决方案已无法满足所有用户的需求。正是在这样的背景下,虹科PCAN-Explorer 6软件以其独特的模块化设计和灵活的功能扩展,为CAN总线分析领域带来了新的选择和可能性。本文将深入探讨虹科PCAN-Explorer 6软件如何以其创新的模块化插件策略,提供定制化的功能选
    虹科汽车智能互联 2025-04-28 16:00 171浏览
  • 一、gao效冷却与控温机制‌1、‌冷媒流动设计‌采用低压液氮(或液氦)通过毛细管路导入蒸发器,蒸汽喷射至样品腔实现快速冷却,冷却效率高(室温至80K约20分钟,至4.2K约30分钟)。通过控温仪动态调节蒸发器加热功率,结合温度传感器(如PT100铂电阻或Cernox磁场不敏感传感器),实现±0.01K的高精度温度稳定性。2、‌宽温区覆盖与扩展性‌标准温区为80K-325K,通过降压选件可将下限延伸至65K(液氮模式)或4K(液氦模式)。可选配475K高温模块,满足材料在ji端温度下的性能测试需求
    锦正茂科技 2025-04-30 13:08 173浏览
  • 随着电子元器件的快速发展,导致各种常见的贴片电阻元器件也越来越小,给我们分辨也就变得越来越难,下面就由smt贴片加工厂_安徽英特丽就来告诉大家如何分辨的SMT贴片元器件。先来看看贴片电感和贴片电容的区分:(1)看颜色(黑色)——一般黑色都是贴片电感。贴片电容只有勇于精密设备中的贴片钽电容才是黑色的,其他普通贴片电容基本都不是黑色的。(2)看型号标码——贴片电感以L开头,贴片电容以C开头。从外形是圆形初步判断应为电感,测量两端电阻为零点几欧,则为电感。(3)检测——贴片电感一般阻值小,更没有“充放
    贴片加工小安 2025-04-29 14:59 193浏览
  • 文/Leon编辑/cc孙聪颖‍2023年,厨电行业在相对平稳的市场环境中迎来温和复苏,看似为行业增长积蓄势能。带着对市场向好的预期,2024 年初,老板电器副董事长兼总经理任富佳为企业定下双位数增长目标。然而现实与预期相悖,过去一年,这家老牌厨电企业不仅未能达成业绩目标,曾提出的“三年再造一个老板电器”愿景,也因市场下行压力面临落空风险。作为“企二代”管理者,任富佳在掌舵企业穿越市场周期的过程中,正面临着前所未有的挑战。4月29日,老板电器(002508.SZ)发布了2024年年度报告及2025
    华尔街科技眼 2025-04-30 12:40 171浏览
我要评论
0
1
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦