I2C在BLE广告期间

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
22帖子/ 0新
最后一篇
Mapart.
离线
最后一次露面:2个月3周前
加入:2018-11-30 15:58
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,0x0);//禁用I2C控制器
setword16(i2c_con_reg,0x0063);// 12c主站,7bit从地址,100kbit
SetWord16 (I2C_TAR_REG ACCELEROMETER_I2C_ADDR);

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

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

void read_sensor_sequentient(void)
{
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);
for(i = 0; i <7; i ++)
{
等待_while_i2c_fifo_is_full();
setword16(i2c_data_cmd_reg,0x0100);
}
global_int_restore();

for(i = 0; i <7; i ++)
{
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天12分钟前
职员
加入: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 15:58
你好,

你好,

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

最好的祝福
马丁

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入:2018-02-08 11:03
嗨Mapart,

嗨Mapart,

通过使用App_easy_timer()的使用,您可以实现传感器的定期读取。Your device is initially advertising and while it’s adverting the sensor should be read periodically by the application, After an amount of time, you stop adverting and when the device wakes up by configuring the wake up controller, the application should start reading again the sensor periodically. Is that correct? Or you would like to read the sensor in every advertising interval? Please let me know and share what you exactly want to accomplish. It would be very helpful in order to provide you the correct guidelines.

谢谢,PM_DIALOG.

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

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

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

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入:2018-02-08 11:03
嗨Mapart,

嗨Mapart,

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

谢谢,PM_DIALOG.

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

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

根据具有SDK的示例应用程序,BLE的正常操作将进行广告。亚博国际官网平台网址
从RTC升高中断时,BLE仍处于广告模式 -

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

当BLE连接到对等体时 -
禁用RTC中断;将闪光数据传输到中央设备(USUSIVALLY智能手机);

你能帮我插入代码和处理-吗
1. RTC中断处理(主动和睡眠状态)
2。使用dsps从对话框中传输。

谢谢

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

如果我能够正确理解,您想在获得中断正确时唤醒设备?因此,设备将处于睡眠模式,并且当您从RTC获取中断时(请澄清RTC是什么)设备将唤醒并启动广告。如果您想遵循此实现,我建议您查看SDK的BLE_APP_SLEEPMODE示例。唯一的区别是,在此示例中,DA14585 / 6从由按钮按下产生的中断唤醒。您是否使用使用DSPS应用程序代码,或者您已开发自定义应用程序?请从DSPS应用程序代码检查User_send_ble_data()。此外,我建议您查看DSP用户手册并检查图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线上传输从设备地址,控制器似乎不会在SDA设备地址发送ALVE设备的寄存器地址。

我能得到帮助吗?

谢谢

霍尼韦尔

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

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

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

谢谢

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入: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
谢谢对话框,

谢谢对话框,

我将利用唤醒IRQ,为主动和睡眠模式。GPIO似乎更好。

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

谢谢

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入: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天12分钟前
职员
加入: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天12分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

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

谢谢,PM_DIALOG.

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

你好对话框,
谢谢。

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

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

谢谢

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

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

https://support.dialog-semicondiondiondiondum/forums/post/dialog-smartbond-bluetooth-low-energy -%e2%80%93-software/multpreipre-code-space-wkupenableirq.

谢谢,PM_DIALOG.

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

你好对话框,

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

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

问候

PM_DIALOG.
离线
最后一次露面:3天12分钟前
职员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

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

谢谢,PM_DIALOG.