SmartTAG参考设计问题

13个帖子/ 0新
最后发表
祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
SmartTAG参考设计问题

嗨,对话!
我计划使用您从这个网站下载的参考源代码DA14580_TAG_3.20.6来完成我的产品。但我遇到了很多问题。
存在的问题如下:
1.我不能使用J-link调试代码。调试几分钟后,BLE设备无法找到,一旦我停止调试,设备再次出现。
在设备消失的时间内,当我在主循环中设置断点时程序不能停止。我猜是程序崩溃了。
我想知道原因,或者我是否忽略了一些问题。
2. SmartTag无法提醒手机。我用iOS应用程序测试了您的SmartTag,iPhone可以提醒SmartTag和两个设备都有一次警报
距离超过我设定的值。但是smartTAG不能提醒iphone。
3.手机只能与SmartTag连接一次。根据文档UM-B-018_DA14580_SMARTTAG_REFICED_APPLICATION_REV_2,
我按下了3秒以上的按钮并听到了音调,但键合数据似乎没有删除,iPhone无法再次与SmartTag连接。

我与服务器的问题混淆了,但批量生产前没有太多时间。
期待您的回复,谢谢。

设备:
mt_dialog.
离线
最后一次露面:三个月两个星期前
工作人员
加入:2015-06-08 11:34
嗨祖马,

嗨祖马,

1.设备在休眠模式下默认操作,以便调试您必须禁用的应用程序以来,由于在休眠模式下,调试器被禁用,转到DA14580_CONFIG和UNTEMINE THE CFG_EXT_SLEEP。

2.为了使智能标签导致智能手机警报手机应用程序必须支持Corponding Service,IAS服务,当前IOS应用程序不支持此功能。

3.当你删除键智能标记的数据应该消除键手机的数据,如果结合数据留在你的电话你的手机发送一个加密请求,标签将检查的数据请求和看到内存,使数据,是空的,因为你删除了它并拒绝与手机的任何连接。

谢谢mt_dialog.

祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
嗨,对话框中,

嗨,对话框中,
感谢您耐心的回复。你的回答解决了我上面提到的所有问题。现在我遇到了另一个问题:
在上电后,每次第一次对等端设备无法使用我们的电路板连接连接间隔,并且当PEER设备连接到该设备时,它会工作。
我很困惑。为什么第一次上电后连接参数不能生效?

我们发现TASK_APP的状态似乎没有设置为APP_PARAM_UPD,这导致gapc_cmt_evt_handler中没有调用函数app_update_params_rejected_func(param->status)和app_update_params_complete_func()。
我想知道什么方法可以使连接间隔更新生效,在与对端设备第一次连接。谢谢你!
==========================================================================================================================================
/////为更新连接间隔添加计时器
Void app_connection_func(struct gapc_connection_req_ind const *param)
{
app_timer_set (APP_UPDATE_PARAM_TIMER TASK_APP 300);// the 3s timer add for update connection interval . //更新连接间隔
.......
}

////////添加处理程序以获取更新连接间隔
int app_update_param_timer_handler(ke_msg_id_t const msgid,void * param,ke_task_id_t const dest_id,ke_task_id_t const src_id)
{
app_timer_set (APP_UPDATE_PARAM_TIMER TASK_APP 1000);
app_param_update_start();

return(ke_msg_consumed);
}

void app_param_update_start(void)
{
app_param_update_func ();
}

空白app_param_update_func(空白)
{
struct gapc_param_update_cmd * req = ke_msg_alloc(gapc_param_update_cmd,task_gapc,task_app,gapc_param_update_cmd);

申请- >操作= GAPC_UPDATE_PARAMS;
申请- > params.intv_min = 240;// N * 1.25ms
申请- > params.intv_max = 240;// N * 1.25ms
req-> params.latency = 0;// conn事件跳过
申请- >参数。time_out = 400;// N * 10ms
ke_msg_send(要求的);

返回;
}
=================================================================================================================================

mt_dialog.
离线
最后一次露面:三个月两个星期前
工作人员
加入:2015-06-08 11:34
嗨祖马,

嗨祖马,

