你好,
我遇到了一个特殊的DSPS行为,我似乎不能理解,希望其他人可以帮助。我在外部uC配置的DA14580上运行SPS服务器软件(主uC是MSP430)。SPS客户端软件(原来的SPS主机项目)运行在一个Dialog USB加密狗上(HW流控制被禁用,没有问题)。我想做的是将数据从MSP430发送到Windows终端通过SPS:
MSP430 -> DA14580 (DevKit Pro, SPS服务器)-> DA14580(加密狗,SPS客户端)->终端(PC)
我注意到以下几点:在启用SPS服务和接收SPS_SERVER_ENABLE_CFM消息之后,我必须等待大约200毫秒才能开始发送数据(使用user_send_ble_data())。如果等待时间小于~ 200ms,发送的数据在终端上没有显示。但是,我确实收到了SPS_SERVER_DATA_TX_CFM消息。
如果等待时间超过~ 200ms,一切正常:所有数据都显示在终端中。
有人能解释一下这是怎么回事吗?
谢谢!
设备:
在您的SPS服务器上可能有一些东西在发挥作用。
默认情况下,应用程序会做一个延长睡眠时间。这200毫秒的延迟可能是睡眠活动的副产品。
非常重要的是,你的MSP430还必须实现UART硬件流控制(RTS/CTS)。
您可能可以在没有流控制的情况下工作,但首先需要禁用SPS Server设备上的延长睡眠。
看到user_config.h…
....const static sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF;
谢谢。
嗨MSun,
谢谢你的回复,并提出了睡眠问题。事实上,我已经停用了流量控制,因为我认为我的应用程序没有必要使用它(连续的低吞吐量数据流)。(另外,我不能使用HW流量控制,因为USB加密狗没有物理RTS/CTS线。)
正如你已经提到的,在这种情况下,睡眠需要被禁用。我已经通过设置禁用了睡眠
const static sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF;
在user_config.h和
# undef CFG_MEM_MAP_EXT_SLEEP
# undef CFG_MEM_MAP_DEEP_SLEEP
在da1458x_config_basic.h报头中。
所以我认为睡眠不是问题所在,除非我漏掉了其他的东西。任何其他想法?
谢谢!
嗯…可能得搞清楚问题出在哪里。
App将调用user_ble_pull通过BLE发送数据(通过user_send_ble_data)
然后会有一个通知/指示回调来指示它是否成功(假设它处于连接状态)
如果没有成功,它将重新传输user_ble_pull (init = false, success = false)中的数据。
所以你可以试着看看它是否正在进行重传。
另一个要研究的领域是定义由user_ble_pull使用的TX_WAIT_ROUNDS和TX_WAIT_LEVEL
在发送BLE (TX_WAIT_LEVEL)之前,它将等待一定数量的字符从UART到达,或者在初始化BLE传输之前对user_ble_pull (TX_WAIT_ROUNDS)进行多次调用。
毫无疑问,这将影响数据从到达UART到通过BLE发送的响应性。
可能必须拿出一个逻辑分析器并切换GPIO以更好地了解事情发生的时间。
好运!