DSPS从I2C推送数据

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
9个员额/ 0个新员额
最后发表
ahiggs
离线
最后看到:8个月2天前
加入:2019-12-17 07:10
DSPS从I2C推送数据

你好,

我目前在我的DA14585 dev工具包上运行DSPS_device示例,并试图让14585将它自己的数据推送到缓冲区以发送到主机。对于主机,我用我的手机使用DSPS android应用程序连接到14585,我能够发送数据到14585,但不能从它接收。

我尝试使用user_ble_push()函数和定时器将数据推入缓冲区。该功能每5秒运行一次,测试数据显示在设备的com端口上,但不在我手机的DSPS应用程序接收的数据中。

我对代码所做的唯一更改是将FLOW_CONTROL_CONFIG定义为1(在user_peripher_setup .h中),并将我的函数添加到user_sps_scheduler.c中(代码如下)。

我没有正确地将数据推入缓冲区吗?

谢谢!

Void test_function(){uint8_t msgs[] = "test_fn_buf_push \r\n";user_ble_push(公司,sizeof(公司);//重启定时器定时器= app_easy_timer(TIMER_DELAY,test_function);// TIMER_DELAY 500}

设备:
PM_Dialog
离线
最后看到:1天1小时前
工作人员
加入:2018-02-08 11:03
嗨ahiggs,

嗨ahiggs,

在您的论坛帖子的标题中,您提到您想要从I2C推送数据。那是正确的吗?DSPS模拟串行电缆通信和推数据到/从UART。FLOW_CONTROL_CONFIG将UART流控制设置为软件流控制(XON/XOF)或硬件流控制(RTS/CTS)。在扩展睡眠模式配置的情况下,为了唤醒设备,需要硬件流控制。DSPS从来都不是永久不活动的,它会进入睡眠状态,然后醒来以服务于ble事件,即使没有任何数据要发送,da也会唤醒以保持与主机的连接处于活动状态。当设备醒来时,它会将RTS线切换到较低,以表明它已经准备好了(当设备醒来时,在每个连接间隔或广告间隔中,它都会将RTS拉低)。也要注意,当设备接收时,当传输的数据达到内部FIFO阈值时,RTS将返回高到通知另一方,它应该停止发送数据。当BLE接口中有可用数据时,user_sps_server_data_rx_ind_handler()以外围模式调用user_ble_push()函数。它将数据推送到ble_to_peripher_buffer循环缓冲区中,并检查缓冲区级别是否高于高水位,从而向对端设备发送流关闭信号。 Please refer to theUM-B-088:对话串口配置文件用户手册(DA14585)为更多的信息。

谢谢,PM_Dialog

ahiggs
离线
最后看到:8个月2天前
加入:2019-12-17 07:10
谢谢你的回复。

谢谢你的回复。

我们的项目目前设置的方式是有一个ATTiny读取传感器并将数据发送到DA上的uart,后者通过蓝牙将数据发送到DSPS_central设备,以在计算机上登录。

我想消除ATTiny,让外围DA读取I2C传感器(已经在一个不同的项目中完成了),然后通过蓝牙将数据发送到中央。首先,我尝试使用上面给出的test_function()将测试数据推入peripher_to_ble缓冲区。

PM_Dialog
离线
最后看到:1天1小时前
工作人员
加入:2018-02-08 11:03
嗨ahiggs,

嗨ahiggs,

user_ble_push()函数也同样在寻找指针和长度。这将传递数据到FIFO缓冲区,并通过BLE发送数据。你能在调试模式下运行它并在user_ble_push()中添加一个断点吗?你对DSPS设备项目做过其他修改吗?请分享它们,我会试着复制它。

谢谢,PM_Dialog

ahiggs
离线
最后看到:8个月2天前
加入:2019-12-17 07:10
我在

我在user_ble_push函数处放置了一个断点,并验证它已经到达。根据我从数据表的理解,user_ble_pull函数也需要在数据被推送后运行,以启动ble传输。下面我已经包含了test_function的新代码

我所做的唯一修改是user_scheduler_init()中的test_function()和相关计时器,以及user_peripher_setup .h中的SW流控制

谢谢你的帮助,我明天有时间(~16小时)继续工作

空白test_function () {user_ble_push(短信息,sizeof(公司));user_ble_pull(真的,NULL);计时器= app_easy_timer (TIMER_DELAY test_function);}

PM_Dialog
离线
最后看到:1天1小时前
工作人员
加入:2018-02-08 11:03
嗨ahiggs,

嗨ahiggs,

谢谢分享代码。我会努力在我的身边复制。

谢谢,PM_Dialog

PM_Dialog
离线
最后看到:1天1小时前
工作人员
加入:2018-02-08 11:03
嗨ahiggs,

嗨ahiggs,

很抱歉我回复晚了。您提到您正在使用SW流量控制。请问您是否在DSPS固件中使用扩展睡眠模式配置?如果是,您应该使用HW流量控制或删除休眠配置。

谢谢,PM_Dialog

ahiggs
离线
最后看到:8个月2天前
加入:2019-12-17 07:10
延迟没问题。我

延迟没问题。最后,我通过使用user_send_ble_data()命令找到了一个解决方法。

我使用SW流量控制。在“user_config.h”下面我有app_default_sleep_mode设置为arch_ext_sleep_on,但您建议将其设置为arch_sleep_off

我显然没有烧毁OTP,而是最后的应用程序OTP烧毁。

编辑:

我只是试图改变睡眠设置,但函数user_ble_push()函数仍然没有导致任何东西被发送到DSPS应用程序。

PM_Dialog
离线
最后看到:1天1小时前
工作人员
加入:2018-02-08 11:03
嗨ahiggs,

嗨ahiggs,

在扩展睡眠模式配置(app_default_sleep_mode = ARCH_EXT_SLEEP_ON)的情况下,为了唤醒设备,需要硬件流控制。DSPS从来都不是永久不活动的,它会进入睡眠状态,然后唤醒以服务BLE事件,即使没有任何数据要发送,da也会唤醒以保持与主机的连接处于活动状态。当设备醒来时,它会将RTS线切换到较低,以表明它已经准备好了(当设备醒来时,在每个连接间隔或广告间隔中,它都会将RTS拉低)。也要注意,当设备接收时,当传输的数据达到内部FIFO阈值时,RTS将返回高到通知另一方,它应该停止发送数据。根据用户手册第7页的注释2,软件流控制部分支持扩展睡眠模式。DA14580设备只能控制传入的串行数据。任何传入的XON/XOFF将在睡眠时间被忽略。相反,在Active模式下完全支持软件流控制。同样,在接收到流关闭信号(0x19)后,DA14580可以发送最多16字节的数据,直到传输停止。不确定在你的设置中发生了什么,但我的建议是在睡眠模式中使用HW流量控制。

谢谢,PM_Dialog