我不太理解在第一次连接期间没有更新新参数的事实。你的意思是在断开连接后,如果你再次连接,新的参数是到位的连接间隔是你在参数更新或在第一个连接事件中没有看到你设置的参数?此外,为了让设备进入APP_PARAM_UPD,您必须在使用ke_state_set(TASK_APP, APP_PARAM_UPD);发出参数更新请求时显式地设置它。连接参数与客户端设备协商,对端设备只能发送一个关于首选连接参数的指示,它是由客户端是否接受它。如果你检查SDK5的ble_app_peripheral例子,你会发现如何正确地发出一个参数更新请求。

谢谢mt_dialog.

祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
嗨MT_dialog,

嗨MT_dialog,
你的理解绝对正确。我用了另一部手机后这个问题就消失了,我想可能是和之前用的手机不兼容吧。
现在我想改变按钮的函数,如下所示:
1)短按按钮后会听到声音,然后发送通知到手机;
2)按下按钮后的深睡眠模式中的标签,长按下,唤醒深睡眠第二次长按。

在文件da14580_config.h中我定义宏#cfg_extended_sleep,在函数button_press_cb()中我注释了行(ke_state_get(task_app)== app_connectable)来发送唤醒消息。在App_push_button_long_press_handler()(添加我自己)(添加我自己),被称为app_set_deep_sleep()在检测到长按后。
但是我们发现,当我把程序烧成Flash后,按了很长时间后,程序似乎崩溃了。我也发现你的回复在其他帖子,我们应该调用app_set_extended_sleep()时,程序从SPI Flash启动。我有一些疑问:
1.为什么该程序在按钮长按下后崩溃?是唤醒IRQ的原因在很快设置深度睡眠模式后触发?
2.除了刻录OTP之外,是否有其他方法可以从深度睡眠代码中测试唤醒?
3.你能给我一些关于长时间按下按钮后从深度睡眠模式中唤醒的建议吗?

mt_dialog.
离线
最后一次露面:三个月两个星期前
工作人员
加入:2015-06-08 11:34
嗨祖马,

嗨祖马,

如果我的理解是正确的,你想要设备进入深度睡眠模式(不是永久睡眠,只是改变睡眠模式),当按钮长时间按下时,该操作执行时设备的状态是什么(连接,设备是广告?)此外,当你触发长按按钮,唤醒消息被调用和唤醒的处理函数设置定时器。计时器的处理程序在计时器结束时执行,在计时器处理程序中你将设备的睡眠模式更改为深度睡眠。如果是这样,那么这应该是可行的。您不能在唤醒irq执行后立即调用睡眠模式的更改。

使用深度睡眠功能时,OTP在每个唤醒中镜像到Sysram中,使用深睡眠模式,不支持SPI闪光灯。当在开发模式下,系统从未陷入深入睡眠状态,无法实际测试它而不刻录OTP,您必须刻录OTP。

就从深度睡眠中唤醒而言,智能标签参考设计处于深度睡眠模式,app_button_press_cb函数将其从深度睡眠中唤醒。我认为,如果你想实现这与长按,你可以设置一个软件定时器,并在指定的处理程序将检查按钮的状态,就像长按智能标签用于擦除内存。

谢谢mt_dialog.

祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
嗨,mt_dialog,

嗨,mt_dialog,
我使用深度睡眠来降低功耗,长按就像一个开关一样,使设备无论连接或广告都能开机或关机。
我在睡眠模式初始化和放大初始化之间添加了我的代码来检测长按,并且我会再次调用app_set_deep_sleep()一旦未检测到长按。
我发现API app_set_deep_sleep()没有通过uart打印的信息工作,程序像往常一样运行到主循环。

我想知道在哪里app_set_deep_sleep()可以被调用和生效,是app_asynch_proc()吗?

///////////////////////////////////// 这是我的代码长按检测
Uint8_t times = 0;

