dsp无流量控制,BLE缓冲区溢出。

15个职位/ 0个新职位
最后发表
Vadym
离线
最后看到:1年3个月前
加入:2015-08-13 08:28
dsp无流量控制,BLE缓冲区溢出。

嗨。

我尝试在DA14580上使用项目dsp版本5.150.2
在我的项目:
1)关闭休眠(ARCH_SLEEP_OFF)。
2)流量控制也被禁用:
) # undef CFG_UART_HW_FLOW_CTRL
b) # undef CFG_UART_SW_FLOW_CTRL

BLE Device(外设)端连接到某些外部处理器的UART接口。初始化后,外部处理器立即开始向BLE UART发送信息。在初始化后,BLE立即没有建立连接。
我得到ASSERT_WARNING函数:
“user_periph_push”
线:
if (user_buffer_write_check(&外围_to_ble_buffer, wrdata, RX_CALLBACK_SIZE) != RX_CALLBACK_SIZE)"

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

谢谢。

设备:
MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨Vadym,

嗨Vadym,

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

由于MT_dialog

Vadym
离线
最后看到:1年3个月前
加入:2015-08-13 08:28
我删除了ASSERT_WARNING。

我删除了ASSERT_WARNING。
我从“uart_sps_rcv_data_avail_isr”来“HardFault_HandlerC”。
现在我试图禁用DEVELOPMENT_DEBUG,但我没有得到WDT重置。

当我还没有处于连接状态时,我如何禁用UART接收数据?

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨Vadym,

嗨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

Vadym
离线
最后看到:1年3个月前
加入:2015-08-13 08:28
嗨。

嗨。

谢谢你的回答。这只起到了部分作用。
当中心远离外设,连接变得弱时,我仍然会得到缓冲区溢出。

注。
对于我来说,不需要在“user_on_connection”中插入“uart_sps_init”。该函数在“user_scheduler_init”中。

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨Vadym,

嗨Vadym,

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

由于MT_dialog

naracontrol
离线
最后看到:3年6个月前
加入: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;

谢谢。

redcobaltbluedragon
离线
最后看到:2年8个月前
加入:2017-11-16 18:38
我也在做同样的工作

我只需要Tx/RX在相同的线路上工作。你做了所有的改变从其余的帖子加上你所做的编辑。你能告诉我更多吗?

谢谢,

redcobaltbluedragon
离线
最后看到:2年8个月前
加入:2017-11-16 18:38
这是为了控制,我

这是为了控制,我的工作方式和你是一样的。你能多贴一点信息吗?你做了上面所有的步骤,然后你提到的编辑。

谢谢,

罗密欧
离线
最后看到:4个月6天前
加入:2018-07-24时间是06:58
这个问题解决了吗?

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

PM_Dialog
离线
最后看到:11小时39分钟前
工作人员
加入:2018-02-08 11:03
嗨,罗密欧,

嗨,罗密欧,

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

谢谢,PM_Dialog

罗密欧
离线
最后看到:4个月6天前
加入:2018-07-24时间是06:58
嗨,MT_dialog

嗨,PM_dialog

正如瓦迪姆所说,我也有同样的处境。
1)关闭休眠(ARCH_SLEEP_OFF)。
2)流量控制也被禁用:
) # undef CFG_UART_HW_FLOW_CTRL
b) # undef CFG_UART_SW_FLOW_CTRL

连接BLE后,RX数据溢出BLE down。
我不在乎是否丢失数据,但我不希望BLE从这里下降。
我试过了,但没成功。我不想要睡眠模式。
请具体告诉我如何扔掉RX溢出数据。
我不知道该把它扔到哪里。
请给我一个具体的代码。

请帮助我不要把BLE放下。

谢谢,

PM_Dialog
离线
最后看到:11小时39分钟前
工作人员
加入: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-semiconductor.com/forums/post/dialog-smartbond-bluetooth-low-energy-%E2%80%93-software/read-buffer-overflow

谢谢,PM_DIalog

罗密欧
离线
最后看到:4个月6天前
加入: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是Overflow的时候阻塞了RX,但是连接不再被接收,必须重新连接。
这不是我们想要的。

有很多传感器只使用TX和RX。这个问题必须解决。
请想出一个解决办法。

谢谢,

PM_Dialog
离线
最后看到:11小时39分钟前
工作人员
加入:2018-02-08 11:03
嗨,罗密欧,

嗨,罗密欧,

如果你没有一个流量控制方案,那么你将无法控制传入的数据,你将丢失数据,所以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如此重要的原因,即使没有睡眠模式,如果你不想使用额外的CTS / RTS信号,也建议S/W流量控制。如果您想删除睡眠模式并将您的设备设置为睡眠模式,是的,您应该将app_default_sleep_mode修改为ARCH_SLEEP_OFF。为了获得更多的信息,我强烈建议你看一下DSPS用户手册。

谢谢,PM_Dialog