你好,
我目前在DA14585开发套件上运行DSPS_DEVICE示例,并尝试将其自己的数据推向缓冲区以发送到主机。对于主机,我可以使用DSPS Android应用程序与我的手机连接到14585,并能够将数据发送到14585,但未收到它。
我试图使用user_ble_push()函数和计时器将数据推向缓冲区。该函数每5秒运行每5秒,测试数据显示在设备的COM端口上,但不在我手机DSP应用程序上的收到数据中。
我对代码所做的唯一更改是将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}
设备:
嗨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.
谢谢你的回复。
我们的项目目前设置的方式有一个关于传感器的Agyiny,并将数据发送到DA上的UART,通过蓝牙发送到DSPS_Central设备以登录计算机。
我想消除ATTiny,让外围DA读取I2C传感器(已经在一个不同的项目中完成了),然后通过蓝牙将数据发送到中央。首先,我尝试使用上面给出的test_function()将测试数据推入peripher_to_ble缓冲区。
嗨ahiggs,
user_ble_push()函数正在寻找一个指针和长度。这将通过数据传递给FIFO缓冲区并通过BLE发送数据。请在调试模式下运行它,并将一个断点添加到user_ble_push()中?您是否在DSP设备项目中完成了任何其他修改?请分享它们,我会尝试复制它。
谢谢,PM_DIALOG.
我在user_ble_push函数处放置了一个断点,并验证它已经到达。根据我从数据表的理解,user_ble_pull函数也需要在数据被推送后运行,以启动ble传输。下面我已经包含了test_function的新代码
我所做的唯一修改是user_scheduler_init()中的test_function()和关联的计时器,以及在user_periph_setup.h中更改为sw flow control
谢谢你的帮助,我明天会有时间(在〜16小时)继续工作
嗨ahiggs,
感谢分享代码。我会尝试在我身边复制。
谢谢,PM_DIALOG.
嗨ahiggs,
很抱歉,我答复晚了。您提到您使用的是SW流量控制。我可以问您是否在DSP固件中使用扩展睡眠模式配置?如果是,则应使用HW Flow Control或删除睡眠配置。
谢谢,PM_DIALOG.
延迟没问题。最后,我通过使用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应用程序。
嗨ahiggs,
如果延长睡眠模式配置(app_default_sleep_mode = Arch_ext_sleep_on),则需要硬件流控制才能唤醒设备。DSP永远不会永久无效地睡着,醒来才能为BLE事件服务,即使没有任何数据发送DA将唤醒以保持与主机的连接。当设备醒来时,它会将RTS线切换到较低,以表明它已经准备好了(当设备醒来时,在每个连接间隔或广告间隔中,它都会将RTS拉低)。也要注意,当设备接收时,当传输的数据达到内部FIFO阈值时,RTS将返回高到通知另一方,它应该停止发送数据。根据用户手册,注2页第7页,在扩展睡眠模式下部分支持软件流量控制。只能通过DA14580设备控制即可串行数据。在睡眠时间内将忽略任何传入的XON / XOFF。相反,在活动模式下完全支持软件流控制。在流关信号(0x19)的接收时,DA14580可以通过DA14580发送高达16个字节的量直到传输停止。不确定您的设置发生了什么,但我的建议是在睡眠模式下使用HW流量控制。
谢谢,PM_DIALOG.