nrf52832使用ble+2.4G(Gzll)遇到的问题
由于有nrf52832(从)与nrf24U01(主)通讯的需求,大概是这样,nrf24U01做为一个dongle接电脑,然后52这边与dongle通讯控制电脑。nrf52代码参考的是gzp_desktop_emulator这个demo,由于nrf24U01dongle的demo用的也是gzp_desktop,所以这个通讯非常简单,gzp初始化的时候把参数设为一样就能通讯了,通讯要求是3ms一个32byte的包不丢包,写好一个测试程序,配对成功,然后发现一直丢包...丢包率为50%,可以确定硬件是好的因为这是同事前几年出货的dongle而且我换了几个都这样..然后把发包速度改为了10ms一个32byte的包,发现还是丢包率50%,仔细看gzll的代码,我的配对通道用的是0,数据通道用的是1,然后在nrf24U01没看出啥,最后看了很久,在nrf52832这边一个gzp的头文件里看到 数据通道1是用于加密数据用的通道,也就是说如果有加密数据的需求才用通道1....改为用通道2,测试OK,3ms一个32byte的包不丢包。把gzp_desktop_emulator代码移植到我的工程里。
本以为大功告成,然后用keil下载程序的时候发现下不进,然后我把我加进工程的几个gzp的.c文件和一个叫gzll_nrf52_sd_resources_arm的.lib文件移除工程,发现又OK了,然后又把gzp的文件加进工程编译,然后打开编译好的hex文件,发现:工程的rom开始地址为0x26000,为啥编译好的hex文件是从0x1000开始,而且刚好就一个扇区的大小,一开始我怀疑是这个lib的原因,后来我把lib移出去了还是这个这样,然后我就在添加进的.c包含的几个头文件查看,然后在nrf_gzp_config.h看到了有可能的代码,然后改了之后如下:
#if SOFTDEVICE
#define GZP_PARAMS_STORAGE_ADR 0x00075000//这里是由我的52833和52832算出来的地址
#else
#define GZP_PARAMS_STORAGE_ADR 0x00001000
#endif
/**Number of bytes available for parameter storage in Device.It is equal to flash page size on nRF5x chips.
*/
#if defined (NRF51)#define GZP_DEVICE_PARAMS_STORAGE_SIZE 1024
#elif defined (NRF52_SERIES)#define GZP_DEVICE_PARAMS_STORAGE_SIZE 4096
#else#error Chip type is undefined!
#endif
因为我用了ota和fds,上面的0x00075000地址是我自己flash map算出来的地址,具体以相应的需求和芯片为主。
这个扇区主要来给gzll保存配对的信息用的,不得不说Nordic还真浪费,1个扇区4k的flash啊!可以写多少代码,bootsetting两个扇区,gzll一个扇区,fds也是最少要2个扇区我的天。
gzll跟ble不能共存,初始化gzll的时候假如打开了ble的协议栈需要再关掉,如果这时候还用了定时器还需要手动打开因为关协议栈的时候也把时钟关了,大概长这样:
//现在需要使用gzll
disable_softdevice(); //关闭蓝牙协议栈 我自己写的一个函数
ngds_gzp_start(); //初始化gzp相关的各种参数
gzp_get_pairing_status();//是否有存在配对的数据
gzp_init(); //初始化gzp
GAZELLE_ERROR_CODE_CHECK(nrf_gzll_enable());//Enable Gazell.
还有如果需要一直双向通讯的时候,如果从机不发送包,主机这边主动发送会失败,所以可以在gzll的发生task那加一个如果没数据发送就每隔n ms发送空包,这样主机这边有数据的时候也可以主动发过来。
如果你遇到了跟我一样的问题就给我点个赞呗^ ^
nrf52832使用ble+2.4G(Gzll)遇到的问题相关推荐
- nRF52832 — 串口BLE例程逐行解析【转载】
原文链接: http://blog.csdn.net/u011034150/article/details/50617686(转载文章,若有不妥,通知后我会立即删除) 本讲逐行代码解析官方串口BLE例 ...
- NRF52832蓝牙ble多个server连接client向上位机发送数据,断开一个从机,主机多发重复数据问题(server并没有多发)
在调试公司项目中的蓝牙生理传感器(该传感器为Peripheral,连接上Central后等待pc机端指令,指令到达将Peripheral中采集到的生理数据经由Central传输到PC端)过程中,遇到一 ...
- nRF52832蓝牙BLE学习(1)基本了解(环境、目录结构等)
2021.03.05 1.准备 1).Keil(Keil无法下载时可直接用) ARMCMSIS 版本下载路径 https://www.keil.com/dd2/pack/(需要自己找版本) 简单的办法 ...
- ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?
浅谈为什么很多蓝牙模块厂家选择nRF52832? 现在蓝牙低功耗(BLE)SOC作为新一代蓝牙,以其低功耗的优势,正凸显出强大的市场竞争力,而其中Nordic公司的nRF52832这一款低功耗蓝牙芯片 ...
- mtk2502和nrf52832哪个好_蓝牙芯片NRF51822与NRF52832的性能对比
1 功耗方面:nRF52832更是在nRF51822的基础上简直将功耗降低了一半 2 更好的RF体现,主要是发射功率和接纳敏感度更好.发射功率,他哥俩适当,都是+4dbm ,nrf52832的灵敏度是 ...
- nrf52832与nrf24L01+通信
使用2.4G无线芯片nrf24L01+与蓝牙芯片nrf52832通信,nrf52832工作在2.4G模式. nrf24L01+使用以前调试通过程序,两个nrf24L01+通信良好. nrf52832模 ...
- nRF52832-Bluefruit52学习之MicroPython开发(1)-- 简介
nRF52832技术交流群:680723714 nRF52832-Bluefruit52核心板详细介绍: https://blog.csdn.net/solar_Lan/article/details ...
- FR8016HA MS1791 PHY6222 TLSR8251 YC1171 HS6621 BK3432 N32WB031 对比介绍
富苪坤-FR8016HA 巨微-MS1791 奉加微-PHY6222 泰凌微-TLSR8251 易兆微-YC1171 昂瑞微-HS6621 博通-BK3432 国民技术-N32WB031 芯片简介 F ...
- 整理国内无线通信模组企业
序列 公司名称 地址 产品 1 移远通信 上海 2G模组 3G模组 4G模组 5G模组 LPWA模组 车规级模组 Wi-Fi模组 2 广和通 深圳 宽带模组5G.LTE 中低速模组LTE Cat1 N ...
最新文章
- 聊聊sentinel的SystemSlot
- pandas使用isna函数和any函数判断dataframe中的每一个数据列中是否包含缺失值
- 区块链预言机(5)预言机原理
- 部署Django到云服务器(centos+nginx+mysql+uwsgi+python3)【操作篇(1)】
- heap与stack区别
- 我们已经不用AOP做操作日志了! | 原力计划
- 【计算机网络】链路与连通
- ASP.NET MVC RegisterBundles
- python入门指南by许半仙长佩_有哪些好看的耽美文啊?
- 朱光潜:要有悲剧,才能算人生
- RTI_DDS自定义插件开发 6 监听者
- 财帮子(caibangzi.com)网站架构
- android判断apk的版本,Android APP 版本检查
- ADB命令获取手机应用安装包
- 手把手教QT—2. 启航篇,手动建工程及工程文件讲解
- vulnhub-nark靶机渗透
- 实战:从零开始制作一个跑步微信小程序
- 对文件或文件夹进行删除、移动、windows10重命名等操作时,系统可能提示“操作无法完成,因为其中的文件夹已在另一程序中打开,请关闭该文件或文件夹,然后重试
- Day2 B - Stones
- 局域网中的限制与突破方法
热门文章
- J版 OpenStack动态加载菜单图片详解
- 聊聊我的故事 | 我丰富的十二年···
- Linux内核PWN-基础ROP提权
- 85 R 银行信用卡风控评分数据分析
- Perl qw()函数
- Buffon投针实验:究竟为什么是pi?
- 【C语言】main 函数的正确写法
- Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
- 怎么用python编写程序计算标准差_python 标准差计算的实现(std)
- echarts配置及专业k线作图工具