if(gpio_getpinstatus(gpio_button_port,gpio_button_pin))
{
而(1)
{
systick_usec_units(假);
systick_wait (APP_PRESS_DELAY);

如果GPIO_GetPinStatus(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)
{
* + +;
}
其他的
{
syslog(“按键时间不够,我要去睡个大觉!”);
app_ble_ext_wakeup_on();
app_set_deep_sleep ();
}

如果> = 10(倍)
{
//播放一个音调,表示已删除绑定数据
app_proxr_pwm_enable(button_pwm_callback);
systick_usec_units(假);
systick_wait (APP_PWM_SWITCH_DELAY);
app_proxr_pwm_disable ();

打破;
}
}

}
其他的
{
Syslog(“长按未检测到,我会深入睡眠!”);
app_ble_ext_wakeup_on();
app_set_deep_sleep ();
syslog(“深度睡眠失败!进入主循环!”);
}

祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
嗨,mt_dialog,

嗨,mt_dialog,
我注意到,程序员应该停止所有BLE活动,然后让设备自动进入睡眠,你在其他帖子中回复。这是否意味着在主循环中不需要做任何关于睡眠模式的事情?我要做的是:
1.当在工作状态下长时间按下按键,让设备自动进入深度睡眠时,停止BLE活动(广告,连接,清除BLE计时器,还有其他吗?)
2.一旦被唤醒,如果没有长按按钮让设备再次进入深度睡眠状态,则停止BLE活动,否则启动相应的BLE事件使设备正常工作。

我也有一个疑问,什么API app_set_deep_sleep()和app_set_extended_sleep()用于?我需要调用API吗?

mt_dialog.
离线
最后一次露面:三个月两个星期前
工作人员
加入:2015-06-08 11:34
嗨祖马,

嗨祖马,

是的,如果停止所有BLE活动(因此在BLE核心中没有计划的BLE事件),580将自动切换指定的睡眠模式,延长或深睡眠。您不必在主循环中执行任何特性,只需停止所有的BLE活动(广告,断开 - 以防您已连接,计时器)和设备应入睡。当你要醒来时,不应该有任何持续的BLE活动,所以你可以开始一个BLE定时器,以检查是否有一个长按。然后,当计时器经过时,您可以检查您的PIN并启动广告或其他任何内容。当您调用app_set_deep_sleep()或app_set_extended_sleep()系统不会睡眠状态,该特定实例它只是更改睡眠模式,何时会发现节省电量的机会它将属于相应的睡眠模式。如果您有持续的BLE活动,它将在BLE事件之间的相应模式下睡眠(在广告或连接间隔之间或直到预定的计时器经过)之间。

谢谢mt_dialog.

祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
嗨,mt_dialog,

嗨,mt_dialog,
谢谢你的指导,现在我已经达到目标了。

mt_dialog.
离线
最后一次露面:三个月两个星期前
工作人员
加入:2015-06-08 11:34
嗨祖马,

嗨祖马,

很高兴知道,谢谢你的暗示。

MT_dialog问好

祖马
离线
最后一次露面:2个月21个小时前
加入:2016-01-13 09:35
嗨,mt_dialog。

嗨,mt_dialog。
我现在遇到了SmartTag的一些新问题,这在一段时间内拼图。
1.有些手机不能很好地与我们的设备工作。我们消除了配对过程,在一定程度上解决了问题。
2.提醒有时不能工作,特别是当手机提醒我们的设备在第一次连接。

问题:
1.除了配对外,是否有其他方法将我们的设备与Mobilephone粘合?
我试图获取中心设备地址,但如何在中心设备(如iPhone)使用可解析的私有地址时获得真实地址?
2.什么原因可能导致上述第二个问题?

谢谢,祖马

mt_dialog.
离线
最后一次露面:三个月两个星期前
工作人员
加入:2015-06-08 11:34
嗨祖马,

嗨祖马,

1.绑定过程是基于两个设备的配对,以交换密钥,将链路加密等,没有其他过程,以绑定两个设备。大多数android手机不使用公共地址,但它们使用外部世界的随机地址,所以你也不能这样做。

2.我们从来没有经历过这样的事情,是什么条件导致了这种行为?我的意思是,你有一个可靠的连接,你触发了即时警报服务,然后会发生什么?这种事件发生的频率是多少,在什么情况下发生?

谢谢mt_dialog.