虽然我没有看过蓝牙芯片内部源代码,通过下面的自己猜测的逻辑,给自己的好奇心一个答复吧!
简单介绍:
从上层来的命令和数据经过HCI的解释后分别打包成对应的命令分组和数据分组,之后经过HCI传输层道道HCI固件模块。
HCI固件模块区分是数据还是命令,如果是数据分组的话就经基带层打包发送出去,
如果是命令具体分析是让基带层执行的命令还是让LM执行的命令。
如果是让基带执行的命令就调用命令子程,子程让处理的结果放到缓冲区中。然后打包发出。发送遵守发送规程。
如果是让LM执行的命令,调用LM命令子程,遵循链路管理协议。
简单介绍:
基带子模块进行解包,然后放入FIFO中供LM访问,LM区分是LMP层还是L2CAP层,如果不是LMP直接通过HCI打包发给HOST。如果是LMP层的就进行处理,并将处理结果放入FIFO中供基带控制器发送响应,也可能产生事件通过HOST的HCI接口发送给HOST。
总结:
蓝牙芯片固件向上解释HCI命令,调用对应的子程,产生蓝牙基带数据分组,按照收发规程发出。
向下分析蓝牙基带数据分组,调用对应的子程,封装成HCI命令发给HOST。