[CC2642r1] 问题笔记 记录使用过程中发现的问题
CC2642r1--问题笔记
- 发现的问题
- 一、使用官方例程进行配对,时间长达1分钟
- 二、低版本协议栈打开高版本协议栈(4.40.4 open 5.24.0)
- 三、提示:Bond save failed: 21
- 四、蓝牙丢包问题
- 五、线程跑飞 ICall_searchTask 返回NULL
- 六、放置广播被连问题
- 七、 IAR8.40开启ROV
- (一)system_printf 使能
- 八、GPIO 和 PIN 两种driver不能同时使用。
- (一)、两个文件互斥(PIN.h/GPIOCC26XX.c)
- PTM模式
- 绑定配对
- 一、参考文档
- 二、配置项
- 三、 EnergyTrace 功能
发现的问题
一、使用官方例程进行配对,时间长达1分钟
- 项目场景 [simplelink_cc13x2_26x2_sdk_4_40_04_04] [peripheral] [multi_role]
- 问题描述: 官方例程直接编译并烧录,就能复现。
- 原因分析: 使用安卓和苹果,现象都一致,可能是连接参数导致。
- 解决方案:通过syscfg修改[参数更新延时]。修改官方默认值6000–>1/0
二、低版本协议栈打开高版本协议栈(4.40.4 open 5.24.0)
- 替换内容: SCANNER_DUPLICATE_FILTER(5.24.0) --> SCAN_FLT_DISC_DISABLE(4.40.4)
- IAR重新配置tool路径,导入[4.40.4]配置文件
三、提示:Bond save failed: 21
- 最大连接数量设置过低,改大些,即可。
- 设置自动清理
四、蓝牙丢包问题
- 主机通过GATT_WriteNoRsp向从机写入数据,当写速率过快时,就会出现blePending
原因:这是由于出现前面设置的缓存区小和连接间隔太大等参数导致的
解决:
1:在ti_ble_config.h中,将MAX_NUM_PDU 改6 和 MAX_PDU_SIZE改251,
定义6个Tx缓冲区,每个缓冲区251字节。用户应用程序应该根据自身堆栈情况进行分配。如果没有足够的堆栈,可以通过减少MAX_NUM_PDU,这样可能导致吞吐量的损失。实际使用中的最坏情况是MAX_NUM_PDU和MAX_PDU_SIZE的乘积。设计人员应该根据设备的可用内存来平衡这些参数。
#define MAX_NUM_PDU 6
#define MAX_PDU_SIZE 251
我们配置L2CAP MAX_PDU_SIZE 为255, ATT_MTU 最大 为251 读写特征值最大长度应该ATT_MTU-3=248;
//source\ti\blestack\profiles\simple_profile\simple_gatt_profile.h SIMPLEPROFILE_CHAR5_LEN Line 85
#define SIMPLEPROFILE_CHAR5_LEN 248
- 将连接间隔调小些
注意,在实际情况下更高的连接间隔有着明显的缺点:由于射频干扰导致的连接事件将大大降低吞吐量。因此用户需要根据所需吞吐量进行权衡。当连接间隔大于100ms后,吞吐量将不会增加。
将原来的8001.25ms,修改成241.24ms
将最小的连接间隔“修改成7.5ms
五、线程跑飞 ICall_searchTask 返回NULL
- 没有在线程启动后,执行ICall_registerApp()
static void edebug_task(UArg arg0, UArg arg1) {// ******************************************************************// N0 STACK API CALLS CAN OCCUR BEFORE THIS CALL TO ICall_registerApp// ******************************************************************// Register the current thread as an ICall dispatcher application// so that the application can send and receive messages.ICall_registerApp(&ranger4AppSelfEntity, &ranger4AppSyncEvent);for(;;) {uint32_t events;events = Event_pend(ranger4AppSyncEvent, Event_Id_NONE, ET_ALL_EVENTS, ICALL_TIMEOUT_FOREVER);}
- 栈空间没有8字节对齐
`/task variables/
Task_Struct g_task_t;
#if defined TI_COMPILER_VERSION
#pragma DATA_ALIGN(g_task_stack_heap, 8)
#else
#pragma data_alignment=8
#endif
uint8_t g_task_stack_heap[1024];
六、放置广播被连问题
场景:初始化时开启看门狗功能,并在RF IO口触发的中断函数内喂狗,一旦RF口停止工作, 则喂狗会停止,程序便会复位。
实际测试发现RF停止工作之后看门狗并未复位,原因是RF停止工作后,程序进入了standby 模式,在standby模式下,看门狗计数器会停止工作,看门狗计数器只在程序处于active 和idle模式下才运行。
从上表可以看出在standby模式下RTC是正常运行的,所以这周采用RTC去监测RF的运行状态。通过设置一个标志位,在RF触发的中断内使能该标志位,在RTC的时钟中断内监测该标志位,若该标志位为true,则说明RF运行正常,之后重置该标志位;若该标志位为false,则说明RF停止工作,此时重启程序。测试验证有效,设备可以成功复位。
功耗测试发现:RTC若设置时钟周期为5s, 则增加功耗1uA; 若设置1s, 则增加功耗5uA;
RTC的相应代码:
/********************************************************************** @fn UTC_timeUpdateHandler* @brief Expiration callback for UTC clock instance.* Each time this is called the internal counter is updated*/
void UTC_timeUpdateHandler(void) {if(mrRfStatus)mrRfStatus = false;elseSysCtrlSystemReset();
}
/********************************************************************** @fn UTC_init* @brief Initialize the UTC clock module. Sets up and starts the* clock instance.*/
static void UTC_init(void) {ClockP_Params clockParams;// Convert UTC_UPDATE_PERIOD in milliseconds to ticks.uint32_t clockTicks = UTC_UPDATE_PERIOD * (1000 / ClockP_getSystemTickPeriod());// Setup parameters.ClockP_Params_init(&clockParams);// Setup argument.clockParams.arg = 0;// If period is 0, this is a one-shot timer.clockParams.period = clockTicks;// Starts immediately after construction if true, otherwise wait for a call
// to start.clockParams.startFlag = true;// Initialize clock instance.ClockP_construct(&UTC_clock, (ClockP_Fxn)&UTC_timeUpdateHandler, clockTicks, &clockParams);
}
七、 IAR8.40开启ROV
步骤1:IAR8.40 自带的ROV插件无法正常工作,TI的协议栈内提供的该ROV插件,路径在C:\ti\simplelink_cc13x2_26x2_sdk_4_40_04_04\tools\iar\tirtosplugin.dll。复制该文件并替换IAR8.40安装路径(C:\IAR8.30\arm\plugins\rtos\TI-RTOS)下的同名文件。
步骤2:调试时需要勾选下图的选项,否则RTOS无法开启。
步骤3:
点击debug, 在主菜单栏上会出现TI-RTOS的菜单,点击可选择想要开启的窗口。
(一)system_printf 使能
步骤1:
修改project.cfg 中system.SupportProxy 的内容为:
var System = xdc.useModule(“xdc.runtime.System”);
var SysMin = xdc.useModule(‘xdc.runtime.SysMin’);
SysMin.bufSize = 1024;
SysMin.flushAtExit = false;
System.SupportProxy = SysMin;
关于sysmin 在TI的官方文档内有详细说明:https://dev.ti.com/tirex/explore/node?node=ANqagjxZxWnBRB7bx0EnOw__pTTHBmu__LATEST
步骤2:
按照下图所示设置library configuration:
步骤3:
在程序中加入打印信息,例如System_printf(“Printf Test\n”);
步骤4:
进入debug模式,开启ROV中的sysmin 中的outputbuffer 窗口
点击debug暂停按钮,在该窗口中即可看见打印信息
现在只能在debug暂停的时候才可以看见打印信息,因为IAR中的ROV估计是还没做完善,无法实时刷新,所以只能暂停debug时才可以输出打印信息。
CCS 中加入system_printf 与IAR相同,打印信息可在console窗口实时显示。
八、GPIO 和 PIN 两种driver不能同时使用。
(一)、两个文件互斥(PIN.h/GPIOCC26XX.c)
参考:CC2640R2 SDK - GPIO 和 PIN 两种driver的区别
gpio vs pin驱动?
PTM模式
文档链接:file:///C:/ti/simplelink_cc13x2_26x2_sdk_4_40_04_04/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/creating-a-custom-bluetooth-low-energy-application-cc13x2_26x2.html#production-test-mode-ptm
PTM的示例工程为CC2642的simple_peripherial 工程,除了勾选PTM选项外,还需要注释掉设备初始化后广播使能的相关命令,否则在开启广播的情况下无法进入PTM模式,发送PTM相关命令会返回ROLE_CHANG_NOT_ALLOW的状态。
GAP_DeviceInit()注释即可
绑定配对
一、参考文档
该文档对绑定流程有详细说明:
TI 官方说明文档:
file:///C:/ti/simplelink_cc13x2_26x2_sdk_4_40_04_04/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gapbondmngr-cc13x2_26x2.html
file:///C:/ti/simplelink_cc13x2_26x2_sdk_4_40_04_04/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/privacy.html#using-privacy-in-stack
这里详细说明了如何使用GAPBondMgr_FindAddr()
GAPBondMgr API: file:///C:/ti/simplelink_cc13x2_26x2_sdk_4_40_04_04/docs/ble5stack/ble_user_guide/doxygen/ble/html/group___g_a_p_bond_mgr.html
二、配置项
System.cfg中提供了两个配置较为方便,如下图所示:
①Sync Whitelist with bonded device: 自动将绑定过的设备加入到白名单列表中
②LRU bond Replacement: 勾选后则当绑定设备数达到所设置的上限时,程序会自动从列表删除使用次数最少的设备,为新的绑定设备提供存储空间;若未勾选,则无法加入新的绑定设备。
三、 EnergyTrace 功能
TI 文档:
file:///C:/ti/simplelink_cc13x2_26x2_sdk_4_40_04_04/docs/ble5stack/ble_user_guide/html/energy-trace/energy-trace.html
该功能软件集成在CCS中
结合TI的lanuchPad 开发板可直接进行功耗测量,自动得出功耗参数以及使用寿命
经过测试,功耗测量误差较大,上图的平均电流为1.0022mA,N6705B 测出的功耗为560uA,可能是开发板上的功耗测量电路测量精度不高,TI官方提供了一款专门用于该功能的XDS110:地址 ,精度1uA。
[CC2642r1] 问题笔记 记录使用过程中发现的问题相关推荐
- ubuntu 系统使用过程中发现桌面突然放大,屏幕跟着鼠标走
ubuntu 系统使用过程中发现桌面突然放大,屏幕跟着鼠标走 解决方法: Alt+鼠标滑轮 可以缩放桌面,问题解决 附:dconf reset -f / 可以将桌面恢复到默认配置
- 日常使用计算机过程中发现的中断,2010年会计从业考试《初级电算化》章节习题及答案(5)...
第五章 1.当月的记账凭证必须全部记账,如有未记账的当月凭证,系统将( ) A.不能结账 B.继续结账 C.放到下月 [答案]:A 2.往来账管理的往来客户档案的设置其最主要内容是( ) A.客户编辑 ...
- 论文完成过程中发现的重要问题
尽管很清楚自身存在很多问题,可是平时并没有刻意去思考这些,更加没有有针对性地去解决这些问题.在写论文的整个过程中意识到这些问题的存在对于未来的发展影响甚大,因此,将现今发现的问题记录并加以分析, ...
- 【联想台式电脑 win11系统安装Ubuntu18.04】记录安装过程中网卡驱动、显卡驱动等问题
0 情况说明: 电脑为联想台式机:Lenovo IdeaCentre-GeekPro 内存:32G 磁盘:512固态硬盘+2T机械硬盘 CPU:i7-12700 GPU:NVIDIA RTX 3060 ...
- sas安装过程中发现字体安装失败解决办法
安装过程中出现了一个字体的问题:百度一大堆,没解决问题,直接跳过了,呃呃呃呃,虽然显示安装失败,硬着头皮往下装了反正. 之前的一篇文章,到后来做到gchart的图形的时候,总是显示失败,后来找到解决办 ...
- 记录一下我在刷题的过程中发现我没记住的知识
2021-12-07 1. Number()是怎么用的? Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用. 构造函数 var n = new Number(1) c ...
- 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
不久前的Grakn Forces 2020上,我想出了这个方法,我本来以为这个模型不会很常见.然而,今天的CodeForces #679 Div2上,我第二次碰到了可以用这个模型解决的问题,气人的是, ...
- 好记性不如烂笔头——记录项目过程中的编译错误及解决方法(持续记录中)
文章目录 前言 前言 记录做项目的时候编译问题,好记性不如烂笔头,下次碰到相同的问题也可以方便查阅 2023.2.10 问题1:编写makefile脚本后,执行make all,遇到如下问题 解决方法 ...
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...
最新文章
- chrome动态ip python_简单python代码实现模拟浏览器操作
- AJAX跨域请求数据原理与案例
- Redis几个认识误区
- 深入理解分布式技术 - 消息队列知识点回顾总结
- LeetCode 8 字符串转换整数 (atoi)
- P3368 【模板】树状数组 2(区间修改单点查询)
- 柳传志给年轻人的建议:比起过日子,更要奔日子
- 开源 Python网络爬虫框架 Scrapy
- 从块结构谈表的存储参数与性能之间的关系
- PHP ctf addslashes,[红日安全]代码审计Day13 - 特定场合下addslashes函数的绕过
- 后端返回list前端如何处理_前端、后端、全栈是什么?薪资前景如何?
- 解决Ubuntu下Sublime Text 3无法输入中文
- bitmap存入mysql,[MySQL] mysql中bitmap的简单运用
- 全国计算机自动化办公专业人才证书,办公自动化证书有什么用
- MySQL自增id溢出
- 常用计算机防治病毒软件有哪些,如何防治计算机病毒?常用的反病毒软件有哪些?...
- 【CSDN下载】下载热门资源一周精选
- < pre >标签 定义预格式化的文本
- 小说作者推荐:没有颜色的无合集
- cellpadding ,cellspacing的意思