DSP没有流量控制,BLE缓冲区溢出。

15个员额/ 0个新员额
最后一篇
Vadym.
离线
最后一次露面:1年2个月前
加入:2015-08-13 08:28
DSP没有流量控制,BLE缓冲区溢出。

你好。

我试图在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”
在线的:
“如果(user_buffer_write_check(&periph_to_ble_buffer,wrdata,rx_callback_size)!= rx_callback_size)”

如何解决这个问题?
(缓冲区中的数据没有任何重要性,部分数据可能会丢失)

谢谢。

关键词:
设备:
mt_dialog.
离线
最后一次露面:2个月5天前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

流控制不仅对睡眠是必要的,如果你删除它,并不能保证你的系统中不会有任何数据丢失。您可以尝试删除ASSERT_WARNING和检查是否写入缓冲区,但DSPS没有测试这种使用(没有流控制)。最可能的情况是旧数据将被新数据覆盖,您将丢失字节。

谢谢mt_dialog.

Vadym.
离线
最后一次露面:1年2个月前
加入:2015-08-13 08:28
我删除了assert_warning。

我删除了assert_warning。
我从“UART_SPS_RCV_DATA_AVAIL_ISR”来到“hardfault_handlerc”。
现在我试图禁用DEVELOPMENT_DEBUG,但我没有得到WDT复位。

我如何禁用UART接收数据,而我还没有在连接状态?

mt_dialog.
离线
最后一次露面:2个月5天前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

由于我已经提到了这种用法没有测试DSP,你可以尝试的另一件事是从user_on_init()函数中删除user_sceDuler_init(),也可以从periph_init()中删除uart_sps_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,param);
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.

Vadym.
离线
最后一次露面:1年2个月前
加入:2015-08-13 08:28
你好。

你好。

谢谢你的回答。这是有帮助的,但只是部分。
当中央远离外围和连接变得弱时,我仍然可以获得缓冲区溢出。

P.S.
对我来说,不需要将“UART_SPS_INIT”插入“USER_ON_CONNECTICE”。该函数位于“user_scheduler_init”的内部。

mt_dialog.
离线
最后一次露面:2个月5天前
职员
加入:2015-06-08 11:34
嗨Vadym,

嗨Vadym,

如果你没有流量控制,我想这是预期的。

谢谢mt_dialog.

Naracontrol.
离线
最后一次露面:3年5个月前
加入:2016-04-14十
大家好。

大家好。
我对同样的问题感兴趣,并解决了以下方法。

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;
}

谢谢。

RedcobaltlupuedRagon.
离线
最后一次露面:2年6个月前
加入:2017-11-16 18:38
我正在努力

我正在使用我只需要tx / rx的同一条线。您是否从帖子的其余部分以及您所做的编辑完成所有更改。你能告诉我更多。

谢谢,

RedcobaltlupuedRagon.
离线
最后一次露面:2年6个月前
加入:2017-11-16 18:38
这是适用于Naracontrol,我

这是适用于Naracontrol,我正在沿着同一条线工作。你能发布更多信息吗?您是否从上面完成了所有步骤,然后是您提到的编辑。

谢谢,

罗密欧
离线
最后一次露面:2个月3周前
加入:2018-07-24 06:58
这个问题解决了吗?

这个问题解决了吗?我也担心这个。请把你的信息分享给任何解决了这个问题的人。

PM_DIALOG.
离线
最后一次露面:1天7小时前
职员
加入:2018-02-08 11:03
嗨罗密欧,

嗨罗密欧,

你能澄清一下你的问题吗?如果我能正确理解的话,您想使用没有流量控制的dsp吗?如果你的意思是,当没有流量控制时,你将无法在睡眠状态下操作DSPS。如果您希望没有流控制,则应该以活动模式配置运行DSPS。否则,如果你只有RX/TX引脚和睡眠模式配置,你会有数据丢失。请注意,DSPS项目被设计为在默认情况下使用软件和硬件流量控制。如果你禁用了睡眠模式,并从你的项目中删除了软件流控制功能,我不能100%确定不会有丢失的数据。

谢谢,PM_DIALOG.

罗密欧
离线
最后一次露面:2个月3周前
加入:2018-07-24 06:58
嗨,MT_dialog

嗨,pm_dialog.

随着Vadym所说,我在同样的情况下。
1)禁用睡眠(ARCH_SLEEP_OFF)。
2)禁用流量控制:
) # undef CFG_UART_HW_FLOW_CTRL
b) # undef CFG_UART_SW_FLOW_CTRL

连接BLE后,RX数据溢出BLE。
我不在乎是否会丢失数据,但我不想让BLE从上面掉下来。
我试过了,但没用。我不想要睡眠模式。
请特别告诉我如何将RX溢出数据丢弃。
我不知道在哪里扔掉它。
请给我一个特定的代码。

请帮我别把BLE打倒。

谢谢,

PM_DIALOG.
离线
最后一次露面:1天7小时前
职员
加入:2018-02-08 11:03
嗨,罗密欧,

嗨,罗密欧,

你能试试这个然后告诉我吗?

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-semicondiondiondimicon.com/forums/post/dialog-smartbond-bluetooth-low-energy-%2%80%93-software/read-buffer-overflow.

谢谢,PM_DIALOG.

罗密欧
离线
最后一次露面:2个月3周前
加入:2018-07-24 06:58
亲爱的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。这个问题必须解决。
请想出一个解决办法来。

谢谢,

PM_DIALOG.
离线
最后一次露面:1天7小时前
职员
加入:2018-02-08 11:03
嗨,罗密欧,

嗨,罗密欧,

如果您没有流量控制方案,那么您将无法控制传入的数据,并且您将丢失数据,因此DSP不设计用于无流量控制操作。使用BLE中断发送数据时,580无法应对BLE和UART交互,因此您需要流量控制,以便在需要时停止在另一方的数据过渡。在SW流量控制(CFG_UART_SW_FLOW_CTRL)的情况下,睡眠不起作用,因为您的UART需要使用16MHz XTAL时钟作为通信的源。在启用HW流量控制(CFG_UART_HW_FLOW_CTRL)的情况下,只有在数据缓冲区中有0个字节的数据时,设备才会休眠,即使单个数据的数据也将保持设备唤醒。因此,随着HW Flow Control,当缓冲区中存在0个数据时,设备会睡眠,并且RTS将在设备唤醒时切换。这就是为什么流量控制在DSP上如此重要的原因,即使没有睡眠模式,如果您不想使用额外的CTS / RTS信号,则建议使用S / W流量控制。如果您想删除睡眠模式并将设备设置为睡眠模式,则应将App_default_sleep_mode修改为ARCH_SLEEP_OFF。为了获取更多信息,我会非常建议您查看DSP用户手册。

谢谢,PM_DIALOG.