嗨对话框:
目前用DA14580 DSPS5开发了一款产品,遇到以下的问题,还请对话框看一下:
我们的设计架构是主机Cpu + DA14580
主机Cpu负责数据采集,处理,然后把数据通过uart送给DA14580(有流控RTS / CTS),
DA14580收到uart数据,通过祝福传输给手机。速率4.8 kb / s
1:需求方工程开启app_default_sleep_mode = ARCH_EXT_SLEEP_ON后,手机端收到的数据大概率丢包。设置ARCH_SLEEP_OFF后,
数据可以稳定, 但是连续传输30~40分钟后, 手机收不到数据.DA14580的RTS,不再接收主机的数据,连接还在,这时手机断开重新连接后,又可以传输数据,
请问这是哪里出现的问题?
2:需求方能不能控制固定几个女士连接一次,一次连接中固定发送几个包吗?在哪部分的代码中可以修改吗?
3: DA14580有概率出现,上电后,程序不能运行,十次中有1 ~ 2次的样子,问题可能出在哪里?
4:需求方工程中,哪里可以判断出,数据已经成功发送了,想加入一些日志,现在手机经常提示BLE没有数据返回,无法定位问题!
谢谢!
关键词:
设备:
1.需求方工程的应用场景就是传输相对大量的数据,而且默认是开启延长睡眠的。在有祝福传输活动的时候是不会睡眠的,如果没有大规模修改工程逻辑的话照理说睡眠是不会影响到数据传输的,不然释放的版本应该就不会默认开启睡眠。我这边暂时想不到什么原因,会查询一下看看有没有类似的问题再回复你。
2.可以修改连接间隔相对来说越短传输越快.user_config.h中可以调整,
静态const struct connection_param_configuration user_connection_param_conf = {
///连接间隔最小测量ble双插槽(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.intv_min = MS_TO_DOUBLESLOTS (12.5),
///连接间隔最大测量ble双插槽(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.intv_max = MS_TO_DOUBLESLOTS (12.5),
但是从设备的设置需要发送GAPC_PARAM_UPDATE_CMD来请求主设备接受这个间隔的设置,是否接受要看主设备。例如IOS设备只接受最低的间隔在30 ms左右,安卓15毫秒。
一次连接事件发送几个包也是根据连接间隔和对应设备决定的,无法由你这边调整。
3.可以尝试在初始化RX pin脚时拉低电平
4.user_sps_server_data_tx_cfm_handler()和
user_sps_client_data_tx_cfm_handler ()
这些函数处理SPS_SERVER_DATA_TX_CFM(外设角色)或
SPS_CLIENT_DATA_TX_CFM(中心角色)消息,用于确认数据是否传输
成功与否。它使用适当的参数调用user_ble_pull()(第6.5.3节)。
——摘自用户手册
1:数据不稳定的问题,我们又做了尝试,开启ext睡眠后,连续传输中很容易丢包,通过日志观察,14580这边并没有开启/关闭
RTS的状态,说明数据流没有中断。原来我们尝试过7.2 k / s的速度,偶尔丢包,后面数据压缩后,下降到4.8 k / s,反而容易丢包,
关闭ext睡眠后,数据传输稳定。
我在user_on_connection中加入user_sps_set_mode (ARCH_SLEEP_OFF);arch_disable_sleep ();
在user_on_disconnect中加入user_sps_set_mode (ARCH_EXT_SLEEP_ON); arch_set_extended_sleep ();
也是会有丢包!
2:我们目前修改的参数如下
静态const struct connection_param_configuration user_connection_param_conf = {
///连接间隔最小测量ble双插槽(1.25ms)
///使用宏MS_TO_DOUBLESLOTS从毫秒(ms)转换到双槽
.intv_min = MS_TO_DOUBLESLOTS(7.5), / /修改
.time_out = MS_TO_TIMERUNITS(1000) / /修改
但是我不知道如何发送GAPC_PARAM_UPDATE_CMD,你能给个样列吗?
我看到需求方的user_on_connection有app_easy_gap_param_update_start (connection_idx),是不是已经发送了GAPC_PARAM_UPDATE_CMD吗?
3:我们尝试在rst销上面接0.1 uf的电容,目前有改善,RX销低的方式,我们可以尝试!
4:我的理解是,14580发送一包数据以后, 需要远端给出响应消息, 14580才会继续发送下一包,理解对吗?
如果远端在规定链接监管时间内,没有给响应,这时14580会怎么样?链接断开吗?
谢谢你的答复!
你好:请对话框同仁帮忙查看我的账号为什么申请不了受限资源,我每次申请受限资源,点击同意提交后,能收到正常反馈(说24小时内能放开资源),但是每天来看仍然还是受限的资源。
而且我账号还发不了单独的新帖,只能来这里回复发声。
我也遇到了同样的问题,我使用的是DA14583,手机用的5.150.2的android应用程序,模块使用3.150.1.5的程序时,手机和串口收发数据都正常,但使用5.150.2的程序时出现以下问题(下载到RAM中运行):
1.工程未做任何修改时,手机发数据串口接收不到内容,手机接收数据不稳定,有时收不到有时乱码;
2.修改为# undef CFG_UART_HW_FLOW_CTRL,串口接收数据正常了,手机接收数据问题依旧;
3.修改为const静态sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF手机接收数据也正常也稳定了;
目前只能修改为const静态sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF来保证数据正确,但是功耗成问题!
对话框还没有给出解决思路
@dialog这个问题,有进展吗?
能分享一份DSPS5的代码么?实在找不到啊,thorory@hotmail.com
@lix723@dragonzhangcl
你们好,
从你们的描述中,可知问题大概率出现在流控上。
使能休眠模式之后,串口必须有流控。当串口是硬件流控时(# define CFG_UART_HW_FLOW_CTRL),需要你硬件连接上使用带有硬件流控的usb转串口线。或者使用我们的dev-kit-pro开发板(基本开发板不支持流控)