你好,
我目前在我的DA14585开发套件上运行DSPS_device示例,并试图让14585将自己的数据推到缓冲区上发送给主机。对于主机,我用我的手机使用dsp android app连接到14585,我可以向14585发送数据,但不能从它接收数据。
我试图使用user_ble_push()函数和计时器将数据推送到缓冲区。该功能每5秒运行一次,测试数据显示在设备的com端口上,但不在我手机的DSPS应用程序接收的数据中。
我对代码进行的唯一更改是将Flow_Control_config定义为1(在user_periph_setup.h中)以及向user_sps_scheduler.cn(下面的代码)添加我的函数。
我没有正确地将数据推入缓冲区吗?
谢谢!
void test_function(){uint8_t msgs [] =“test_fn_buf_push \ r \ n”;user_ble_push(msgs,sizeof(msgs));//重新启动计时器计时器= app_easy_timer(timer_delay,test_function); // timer_delay 500}
设备:
嗨ahiggs,
在您的论坛线程的一点点中,您提到您希望从I2C推送数据。那是对的吗?DSP模拟串行电缆通信并将数据推送到UART。Flow_Control_config将UART流控制设置为软件流控制(XON / XOF)或硬件流量控制(RTS / CTS)。在扩展睡眠模式配置的情况下,需要硬件流控制才能唤醒设备。DSP永远不会永久无效地睡着,醒来才能为BLE事件服务,即使没有任何数据发送DA将唤醒以保持与主机的连接。当设备醒来时,它将将RTS线切换到低值,以表明它已经准备好了(设备将在每次连接间隔或发布间隔中醒来时将RTS线拉低)。同样要注意的是,当设备正在接收,当传输的数据达到内部FIFO阈值时,RTS将返回到高,通知对方它应该停止发送数据。当在BLE接口中有可用数据时,User_sps_server_data_rx_ind_handler()在外围模式下调用user_ble_push()函数。它将数据推在BLE_TO_PERIPH_BUFFER循环缓冲器中,并检查缓冲级别是否超过高水印以向对等设备发送流关闭信号。 Please refer to theUM-B-088:对话框串行端口配置文件的用户手册(DA14585)为更多的信息。
谢谢,PM_Dialog
感谢你的回复。
我们的项目目前设置的方式有一个ATTiny读取传感器,并将数据发送到DA上的uart, uart通过蓝牙将数据发送到DSPS_central设备,以登录到计算机上。
我想消除主题并让外围DA读取I2C传感器(已经在不同的项目中完成),然后通过蓝牙将数据发送到中央。因此,我尝试使用上面给出的test_function()将测试数据推入Periph_to_ble缓冲区。
嗨ahiggs,
user_ble_push()函数查找指针和长度类似。这将传递数据到FIFO缓冲区,并通过BLE发送数据。你能在调试模式下运行它并在user_ble_push()中添加一个断点吗?关于DSPS设备项目,你们还有其他的修改吗?请分享它们,我会尝试复制它。
谢谢,PM_Dialog
我在user_ble_push函数上放置了一个断点,并验证了它是否达到。从我从数据表中了解的情况下,如果按下数据以启动BLE传输,也需要运行user_ble_pull功能。我已将新代码包含在下面的test_function
我所做的唯一修改是test_function()和关联定时器在user_scheduler_init()以及改变到SW流量控制在user_peri_setup .h
谢谢你的帮助,我明天(在~16小时内)会有时间继续工作
嗨ahiggs,
谢谢你分享代码。我会试着在我这边复制。
谢谢,PM_Dialog
嗨ahiggs,
抱歉回复晚了。你提到你正在使用SW流量控制。请问您是否在DSPS固件中使用了扩展睡眠模式配置?如果是,您应该使用HW流量控制或删除休眠配置。
谢谢,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()函数仍未导致任何要发送到DSP应用程序的东西。
嗨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