I2C在ble广告

⚠️
大家好. .谢谢你来参加论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,并包含在Dialog主网站中。所有的帖子和账户都已迁移。我们现在只接受新论坛的流量-请张贴任何新的线程//www.xmece.com/support.我们将在未来几天修复漏洞/优化搜索和标签。
22个帖子/ 0个新
最后发表
mapart
离线
最后看到:6个月1日前
加入:2018-11-30等等
I2C在ble广告

你好,

我们希望周期性地通过i2c读取传感器,最好是当da14585唤醒来做BLE广告时。
要读取传感器,我们必须首先通过驱动一个引脚高唤醒传感器,等待~1ms,然后通过i2c读取8个字节的数据。
这个序列自己工作,但是当我尝试在回调user_app_main_loop_callbacks中这样做时。App_on_system_powered或user_app_main_loop_callback。我被卡住了。

初始化i2c的顺序是由perid_init调用的:

空白init_acc_i2c(空白)

SetBits16(CLK_PER_REG, I2C_ENABLE, 1);// enable clock for I2C
SetWord16 (I2C_ENABLE_REG 0 x0);//关闭I2C控制器
SetWord16 (I2C_CON_REG 0 x0063);//12c主,7bit从地址,100kbit
SetWord16 (I2C_TAR_REG ACCELEROMETER_I2C_ADDR);

SetWord16 (I2C_ENABLE_REG 0 x1);//开启I2C控制器


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

空白read_sensor_sequentially(空白)

int我;
uint8_t数据[8];
GPIO_SetActive (ACCELEROMETER_ENABLE_PORT ACCELEROMETER_ENABLE_PIN);
systick_wait (1000);
GLOBAL_INT_DISABLE ();
SetWord16 (I2C_DATA_CMD_REG 0 x00);
(我= 0;< 7;我+ +)

WAIT_WHILE_I2C_FIFO_IS_FULL ();
SetWord16 (I2C_DATA_CMD_REG 0 x0100);

GLOBAL_INT_RESTORE ();

(我= 0;< 7;我+ +)

WAIT_FOR_RECEIVED_BYTE ();//等待接收的数据
data[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_ACTIVITY ();//直到没有主活动



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

致以最亲切的问候
马丁

设备:
PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨mapart,

嗨mapart,

如果要定期读取传感器,可以使用app_easy_timer() API。每当计时器过期,注册的回调将被触发,因此您需要注册您正在读取传感器的回调。如果每次DA1458读取传感器,你能分享更多细节吗?在广告或连接间隔之间,设备进入睡眠模式。您是否将其配置为进入深度睡眠模式(如SDK的ble_app_sleepmode示例中所演示的那样)?

谢谢,PM_Dialog

mapart
离线
最后看到:6个月1日前
加入:2018-11-30等等
你好,

你好,

提供一些背景信息:
SDK版本,6.0.10.511。
在这个项目中,我们使用ble_app_security作为基础,但是将其配置为使用扩展睡眠模式。这使得设备在广告之间进入睡眠状态。
理想情况下,我们希望在da14585每次醒来执行广告时读取该传感器。
如果我们使用app_easy_timer(),设备将从睡眠中唤醒,只是为了进行传感器读取,对吗?
对我们来说,最好是在设备已经清醒时进行传感器读取。

致以最亲切的问候
马丁

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨mapart,

嗨mapart,

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

谢谢,PM_Dialog

mapart
离线
最后看到:6个月1日前
加入:2018-11-30等等
你好,

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

谢谢你的帮助。
致以最亲切的问候
马丁

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨mapart,

嗨mapart,

很高兴你找到了自己的问题,谢谢你接受这个答案。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
你好,对话框,

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

BLE将按照SDK提供的样例应用程序进行正常的广告操作。亚博国际官网平台网址
当从RTC引发中断并且BLE仍处于广告模式时-

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

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

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

谢谢

PM_Dialog
离线
最后看到:2个月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-semiconductor.com/system/files/resources/UM-B-038%20DA14580%20Serial%20Port%20Service%20reference%20application_v2.0.pdf

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
由于对话框中,

由于对话框中,

我想评估一下,然后贴在这里。

我还提出了另一个关于I2C控制器与传感器接口的帖子。

控制器在SDA线上传输从设备地址后,似乎没有发送从属设备的寄存器地址。

能帮个忙吗?

谢谢

霍尼韦尔

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,
rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
由于对话框中,

由于对话框中,
但是,当我想在没有睡眠模式的情况下启用GPIO IRQ时。

在与peer连接之前,什么时候应该处理中断;周边什么时候做广告?

谢谢

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

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

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
由于对话框中,

由于对话框中,

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

如果通过GPIO使用WakeUp IRQ可能会导致任何错误的遭遇,我想知道

谢谢

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

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

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,
在按钮回调的自定义消息处理程序中连接时使用唤醒控制器是最好的用例示例。

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

谢谢

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

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

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,

我已经注册了多个回调使用唤醒控制器回调注册,如何从几个GPIO的中断服务?

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

谢谢

问候

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

你能说明一下你做了什么吗?如果我能正确理解,你配置了固件从不同的gpio唤醒?如果是,第一个开关将唤醒你的芯片。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,
谢谢。

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

SDK中是否存在允许我验证中断源的寄存器或机制?

谢谢

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

没有寄存器可以指示中断发生的端口/引脚,为了检查脉冲的源,您可以在设备被唤醒后立即读取引脚的状态。因此,根据引脚状态,您将不得不决定哪个回调函数将被触发。请尽量不要在论坛上重复你的问题,你已经创建了一个类似的论坛线程,我已经在那里回复了你:

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

谢谢,PM_DIalog

rajucoolsuraj
离线
最后看到:1年4个月前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,

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

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

问候

PM_Dialog
离线
最后看到:2个月1周前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨rajucoolsuraj,

没问题!让我们在你的另一个论坛继续对话。

谢谢,PM_Dialog