嗨,对话框!
我打算使用您的参考源代码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,
我按了3s以上键,听到了声音,但绑定数据似乎没有被删除,iphone无法再次连接smartTAG。
好几天我都被这些问题搞糊涂了,但是离批量生产已经没有多少时间了。
期待您的回复,谢谢。
设备:
嗨,祖马,
1.设备默认在休眠模式下运行,为了调试应用程序,您必须禁用它,因为在休眠模式下调试器是禁用的,请转到da14580_config并取消定义CFG_EXT_SLEEP。
2.为了让智能标签向智能手机发出警报,手机应用程序必须支持相应的服务,IAS服务,当前的iOS应用程序不支持这个功能。
3.当您从智能标签中删除绑定数据时,您也应该从手机中删除绑定数据,如果键入数据留在手机中,您的手机将要发送加密请求,标签将检查数据请求并查看内存,使数据保留,是空的,因为您已删除它并拒绝与手机的任何连接。
由于MT_dialog
嗨,对话框,
谢谢你患者回复。你的答案已经解决了上面提到的所有问题。现在我遇到了另一个问题:
每次对端设备在通电后第一次连接到我们的板时,连接间隔不能更新,当对端设备再次连接到我们的板时,连接间隔生效。
我对此感到困惑。为什么连接参数无法在通电后生效第一个连接?
我们发现Task_App的状态似乎未设置为app_param_upd,它原因app_update_params_rejected_func(param-> status)和app_update_params_complete_func()不被调用在案例eapc_update_param下的gapc_cmt_evt_handler中。
我想知道可以在与对等设备的FiRT连接期间使连接间隔更新的方法。谢谢!
==========================================================================================================================================.
/////添加更新连接时间间隔的定时器
void app_connection_func(struct gapc_connection_req_ind const * param)
{
app_timer_set(app_update_param_timer,task_app,300);// 3S定时器添加更新连接间隔
.......
}
////////添加更新连接间隔的处理程序
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();
}
void app_param_update_func(void)
{
struct gapc_param_update_cmd * req = KE_MSG_ALLOC(gapc_param_update_cmd, TASK_GAPC, TASK_APP, gapc_param_update_cmd);
req->操作= gapc_update_params;
req-> params.intv_min = 240;// n * 1.25ms
req-> params.intv_max = 240;// n * 1.25ms
申请- >参数。延迟= 0;// Conn事件跳过
req-> params.time_out = 400;// n * 10ms
KE_MSG_SEND(REQ);
返回;
}
=================================================================================================================================.
嗨,祖马,
我不太了解在第一次连接期间未更新新参数的事实。您的意思是断开连接后,如果再次连接新参数,则连接间隔是您在参数更新中或在第一个连接事件中设置的连接间隔您没有看到您已设置的参数?此外,对于使用KE_STATE_SET发出参数更新请求(TASK_APP,APP_PARAM_UPD)时,还必须将其进行了初步设置它,以便将其初醒地设置它;连接参数与客户端设备协商,对等设备只能发送关于优选的连接参数的指示,如果它会接受它,则取决于客户端。如果检查SDK5 BLE_APP_PERITIALLAL示例,则可以找到如何正确发出PARAM更新请求。
由于MT_dialog
嗨mt_dialog,
你理解绝对是正确的。在使用另一个手机后,问题消失了,我想也许它与早期使用的Mobilephone不兼容。
现在我想改变按钮的功能如下:
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()后检测长按。
但是,我们发现,当将程序刻录到闪存时,长按按钮后,程序似乎突破。当程序从SPI Flash引导时,我也发现您在其他帖子中的回复,我们应该在其他帖子中调用app_set_extendend_sleep()。我有一些疑问:
1.为什么按压按钮长时间后程序崩溃了?是设置深度睡眠模式后很快触发唤醒IRQ的原因吗?
2.除了烧制OTP外,还有其他方法来测试从深度睡眠代码中唤醒吗?
3.你能给我一些关于在按钮长按下后从深睡眠模式实现唤醒的建议吗?
嗨,祖马,
如果我的理解是正确的,你希望设备进入深度睡眠模式(不是永久睡眠,只需更改睡眠模式),当按钮长期按下时,执行此操作时设备的状态是什么(已连接,设备是广告?)。此外,当触发长按钮时,调用唤醒消息并唤醒的处理程序功能设置计时器。计时器的处理程序在计时器经过并在计时器处理程序中执行时,将设备的睡眠模式更改为深度睡眠。如果这是这种情况,那么这应该是工作。在执行唤醒IRQ之后,您无法调用睡眠模式的更改。
当使用深度睡眠特性时,OTP在每次唤醒时都被镜像到系统ram中,使用深度睡眠模式和SPI flash是不支持的。当在开发模式下,系统实际上从来没有陷入深度睡眠,没有办法实际测试它而不燃烧OTP,你必须燃烧OTP。
就从深睡眠中醒来时,智能标签参考设计是深度睡眠模式,App_button_press_cb功能从深睡眠中唤醒。我想如果你想用长按你可以设置一个软件计时器,并且在指定的处理程序中将检查按钮的状态,就像智能标签中的长按一样擦除存储器。
由于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(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(“深睡眠失败!转到主循环!”);
}
嗨,MT_dialog,
我注意到程序员应该停止所有的BLE活动,然后让设备转到睡眠自动在其他帖子中回复。这是否意味着无需在关于睡眠模式的主循环中做任何事情?我要做的是如下:
1.停止BLE活动(宣传,连接,清除BLE定时器,还有其他人吗?)当在工作状态期间长期按下时,让设备自动转到深睡眠状态。
2.唤醒后,如果按钮不长时间按钮,请停止动态活动,让设备再次睡眠深入睡眠,否则开始相应的BLE事件以定期启用设备工作。
我也怀疑API App_set_deep_sleep()和app_set_extendend_sleep()用于什么?我需要打电话给API吗?
嗨,祖马,
是的,如果您停止所有BLE活动(因此BLE核心中没有BLE计划事件),580将自动切换到指定的睡眠模式,扩展或深度睡眠。你不必在主循环中做任何具体的事情,只要停止所有的BLE活动(广告,断开连接-以防你连接,定时器),设备就会进入睡眠状态。当你要醒来时,不应该有任何正在进行的BLE活动,所以你可以启动一个BLE计时器,以检查是否有一个长按。当计时器过去时,你可以检查你的密码,然后开始发布广告。当你调用app_set_deep_sleep()或app_set_extended_sleep()时,系统不会进入睡眠,它只是改变了睡眠模式,当找到节省电力的机会时,它会进入相应的睡眠模式。如果您有正在进行的BLE活动,它将在BLE事件之间(在发布或连接间隔之间或直到一个预定的计时器结束)的对应模式中进入睡眠状态。
由于MT_dialog
嗨,MT_dialog,
感谢您的指南,我现在已经实现了目标。
嗨,祖马,
很高兴知道,谢谢你的表明。
最好的问候mt_dialog.
嗨,MT_dialog。
我现在在SmartTAG上遇到了一些新的问题,困扰了我一段时间。
一些Mobilebhones无法与我们的设备很好。我们删除配对过程,并解决了某个程度的问题。
2.警报有时不起作用,特别是当Mobilephone在第一次连接期间提醒我们的设备时。
问题:
1.除了配对,还有没有其他方法可以将我们的设备与手机绑定?
我试图获得中央设备地址,但是如何在中央设备(例如iPhone)使用可解析私有地址时获得真实地址?
2.有什么原因可能导致上述第二个问题?
谢谢,祖马
嗨,祖马,
1.键合程序基于两个设备的配对,以便交换将Ecrypt的键等,没有其他过程以粘合两个设备。大多数Android手机都不使用他们的公共地址,但它们为外界使用随机地址,因此您无法这种方式。
我们没有经历过的东西,导致这种行为有什么条件?我的意思是你有一个坚实的连接,你触发了搬运警报服务,会发生什么?还经常和以下事件发生的频率且何种行程?
由于MT_dialog