低功耗蓝牙:开帖研究低功耗蓝牙率先发一个NORDIC翻译文档

2020-02-11 08:56发布

本帖最后由 wazhiyi 于 2014-12-12 15:13 编辑

从今天开始开帖研究低功耗蓝牙,首先发一个NORDIC的翻译文档。
背景资料:
使用的开发板是关于NRF51822的芯片,用的是去年团购(在此处感谢阿莫和Overhead兄,话说去年的团购还是挺让人怀念的,做人不能忘本,overhead的资料也放在楼主位了)的板子。
1、第一步实现无协议栈的无线收发;(已经更新在楼主位,代码是跑通了,具体的原理还需要看一段时间的资料)
2、第二布实现蓝牙协议栈。蓝牙没有弄过,弄一步算一步吧。估计顶到200楼,就差不多了;
2+增加一些飞思卡尔的相关性,到这一步出一个基于Freescale的蓝牙Demo,后续的程序走Freescale和Nordic两个平台;
3、第三步实现6轴的控制,话说DMP还没有弄过,到时候也移植一下;预计到250楼;
4、第四步实现一个基于6轴和蓝牙的3轴模拟飞行器。话说现在弄这个的人很多啊,一直没有机会弄,到时候可以使用匿名的软件模拟一个;预计到300楼;
5、第五步弄个Android的手机APP,做一个防丢器,或者空气盒子(具体参数暂定为温湿度,话说墨迹的空气盒子不错);预计到400楼;
6、第六步弄个智能手环,参考百度手环。


加油啊!!!也欢迎拍砖!!!
接下去的例程,都发布在各个楼层了。楼主位不能在编辑了,欢迎下载。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
100条回答
fengyunyu
2020-02-17 10:30
nRF51822 SDK初体验

作为两家BLE芯片大厂之一,nordic不像TI那么开放,nordic的开发资料是很难找的。
今天有幸得到nordic的BLE芯片nRF51822的SDK,看了一下。

首先,nordic号称协议栈(称为SoftDevice)和应用完全分开,是怎么实现的呢?
TI的协议栈以库的形式提供,用户应用在链接时和库链在一起形成最终的机器代码,TI提供库和头文件供用户使用。
nordic用了不同的方式:SoftDevice,这样协议栈和用户应用可以单独编译和链接。实现BLE的SoftDevice似乎叫S110,由nordic提供。我猜nordic应该只提供S110的机器码,应该不会提供源代码。
看了nRF51 SDK,里面确实没有BLE的库,所有sd_打头的函数都是SoftDevice相关的。比如:sd_ble_gap_adv_data_set
这个函数是这么定义的:
SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen));
这个SVCALL在使用MDK时是这么定义的:
#define SVCALL(number, return_type, signature) return_type __svc(number) signature
似乎是使用了Cortex-M0的SVC机制实现Softdevice。
(题外话,我在想Nordic会把自己的协议栈绑在一种CPU架构上吗?不是的,代码里有一个开关SVCALL_AS_NORMAL_FUNCTION
可以让上面的SVCALL宏定义变成普通的函数声明。当然在没有
源代码和库的情况下打开这个开关会出现找不到函数实现的链接错误)

总体来说我觉得softdevice就是nordic一种封闭协议栈核心代码的方式,和TI提供库文件的方式没有区别。
nordic号称自己的协议栈可以配合其它的RTOS,但是如果RTOS也用了相同的SVC呢?
我不关心nordic或者TI的协议栈核心代码实现,就算给我源代码我也懒得看,但是我觉得TI用库提供协议栈的方式更直接和通用;nordic这种方式太取巧了,某些时候会给用户带来一些限制。
当然51822还是有一些优势的,至少封装比较小。

至于怎么在nRF51822上开发应用我还没来得及看,没办法和TI的架构比较

一周热门 更多>