CSR蓝牙芯片开发

入手一套CSR1010开发套件,研究一下CSR的ble芯片开发,CSR101x有三个型号,1010、1011和1012,前两个都是基于4.0协议栈,只是IO数目不同,1012基于4.1协议栈,计划是先搞懂1010的开发,然后再看看4.1的协议栈是什么样子。

感觉CSR应用最多的还是基于2.1+EDR和3.0+HS的音频传输,对于BLE ,芯片种类很少,而且资料也没有那么详尽。以下针对1010的开发:

笔者之前开发过TI的芯片和Nordic的芯片,CSR与两者不同的是CSR添加了ROM,把协议栈封装在ROM中,开发者通过调用底层API接口的方式完成上层应用的开发。ROM、RAM和外接的FLASH构成了CSR蓝牙芯片的存储系统。使用CSR开发蓝牙应用的过程和在android端开发应用的过程很类似,ROM中的固件API接口为应用提供了一个沙箱环境,保证了应用运行的安全稳定。

1010上电首先回调AppPowerOnReset(),可在此API中定义reset执行事件。之后调用AppInit(sleep_state last_sleep_state),可在此函数中添加初始化代码。这里需要提到两个很重要的消息处理函数,AppProcessSystemEvent(sys_event_id id, void *data)和AppProcessLmEvent(lm_event_code event_code, LM_EVENT_T *p_event_data),AppProcessSystemEvent处理系统事件,比如IO口中断或者电池欠电;AppProcessLmEvent处理连接管理相关的事件,如GAP和GATT层的消息,SM层的消息等。除此之外系统还维护着一个计时器,计时精度为1ms。

经AppInit初始化完成后即可触发GATT_ADD_DB_CFM事件,回调AppProcessLmEvent函数处理GATT_ADD_DB_CFM事件,即可进行广播参数设置并开启广播。当有外部设备请求连接时,固件完成L2CAP连接,并回调AppProcessLmEvent函数产生LM_EV_CONNECTION_COMPLETE事件提示L2CAP层的连接已经完成,应用可在此事件中,提取连接的参数;固件完成GATT层连接后,回调AppProcessLmEvent函数产生GATT_CONNECT_CFM事件,自此GATT连接建立完成。(未完待续)

你可能感兴趣的:(蓝牙芯片开发)