I2C在BLE广告期间

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
22帖子/ 0新
最后发表
mapart
离线
最后一次露面:2个月3周前
加入:2018-11-30等等
I2C在BLE广告期间

你好,

我们希望定期读取i2c上的传感器,最好是在da14585醒来做BLE广告时。
要读取传感器,我们必须首先通过驱动引脚唤醒传感器,等待〜1ms,然后通过I2C读取8字节的数据。
此序列本身工作,但是当我尝试在回调user_app_main_loop_callbacks.app_on_system_powered或user_app_main_loop_callbacks.app_before_sleep中时,我会以某种方式卡住。

初始化从periph_init调用的i2c的序列:

void init_acc_i2c(void)
{
SetBits16 (CLK_PER_REG I2C_ENABLE 1);//启动I2C时钟
SetWord16 (I2C_ENABLE_REG 0 x0);//关闭I2C控制器
setword16(i2c_con_reg,0x0063);// 12c主站,7bit从地址,100kbit
SetWord16 (I2C_TAR_REG ACCELEROMETER_I2C_ADDR);

setword16(i2c_enable_reg,0x1);//启用I2C控制器
}

读取传感器数据的代码,我试图从上面描述的回调调用:

空白read_sensor_sequentially(空白)
{
INT I;
UINT8_T数据[8];
gpio_setactive(Accelerometer_Enable_port,Accelerometer_Enable_pin);
systick_wait (1000);
global_int_disable();
setword16(i2c_data_cmd_reg,0x00);
(我= 0;< 7;我+ +)
{
等待_while_i2c_fifo_is_full();
setword16(i2c_data_cmd_reg,0x0100);
}
global_int_restore();

(我= 0;< 7;我+ +)
{
WAIT_FOR_RECEIVED_BYTE ();//等待接收的数据
数据[i] =(0xff&getword16(i2c_data_cmd_reg));//获取收到的字节
}

gpio_setinactive(Accelerometer_Enable_port,Accelerometer_Enable_pin);
wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的
wait_until_no_master_actity();//等到没有主活动

}

是否有可能使用任何回调来实现这一点?

致以最亲切的问候
马丁

设备:
PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨mapart,

嗨mapart,

如果定期读取传感器,您可以使用app_easy_timer()API。每次计时器到期时,都会触发注册的回调,因此您需要注册读取传感器的回调。在每次DA1458每次读取传感器的情况下,您可以分享更多细节吗?该设备在Adverting或连接间隔之间进入睡眠模式。您是否配置了进入深度睡眠模式,因为它在SDK的BLE_APP_SLEEPMODE示例中展示了它?

谢谢,PM_DIALOG.

mapart
离线
最后一次露面:2个月3周前
加入:2018-11-30等等
你好,

你好,

提供一些上下文:
SDK版本,6.0.10.511。
我们已经将BLE_APP_SECURITY作为此项目中的基础,但配置为使用扩展睡眠模式。这使得设备在广告之间进入睡眠。
理想情况下,我们希望每次DA14585醒来做广告时都阅读这个传感器。
如果我们使用app_easy_timer(),设备会从睡眠中醒来,只是为了读取传感器,对吗?
对我们来说,最好是在设备已经醒着的时候读取传感器。

致以最亲切的问候
马丁

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨mapart,

嗨mapart,

通过使用app_easy_timer(),可以实现对传感器的周期性读取。你的设备最初是广告的,当它的广告传感器应该被应用程序定期读取,在一段时间后,你停止广告,当设备通过配置唤醒控制器醒来时,应用程序应该开始再次定期读取传感器。那是正确的吗?或者你想在每个广告间隔读取传感器?请让我知道并分享你到底想要完成什么。为了给你提供正确的指导方针,这将是非常有帮助的。

谢谢,PM_DIALOG.

mapart
离线
最后一次露面:2个月3周前
加入:2018-11-30等等
你好,

你好,
是的,我想在每一个广告间隔内读取传感器(687.5毫秒)。
我想我设法通过使用回调来实现:
user_app_main_loop_callbacks.app_on_system_powered

谢谢你的帮助。
最好的祝福
马丁

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨mapart,

嗨mapart,

很高兴你想到了你发出问题,谢谢你接受答案。

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,
一个类似的例子与另一个工作流-
传感器>> I2C >> DA14586。
RTC >> GPIOx / WKUP中断>> DA14586

