可能大家对庞大的蓝牙系统很困扰,也不知道从何学起,别急,我来了!
我会分别给蓝牙协议栈的从业者和蓝牙SoC从业者或者蓝牙APP整合者一个建议,我给不了蓝牙Controller学习的建议,希望大家能给我点学习蓝牙Controller的建议,我自己也想学Controller,得不到的总是在骚动嘛!好啦,回归正题,当然这个建议也只是参考,找到自己适合的方法才是最高效的,我只是结合我认为我自己最高效的方法供大家参考!
------------------------------------------------------------------------------------------------------------------------------------------
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
------------------------------------------------------------------------------------------------------------------------------------------
另外,欢迎关注公众号,我会定期推送干货给你们
1)我觉得自己要有一个明确的目标,或者工作的硬性要求,比如我要做一个自己的蓝牙产品,或者公司有一个产品需求,必须要弄到蓝牙协议栈,否则我觉得凭个人兴趣很难坚持下去,因为蓝牙是个很大的子系统,不是一朝一夕就能研究完毕的,在几次受挫后可能就坚持不下去!所以目标是研究蓝牙的第一要素!
2)不要直接去抠协议细节,我觉得要对蓝牙协议栈有一个最基本的认知,市面的蓝牙芯片架构都有哪些,并且熟悉整个HCI蓝牙架构是怎么样,每个协议是大致作用是什么,这些我前面的章节都有介绍!
3)等你对蓝牙协议有一个基本的认知,忍不住的想继续往下的时候,那么我会拿着喇叭喊三遍:有一个做实验的开发板!有一个做实验的开发板!有一个做实验的开发板,后续到了协议理解部分,没有一个做实验的环境,如果强行“撸”协议,我觉得会“强撸灰飞烟灭”!
4)对研究协议有一个明确的顺序,有几种可选,可以由底层延伸到应用层或者由应用层延伸到底层!
对于传统蓝牙,底层到应用层我会给出一个顺序:TRANSPORT->HCI->L2CAP->RFCOMM->SPP,中间再了解点SDP的协议
对于传统蓝牙,应用层到底层我会给出一个顺序:SPP->RFOMM->L2CAP->HCI->TRANSPORT,中间再了解点SDP的协议
对于低功耗蓝牙,底层到应用层我会给出一个顺序:TRANSPORT->HCI->L2CAP->ATT->GATT->BAS,中间再了解点SM的协议
对于低功耗蓝牙,应用层到底层我会给出一个顺序:BAS->GATT->ATT->L2CAP->HCI->TRANSPORT,中间再了解点SM的协议
至于为啥我会给这个建议,相信懂得人能看到我的良苦用心,这是跨越层数最少,并且能上下打通的顺序!至于是从底层研究还是从应用层开始研究,这个因人而异,如果你想快速能看到效果,那么我建议你从应用层开始修修改改搞起来,如果你是像我一样,底层有不懂的很心虚的,那么我建议你从底层搞起来!
然后懂了这些,你再根据你想要的协议或者功能区扩展自己的蓝牙认知,当然这个过程并不是一撮而就的,需要螺旋上升,比如你看到某一部分卡住,绞尽脑汁就是想不明白,没关系,继续往前走,等你看到某一部分说不定就想开了,因为部分内容具有关联性,等到你站在了一个高度自然而然就懂了,这里不是告诉你不求甚解,只是告知不要钻进牛角尖而已!
5)升华工具的使用,在以上你研究的过程中,需要借用一些工具来让你站在巨人的肩膀上,比如看Air log,那这里我会推荐Ellisys,界面友好,协议解析直观,你可能会说我买不起,其实不用买,安装一个Ellisys的基本软件,安装目录下有一个Sample文件夹,有基本的协议,可以直接看,或者BTSNOOP的使用,对着协议分析工具来看具体的封包,具体的协议,对应具体的代码!我还是会说蓝牙细节太多,需要了解的太多,所以大家一定要保持耐心,早日成为蓝牙大神!
最后我想说,再没有完全研究明白蓝牙协议栈之前,暂时不要碰Controller的协议!看到你怀疑人生,我已经在怀疑的路上了!
其实对于SoC从业者来说我给不了太多建设性建议,我自己本身不是从事蓝牙应用或者SoC的开发者,但是我接触过不少从事这种工作的工程师!所以我也想给出一点建议!
1) 从事这种工作的目标肯定不用说,一般是做产品或者公司外包协议栈的,需要3方联调的!
2) 对于从事这种工作的,一般协议代码不开源或者部分开源,但是我还是建议对蓝牙协议栈有一个基本的认知,因为不管是什么蓝牙架构,内部总有蓝牙协议栈在跑,所以基本上就逃脱不了蓝牙协议的基本概念!
3) 研究应用协议细节,因为就我所知,部分SoC由于应用协议版本旧,或者跟手机版本不匹配有兼容问题,或者功能需求增加,所以研究应用协议细节吧,传统蓝牙HFP,A2DP,AVRCP,HID等吧,低功耗蓝牙BAS,HID,ANCS等!
4) 最后还是要站在巨人的肩膀上,BTsnoop如果是SoC那么基本不太适合,所以我会建议有Air log工具来具体问题具体分析