跳到主要内容

在外围模式下处理GATT错误

6个月前

在外围模式下处理GATT错误

张贴了有限公司0分 5回复
0旋转

嗨,我们使用外围模式工作到DA14585。我们在SDK中使用ble_app_peripheral_example。在该示例中,我们删除了Service-2,Service-3并排除了淡化。我们只有1个服务和1个特点,烫发(WR,启用)|perm(write_req,启用)。

我们的服务定义如此

const struct attm_desc_128 custs1_att_db [custs1_idx_nb] =
{
/ *************************
*服务1配置
*************************
* /

//服务1声明
[svc1_idx_svc] = {(uint8_t *)和att_decl_svc,att_uuid_128_len,perm(rd,启用),
sizeof(custs1_svc1),sizeof(custs1_svc1),(uint8_t *)&custs1_svc1},

//长价特征声明
[svc1_idx_long_value_char] = {(uint8_t *)和att_decl_char,att_uuid_16_len,perm(rd,启用),
0,0,null},

//长值特征值
[svc1_dx_long_value_val] = {svc1_long_value_uuid_128,att_uuid_128_len,perm(wr,启用)|perm(write_req,启用),
400,0,null},

};

我们编译应用程序并加载DA14585。然后用于测试我们连接到我们的设备。(使用带NRF Connect测试应用程序的Android手机)我们可以从客户端设备写入服务器设备(在本例中的服务器DA14585中)各种长度消息。5个字节,20个字节,200个字节,270字节,所有测试正常。但如果我们想写超过285个字节;我们的测试应用程序(NRF Connect)与DA14585断开(带GATT_ERROR和GATT_CONN_TIMEOUT)和DA14585不感知这种情况。

问题 :

- 我如何在DA14585中感知这种情况?

- 我如何递增gatt_conn_timeout?(我在user_config.h中增加/减少监督超时,但不要改变任何东西)

谢谢...

6个月前

PM_DIALOG.

嗨Ltdev,

我假设这个问题与以下论坛机票有关:

https://support.dialog-semicondiondiondum/forums/post/dialog-smartbond-bluetooth-low-energy-%2%80%93-software/gatt-peripheral-mode-write-char-size.

  1. 请在调试模式下运行应用程序代码。你能检查代码是否冻结了?例如,如果WDOG到期或者您是否得到任何断言。
  2. 将断点添加到断开回调 - user_app_connection()中。设备与手机断开连接后,断点是否击中?如果是,则GAPC_DISCONCONECT_IND SCRUCTURE项目的原因指示断开的原因。它的价值是多少?

谢谢,PM_DIALOG.

6个月前

有限公司 0分

你好;

- 我们只在我们的定制董事会上有UART。这样我们就无法使用JTAG调试它。

- 我在user_app_connection和user_app_disconn中添加一些printf消息

{

//服务1声明
[svc1_idx_svc] = {(uint8_t *)和att_decl_svc,att_uuid_128_len,perm(rd,启用),
sizeof(custs1_svc1),sizeof(custs1_svc1),(uint8_t *)&custs1_svc1},

//长价特征声明
[svc1_idx_long_value_char] = {(uint8_t *)和att_decl_char,att_uuid_16_len,perm(rd,启用),
0,0,null},

//长值特征值
[svc1_dx_long_value_val] = {svc1_long_value_uuid_128,att_uuid_128_len,perm(wr,启用)|perm(write_req,启用),
400,0,null},

};

在Beginnin中,我们有2个问题

1-当我定义结构时;

{

//服务1声明
[svc1_idx_svc] = {(uint8_t *)和att_decl_svc,att_uuid_128_len,perm(rd,启用),
sizeof(custs1_svc1),sizeof(custs1_svc1),(uint8_t *)&custs1_svc1},

//长价特征声明
[svc1_idx_long_value_char] = {(uint8_t *)和att_decl_char,att_uuid_16_len,perm(rd,启用),
0,0,null},

//长值特征值
[svc1_dx_long_value_val] = {svc1_long_value_uuid_128,att_uuid_128_len,perm(wr,启用)|perm(write_req,启用),
50,0,null},

};

在这种情况下,我试图向特征写入51字节,我得到attr_len_err。在THAR后,我将50个字节更改为400字节。那个问题解决了。

2-)解决问题-1我定义了这样的服务结构

{

//服务1声明
[svc1_idx_svc] = {(uint8_t *)和att_decl_svc,att_uuid_128_len,perm(rd,启用),
sizeof(custs1_svc1),sizeof(custs1_svc1),(uint8_t *)&custs1_svc1},

//长价特征声明
[svc1_idx_long_value_char] = {(uint8_t *)和att_decl_char,att_uuid_16_len,perm(rd,启用),
0,0,null},

//长值特征值
[svc1_dx_long_value_val] = {svc1_long_value_uuid_128,att_uuid_128_len,perm(wr,启用)|perm(write_req,启用),
400,0,null},

};

在这种情况下,我可以写入最多285字节的特征。当我尝试编写超过285年的字节;我的客户端设备(在Android上的测试用例中,在Android上的应用程序)GOT GATT_TIMEOUT_ERR并断开连接。但我的服务器设备(DA14585自定义板)不感知此断开连接状态。所以不要再开始宣传。我无法再次连接它。

我希望这条消息清楚。

尊重...

6个月前

PM_DIALOG.

嗨Ltdev,

您是否从外部SPI闪存或系统RAM启动?

如果从System-RAM启动并且设备无关,则此方法将被冻结到断言或WDOG已过期或已发生NMI。

您可以通过从SPI Flash引导来验证此功能,您将看到设备重新启动。

您应该以某种方式在调试模式下运行该项目,并尝试在冻结代码的位置。否则我们无法知道问题的根本原因是什么。

您有任何对话DKS吗?由于您在板上没有JTAG接口,因此可以使用任何对话框DK。所有DA145xx开发套件包含一个Segger J-Link设备,提供串行电线调试(SWD)功能。

http://lpccs-docs.dialog-seminiondiond.com/tutorial_sdk6/debug_probe.html.

谢谢,PM_DIALOG.

6个月前

有限公司 0分

嗨,我解决了没有j-link的问题

谢谢

接受答案!

5个月前

PM_DIALOG.

嗨Ltdev,

很高兴你解决这个问题。如果您有任何其他后续问题,请创建一个新的论坛帖子。

谢谢,PM_DIALOG.