嗨。
我尝试在DA14580上使用项目DSPS版本5.150.2
在我的项目:
1)禁用睡眠(ARCH_SLEEP_OFF)。
2)流量控制也被禁用:
) # undef CFG_UART_HW_FLOW_CTRL
b) # undef CFG_UART_SW_FLOW_CTRL
BLE设备(外设)连接到某些外部处理器的UART接口。初始化后,外部处理器立即开始向BLE UART发送信息。初始化后,BLE立即没有建立连接。
我得到ASSERT_WARNING函数:
“user_periph_push”
线:
"if (user_buffer_write_check(& perix_to_ble_buffer, wrdata, RX_CALLBACK_SIZE) != RX_CALLBACK_SIZE)"
我该如何解决这个麻烦?
(缓冲区中的数据没有任何重要性,部分数据可能会丢失)
谢谢。
关键词:
设备:
嗨Vadym,
流控制不仅对睡眠是必要的,如果你删除它,并不能保证你的系统中不会有任何数据丢失。您可以尝试删除ASSERT_WARNING和检查是否写入缓冲区,但DSPS没有测试这种使用(没有流控制)。最可能的情况是旧数据将被新数据覆盖,您将丢失字节。
由于MT_dialog
我删除了ASSERT_WARNING。
我从“uart_sps_rcv_data_avail_isr”找到“HardFault_HandlerC”。
现在我试图禁用DEVELOPMENT_DEBUG,但我没有得到WDT复位。
我如何禁用UART接收数据,而我还没有在连接状态?
嗨Vadym,
作为我已经提到的需求方不检测这种用法,另一件事,你可以试着删除user_sceduler_init从user_on_init()()函数并移除uart_sps_init periph_init()的()和删除功能的调用都user_on_connection()函数,新的user_on_connection()函数应该是这样的:
Void user_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
default_app_on_connection (connection_idx参数);
user_gattc_exc_mtu_cmd (connection_idx);
app_easy_gap_param_update_start (connection_idx);
arch_printf(“设备连接\ r \ n”);
uart_sps_init (UART_SPS_BAUDRATE 3);
user_scheduler_init ();
}
当然,您应该分别在连接和断开连接中设置和重置UART,因为如果没有任何睡眠,UART和中断将保持配置。
由于MT_dialog
嗨。
谢谢你的回答。这是有帮助的,但只是部分。
当中心远离外围设备,连接变弱时,仍然会导致缓冲区溢出。
注。
对于我来说,不需要将“uart_sps_init”插入到“user_on_connection”中。函数在“user_scheduler_init”中。
嗨Vadym,
如果你没有流量控制,我想这是预期的。
由于MT_dialog
嗨,所有。
我对同样的问题感兴趣,并按照以下方法解决。
1.条件:
1)没有流量控制,只使用RX, TX信号
2)总是醒着
2.更改代码"user_sps_device.c"
enum arch_main_loop_callback_ret user_on_system_powered(空白)
{
user_sps_sleep_restore ();
user_ble_pull(真的,NULL);
返回KEEP_POWERED;// <------------------- 返回GOTO_SLEEP;
}
谢谢。
我在同样的生产线上工作,我只需要Tx/RX。你做了所有的改变,从剩下的帖子加上你做的编辑。你能告诉我更多吗?
谢谢,
这是给narcontrol的,我和你的思路是一样的。你能再发一些信息吗?你做了上面所有的步骤,然后编辑你提到的。
谢谢,
这个问题解决了吗?我也担心这个。请把你的信息分享给任何解决了这个问题的人。
嗨,罗密欧,
你能澄清一下你的问题吗?如果我能正确理解的话,您想使用没有流量控制的dsp吗?如果你的意思是,当没有流量控制时,你将无法在睡眠状态下操作DSPS。如果您希望没有流控制,则应该以活动模式配置运行DSPS。否则,如果你只有RX/TX引脚和睡眠模式配置,你会有数据丢失。请注意,DSPS项目被设计为在默认情况下使用软件和硬件流量控制。如果你禁用了睡眠模式,并从你的项目中删除了软件流控制功能,我不能100%确定不会有丢失的数据。
谢谢,PM_Dialog
嗨,PM_dialog
正如瓦迪姆所说,我也有同样的处境。
1)禁用睡眠(ARCH_SLEEP_OFF)。
2)流量控制也被禁用:
) # undef CFG_UART_HW_FLOW_CTRL
b) # undef CFG_UART_SW_FLOW_CTRL
连接BLE后,RX数据溢出BLE。
我不在乎是否会丢失数据,但我不想让BLE从上面掉下来。
我试过了,但没用。我不想要睡眠模式。
请具体告诉我如何丢弃RX溢出数据。
我不知道该把它扔哪。
请给我一个具体的代码。
请帮我别把BLE打倒。
谢谢,
嗨,罗密欧,
你能试试这个然后告诉我吗?
1)没有流量控制,只使用RX, TX信号
2)总是醒着
2.更改代码"user_sps_device.c"
enum arch_main_loop_callback_ret user_on_system_powered(空白)
{
user_sps_sleep_restore ();
user_ble_pull(真的,NULL);
返回KEEP_POWERED;// <------------------- 返回GOTO_SLEEP;
}
此外,下面过去的论坛帖子可能会有所帮助。
https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/read-buffer-overflow
谢谢,PM_DIalog
亲爱的PM_DIalog,
结果是一样的。
Always wake up是否意味着ARCH_SLEEP_OFF?
const static sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF;
这就是我所做的。
我们用了各种方法,但都没有解决。
波特率从115200到19200,
虽然在BLE是溢出时阻塞了RX,但是连接不再收到,必须重新连接。
这不是我们想要的。
有许多传感器只使用TX,RX。这个问题必须解决。
请想出一个解决办法来。
谢谢,
嗨,罗密欧,
如果没有流量控制方案,就无法控制输入的数据,就会丢失数据,所以DSPS的设计不能在没有流量控制的情况下运行。当使用BLE中断发送数据时,580无法处理BLE和UART交互,因此需要流控制,以便在需要时停止另一端的数据转换。在sw流控制(CFG_UART_SW_FLOW_CTRL)的情况下,睡眠不工作,因为您的UART需要使用16MHz XTAL时钟作为源来通信。在hw流量控制(CFG_UART_HW_FLOW_CTRL)启用的情况下,设备将进入睡眠,只有在数据缓冲区中有0字节的数据,甚至一个字节的数据将保持设备清醒。因此,使用hw流量控制,当缓冲区中有0字节的数据时,设备进入睡眠状态,当设备醒来时,RTS将切换。这就是流量控制在DSPS上如此重要的原因,即使没有睡眠模式S/W,如果你不想使用额外的CTS / RTS信号,建议流量控制。如果你想移除睡眠模式并将设备设置为睡眠模式,是的,你应该将app_default_sleep_mode修改为ARCH_SLEEP_OFF。为了获得更多的信息,我强烈建议您看一下DSPS用户手册。
谢谢,PM_Dialog