你好,
我目前正在DA14585开发包上运行DSPS\u设备示例,并试图让14585将自己的数据推送到缓冲区以发送到主机。对于主机,我使用DSPS android应用程序通过手机连接到14585,可以向14585发送数据,但不能从中接收数据。
我正在尝试使用user\u ble\u 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)更多信息。
谢谢,下午好
感谢你的回复。
我们项目目前的设置方式是读取传感器并将数据发送到DA上的uart,后者通过蓝牙将数据发送到DSPS\ U中央设备以登录计算机。
我想消除主题并让外围DA读取I2C传感器(已经在不同的项目中完成),然后通过蓝牙将数据发送到中央。因此,我尝试使用上面给出的test_function()将测试数据推入Periph_to_ble缓冲区。
嗨ahiggs,
函数的作用是寻找指针和长度。这会将数据传递到FIFO缓冲区,并通过BLE发送数据。您能在调试模式下运行它并在用户\u ble \u push()中添加断点吗?你在DSPS设备项目中做过其他修改吗?请分享它们,我会尝试复制它。
谢谢,下午好
我在user_ble_push函数上放置了一个断点,并验证了它是否达到。从我从数据表中了解的情况下,如果按下数据以启动BLE传输,也需要运行user_ble_pull功能。我已将新代码包含在下面的test_function
我所做的唯一修改是在user\u scheduler\u init()中的test\u function()和相关计时器,以及在user\u periph\u setup.h中更改为SW flow control
谢谢你的帮助,我明天(16小时后)有时间继续工作
嗨ahiggs,
谢谢分享代码。我会尝试在我身边复制。
谢谢,下午好
嗨ahiggs,
很抱歉我反应太晚了。您提到您正在使用软件流控制。我可以问一下您是否在DSPS固件中使用扩展睡眠模式配置吗?如果是,您应该使用硬件流控制或删除睡眠配置。
谢谢,下午好
延迟没问题。我ended up finding a workaround by using the user_send_ble_data() command.
我正在使用SW流量控制。在''user_config.h'下我有应用程序\默认\睡眠\模式调成ARCH_EXT_SLEEP_ON.,但你建议把这个设置为Arch_sleep_off.?
我显然没有烧掉OTP,但是最后的申请将要有OTP烧焦。
编辑:
我刚刚尝试改变睡眠设置,但函数user_ble_push()函数仍未导致任何要发送到DSP应用程序的东西。
嗨ahiggs,
如果是扩展睡眠模式配置(app\u default\u sleep\u mode=ARCH\u EXT\u sleep\u ON),则需要硬件流控制才能唤醒设备。DSP永远不会永久处于非活动状态—它会进入休眠状态并唤醒,以便为BLE事件提供服务,即使没有任何数据可发送,da也会唤醒以保持与主机的连接处于活动状态。当设备唤醒时,它会将RTS线路切换到low,以表明它已准备就绪(无论何时唤醒,在每个连接间隔或广告间隔内,设备都会将RTS拉到low)。还要注意的是,当设备正在接收时,当发送的数据达到内部FIFO阈值时,RTS将返回高位,通知另一方它应该停止发送数据。根据用户手册第7页的注释2,软件流控制在扩展睡眠模式下部分受支持。DA14580设备只能控制输入的串行数据。任何传入的XON/XOFF都将在睡眠时间被忽略。相反,在活动模式下完全支持软件流控制。此外,在接收到流出信号(0x19)时,DA14580最多可以发送16个字节,直到传输停止。不知道在你的设置中发生了什么,但我的建议是在睡眠模式下使用硬件流控制。
谢谢,下午好