BLE会按照SDK提供的样例应用进行广告的正常操作。亚博国际官网平台网址
从RTC升高中断时,BLE仍处于广告模式 -

记录时间戳;记录传感器数据;在闪存中存储传感器数据;

当BLE连接到peer -
禁用RTC中断;将Flash数据通过BLE传输到中央设备(通常是智能手机);

你能帮我插入代码和处理-吗
1. RTC中断处理(主动和睡眠状态)
2 .使用Dialog中的DSPS进行BLE传输。

谢谢

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

如果我能正确理解,你想唤醒设备时得到一个中断正确吗?因此,设备将处于睡眠模式,当你从RTC(请澄清什么是RTC)获得中断时,设备将唤醒并开始广告。如果您想遵循这个实现,我建议您看看SDK的ble_app_sleepmode示例。唯一的区别是,在本例中,DA14585/6从按下按钮生成的中断中唤醒。您是在使用DSPS应用程序代码还是已经开发了自定义应用程序?请检查DSPS应用程序代码中的user_send_ble_data()。另外,我建议您查看一下DSPS用户手册,并检查图6和图7。

https://support.dialog-seminile.com/system/files/resources/um-b-038%20da14580%20serial%20port%20service%20reference%20application_v2.0.pdf.

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
谢谢对话框,

谢谢对话框,

我想评估并张贴在这里。

我还提出了另一篇关于I2C控制器与传感器接口的文章。

似乎控制器在SDA线上发送了从设备地址后没有发送备用设备的寄存器地址。

我能得到帮助吗?

谢谢

霍尼韦尔

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,
rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
谢谢对话框,

谢谢对话框,
但是,当我想要GPIO IRQ时,没有睡眠模式。

我应该在与对等方连接之前处理中断;当Periph是广告?

谢谢

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

您可以在初始化(.app_on_init)或user_app_adv_start中启用IRQ。但请注意,您必须不使用任何睡眠模式以检测中断。如果您想拥有任何睡眠模式配置,则应使用唤醒控制器。

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
谢谢对话框,

谢谢对话框,

我将在激活和睡眠模式中使用WakeUp IRQ。它似乎比GPIO更好。

如果有任何错误的遭遇可能会通过GPIO使用Wakeup Irq,我想知道它

谢谢

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

我强烈建议查看一下SDK的ble_app_sleepmode示例,以便了解如何使用唤醒控制器。

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,
唤醒控制器使用时在Custom Message处理程序中使用按钮回调是最佳的useCase示例。

如果在实现过程中出现任何逻辑故障,我将返回。

谢谢

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

如果你想要任何一种睡眠模式,解决方案是使用唤醒控制器来检测中断和唤醒。请检查app_button_enable()函数,该函数在设备进入睡眠模式之前启用唤醒控制器。可以使用wkupct_enable_irq()函数选择可以检测唤醒中断的GPIO。您还可以配置极性和恢复时间以及。由于设备进入睡眠状态,你向唤醒控制器发送一个中断,注册到wkupct_register_callback()的回调函数将被触发。

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,

我使用Wakeup Controller回调注册注册了多个回调,如何从几个GPIO服务中的中断?

是在注册的GPIO中触发的最后一个吗?

谢谢

问候

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

你能澄清你所做的一切吗?如果我能够正确理解,您将固件配置为从不同的GPIO唤醒?如果是,则首先将唤醒您的芯片。

谢谢,PM_DIALOG.

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,
谢谢。

另外,如何通过唤醒控制器检查触发中断的GPIO管脚源?

SDK是否有任何寄存器或任何机制,允许我验证中断源?

谢谢

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

没有寄存器,指示中断发生的端口/引脚,您可以做的是检查脉冲的源,在设备唤醒后立即读取引脚的状态。因此,根据PIN状态,您必须确定将触发哪个回调函数。请尽量在论坛上尝试复制您的问题,您已创建类似的论坛线程,我已经回复了你:

https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/multiple-code-space-wkupenableirq

谢谢,PM_DIalog

rajucoolsuraj
离线
最后一次露面:10个月3天前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,

很抱歉,有重复。是的,谢谢你的支持。

此外,我还提出了另一个问题。

问候

PM_DIALOG.
离线
最后一次露面:3天1小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

没问题!让我们继续在您的其他论坛线程中进行对话。

谢谢,PM_DIALOG.