SmartTAG参考设计问题

13个帖子/ 0个新
最后发表
祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
SmartTAG参考设计问题

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

我被这些问题弄糊涂了好几天,但是离量产的时间不多了。
期待您的回复,谢谢。

设备:
MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 34
嗨,祖马,

嗨,祖马,

1.设备默认在睡眠模式下运行,为了调试应用程序,您必须禁用它,因为在睡眠模式下调试器是禁用的,请转到da14580_config并取消定义CFG_EXT_SLEEP。

2.为了让智能标签向智能手机发出警报,手机应用程序必须支持相应的服务,IAS服务,当前iOS应用程序不支持此功能。

3.当您从智能标签中删除绑定数据时,您也应该从手机中删除绑定数据,如果键入数据留在手机中,您的手机将要发送加密请求,标签将检查数据请求并查看内存,使数据保留,是空的,因为您已删除它并拒绝与手机的任何连接。

由于MT_dialog

祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
嗨,对话框,

嗨,对话框,
谢谢你患者回复。你的答案已经解决了上面提到的所有问题。现在我遇到了另一个问题:
不能每次对端设备上电后与我们的单板首次连接时更新连接间隔,对端设备上电后与设备连接时工作。
我很困惑。为什么第一次上电后连接参数不能生效?

我们发现Task_App的状态似乎未设置为app_param_upd,它原因app_update_params_rejected_func(param-> status)和app_update_params_complete_func()不被调用在案例eapc_update_param下的gapc_cmt_evt_handler中。
我想知道什么方法可以使连接间隔更新生效,在与对端设备第一次连接。谢谢你!
==========================================================================================================================================
/////为更新连接间隔添加一个定时器
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 ();

返回(KE_MSG_CONSUMED);

空白app_param_update_start(空白)

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;
req-> params.intv_min = 240;// N * 1.25ms
申请- > params.intv_max = 240;// N * 1.25ms
申请- >参数。延迟= 0;// Conn跳过事件
req-> params.time_out = 400;// n * 10ms
KE_MSG_SEND(REQ);

返回;

=================================================================================================================================

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 34
嗨,祖马,

嗨,祖马,

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

由于MT_dialog

祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
嗨mt_dialog,

嗨mt_dialog,
你的理解绝对正确。我用了另一部手机后这个问题就消失了,我想可能是和之前用的手机不兼容吧。
现在我想将按钮的功能更改如下:
1)按按钮短按下后,将听到音调,然后向Mobilephone发送通知;
2)长按按钮后将标签设置为深度睡眠模式,长按第二次将标签从深度睡眠中唤醒。

在da14580_config.h文件中,我定义了宏#CFG_EXTENDED_SLEEP,在函数button_press_cb()中,我注释了if(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
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 34
嗨,祖马,

嗨,祖马,

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

当使用深度睡眠特性时,在每次唤醒时,OTP被镜像到syram中,不支持使用深度睡眠模式和SPI flash。在开发模式下,系统永远不会真正进入深度睡眠状态,没有办法在不燃烧OTP的情况下进行测试,你必须燃烧OTP。

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

由于MT_dialog

祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
嗨,MT_dialog,

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

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

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

如果GPIO_GetPinStatus(GPIO_BUTTON_PORT, GPIO_BUTTON_PIN)

而(1)

systick_usec_units(false);
systick_wait(app_press_delay);

if(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(false);
systick_wait (APP_PWM_SWITCH_DELAY);
app_proxr_pwm_disable ();

休息;


其他的

syslog(“长按不检测,我将进入深度睡眠!”);
app_ble_ext_wakeup_on ();
app_set_deep_sleep ();
Syslog(“深睡眠失败!转到主循环!”);

祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
嗨,MT_dialog,

嗨,MT_dialog,
我注意到程序员应该停止所有的BLE活动,然后让设备转到睡眠自动在其他帖子中回复。这是否意味着无需在关于睡眠模式的主循环中做任何事情?我要做的是如下:
1.停止BLE活动(宣传,连接,清除BLE定时器,还有其他人吗?)当在工作状态期间长期按下时,让设备自动转到深睡眠状态。
2.唤醒后,如果按钮不长时间按钮,请停止动态活动,让设备再次睡眠深入睡眠,否则开始相应的BLE事件以定期启用设备工作。

我也怀疑API App_set_deep_sleep()和app_set_extendend_sleep()用于什么?我需要打电话给API吗?

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 34
嗨,祖马,

嗨,祖马,

是的,如果你停止所有BLE活动(所以BLE核心中没有BLE事件调度)580将自动切换到指定的睡眠模式,延长或深度睡眠。你不需要做任何具体的主循环,只是停止所有BLE活动(广告,断开-如果你是连接,计时器)和设备应该进入睡眠。当你要醒来时,应该没有任何正在进行的BLE活动,所以你可以启动一个BLE计时器来检查是否长按。然后,当计时器结束时,你可以检查你的pin,并开始发布广告或其他。当你调用app_set_deep_sleep()或app_set_extended_sleep()时,系统不会进入睡眠,它只是改变睡眠模式,当有机会节省电力时,它会进入相应的睡眠模式。如果您有正在进行的BLE活动,它将在BLE事件之间(在发布或连接间隔之间,或直到预定的计时器失效)以相应的模式进入睡眠。

由于MT_dialog

祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
嗨,MT_dialog,

嗨,MT_dialog,
感谢您的指南,我现在已经实现了目标。

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 34
嗨,祖马,

嗨,祖马,

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

最好的问候mt_dialog.

祖马
离线
最后看到:2个月1日前
加入:2016-01-13 09:35
嗨,MT_dialog。

嗨,MT_dialog。
SmartTAG现在遇到了一些新的问题,困扰了我一段时间。
一些Mobilebhones无法与我们的设备很好。我们删除配对过程,并解决了某个程度的问题。
2.警报有时不起作用,特别是当Mobilephone在第一次连接期间提醒我们的设备时。

问题:
1.除了配对之外,还有什么方法可以将我们的设备和手机结合起来呢?
我试图获得中央设备地址,但是如何在中央设备(例如iPhone)使用可解析私有地址时获得真实地址?
2.有什么原因可能导致上述第二个问题?

谢谢,祖马

MT_dialog
离线
最后看到:3个月2周前
工作人员
加入:2015-06-08 34
嗨,祖马,

嗨,祖马,

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

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

由于MT_dialog