0
点赞
收藏
分享

微信扫一扫

[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分钟

  1. 项目场景 [simplelink_cc13x2_26x2_sdk_4_40_04_04] [peripheral] [multi_role]
  2. 问题描述: 官方例程直接编译并烧录,就能复现。
  3. 原因分析: 使用安卓和苹果,现象都一致,可能是连接参数导致。
  4. 解决方案:通过syscfg修改[参数更新延时]。修改官方默认值6000–>1/0

二、低版本协议栈打开高版本协议栈(4.40.4 open 5.24.0)

  1. 替换内容: SCANNER_DUPLICATE_FILTER(5.24.0) --> SCAN_FLT_DISC_DISABLE(4.40.4)
  2. IAR重新配置tool路径,导入[4.40.4]配置文件

三、提示:Bond save failed: 21

  1. 最大连接数量设置过低,改大些,即可。
  2. [CC2642r1] 问题笔记 记录使用过程中发现的问题_html


  3. 设置自动清理
  4. [CC2642r1] 问题笔记 记录使用过程中发现的问题_ide_02


四、蓝牙丢包问题

  1. 主机通过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

  1. 将连接间隔调小些
    注意,在实际情况下更高的连接间隔有着明显的缺点:由于射频干扰导致的连接事件将大大降低吞吐量。因此用户需要根据所需吞吐量进行权衡。当连接间隔大于100ms后,吞吐量将不会增加。
  2. [CC2642r1] 问题笔记 记录使用过程中发现的问题_html_03

  3. 将原来的8001.25ms,修改成241.24ms
    将最小的连接间隔“修改成7.5ms

五、线程跑飞 ICall_searchTask 返回NULL

  1. 没有在线程启动后,执行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);
}

  1. 栈空间没有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模式下才运行。

[CC2642r1] 问题笔记 记录使用过程中发现的问题_html_04


从上表可以看出在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;
else
SysCtrlSystemReset();
}
/*********************************************************************
* @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无法开启。

[CC2642r1] 问题笔记 记录使用过程中发现的问题_CC2642R1_05


步骤3:

点击debug, 在主菜单栏上会出现TI-RTOS的菜单,点击可选择想要开启的窗口。

[CC2642r1] 问题笔记 记录使用过程中发现的问题_html_06

(一)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:

[CC2642r1] 问题笔记 记录使用过程中发现的问题_html_07


步骤3:

在程序中加入打印信息,例如System_printf(“Printf Test\n”);步骤4:

进入debug模式,开启ROV中的sysmin 中的outputbuffer 窗口

[CC2642r1] 问题笔记 记录使用过程中发现的问题_cc2642_08


点击debug暂停按钮,在该窗口中即可看见打印信息

[CC2642r1] 问题笔记 记录使用过程中发现的问题_html_09


现在只能在debug暂停的时候才可以看见打印信息,因为IAR中的ROV估计是还没做完善,无法实时刷新,所以只能暂停debug时才可以输出打印信息。

CCS 中加入system_printf 与IAR相同,打印信息可在console窗口实时显示。

八、GPIO 和 PIN 两种driver不能同时使用。

(一)、两个文件互斥(PIN.h/GPIOCC26XX.c)

参考:​​CC2640R2 SDK - GPIO 和 PIN 两种driver的区别​​

​​gpio vs pin驱动?​​

[CC2642r1] 问题笔记 记录使用过程中发现的问题_问题笔记_10


[CC2642r1] 问题笔记 记录使用过程中发现的问题_cc2642_11

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

[CC2642r1] 问题笔记 记录使用过程中发现的问题_ide_12


PTM的示例工程为CC2642的simple_peripherial 工程,除了勾选PTM选项外,还需要注释掉设备初始化后广播使能的相关命令,否则在开启广播的情况下无法进入PTM模式,发送PTM相关命令会返回ROLE_CHANG_NOT_ALLOW的状态。

绑定配对

一、参考文档

​​该文档对绑定流程有详细说明​​:
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()

[CC2642r1] 问题笔记 记录使用过程中发现的问题_CC2642R1_13


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中提供了两个配置较为方便,如下图所示:

[CC2642r1] 问题笔记 记录使用过程中发现的问题_ide_14


①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中

[CC2642r1] 问题笔记 记录使用过程中发现的问题_html_15


结合TI的lanuchPad 开发板可直接进行功耗测量,自动得出功耗参数以及使用寿命

[CC2642r1] 问题笔记 记录使用过程中发现的问题_CC2642R1_16


经过测试,功耗测量误差较大,上图的平均电流为1.0022mA,N6705B 测出的功耗为560uA,可能是开发板上的功耗测量电路测量精度不高,TI官方提供了一款专门用于该功能的XDS110:​​地址​​ ,精度1uA。




举报

相关推荐

0 条评论