大家好,
我遇到了DSP的特殊行为,即我似乎没有理解,希望其他人可以帮助。我在外部UC配置的DA14580上运行SPS Server软件(主UC是MSP430)。SPS客户端软件(原始SPS主机项目)在对话框USB加密狗上运行(HW流量控制被禁用,没有问题)。我想做的是将数据从MSP430发送到Windows终端超过SPS:
MSP430 - > DA14580(Devkit Pro,SPS Server) - > DA14580(Dongle,SPS客户端) - >终端(PC)
我注意到以下内容:在启用SPS服务并接收SPS_SERVER_ENABLE_CFM消息后,我必须在我开始发送数据之前等待大约200毫秒(使用user_send_ble_data())。如果我等待小于〜200毫秒,则终端上未显示已发送的数据。但是,我确实接收了sps_server_data_tx_cfm消息。
如果我等待超过200毫秒,一切都按预期工作:所有数据都显示在终端中。
有人可以解释在这里发生的事情吗?
谢谢!
设备:
您的SPS服务器可能会有几件事。
默认情况下,应用程序将执行扩展睡眠状态。这个200ms延迟可能是睡眠活动的副产品。
同样非常重要,是您的MSP430还必须实现UART硬件流量控制(RTS / CTS)。
您可能可以在没有流量控制的情况下工作,但您首先需要在SPS服务器设备上禁用扩展睡眠。
请参阅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标题中。
所以我认为睡眠不是这里的问题,除非我错过了其他东西。任何其他想法?
谢谢!
嗯....可能不得不下降和脏污来了解问题的位置。
应用程序将调用user_ble_pull以通过ble发送数据(通过user_send_ble_data)
然后将有一个通知/指示回调指示它是否成功或不(假设它处于连接状态)
如果不成功,它将重新发送user_ble_pull中的数据(init = false,成功= false)
所以你可以试着看看它是否正在进行重传。
查看的另一个区域是由user_ble_pull使用的tx_wait_rounds&tx_wait_level定义
在发起BLE传输之前,它将等待从UART到UART到达UART的某个字符到达UART之前。
毫无疑问,这将对从时间到达uart的时间来对响应的影响,这是它被送完的时间。
可能不得不要出一个逻辑分析仪并切换一个GPIO以获得更好的意义,当事情发生时。
祝你好运 !