This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2640R2F:未发生 MTU 交换。

Guru**** 1826200 points
Other Parts Discussed in Thread: CC2640, CC2640R2F, CCSTUDIO, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1363865/cc2640r2f-mtu-exchange-is-not-happening

器件型号:CC2640R2F
主题中讨论的其他器件:CC2640SysConfig

您好、TI 专家!

在本例中、我正在使用 SDK 版本4_30_00_08来开发 CC2640。 最初、我导入了示例 simple peripheral 项目并通过写入特性(0xFFF3)成功写入一个值、设法发送50个字节而无需交换 MTU。

不过、在通过写入、通知和指示功能移植自定义特性的同时、我遇到了一个问题。 当尝试发送50个字节时、接收不正确。 只有前20个字节与我在自定义写入特性中写入的字节匹配。 有趣的是、在从中央设备启用 MTU 请求后、传输可以完美运行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muthu:

    感谢您评估 CC2640R2F 并将您的问题发布到 E2E 论坛!  TI 的所有 BLE E2E 论坛专家都将 在 5月20日星期一享受当之无愧的休息时间、并将在 5月21日星期二 按照收到它们的顺序和优先级返回回答论坛帖子。  在此之前、您可以进一步考虑以下一些资源、它们可以独立解决您的问题:

    如果您找到问题的解决方案、请回复此 E2E 帖子!  否则、您可以为 BLE E2E 专家返岗时提供一些额外的信息、以便为他们提供最佳的支持:

    • 对默认代码示例配置所做的更改
    •     已安装的 CCStudio 版本和相关性
    • 可能有用的任何其他屏幕截图、代码片段或信息。

    感谢您在此期间的耐心和勤奋!

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Muthu:

    感谢您的联系。 您能否指出您是否也修改了 PDU 大小? 这可以在 SysConfig --> BLE --> General Configuration --> Max size of PDU (bytes)内进行设置,您必须将其至少设置为54字节。 还请考虑到所有连接都以23字节的默认 MTU 开头。 如果启用了安全连接、本地设备将支持65的 MTU (默认设置为 PDU 大小69 - MAX_PDU_SIZE - 4)。但是、实际产生的 MTU 仍必须通过使用 GATT 交换 MTU 命令的 MTU 交换过程进行协商。

    我`s 查看用户指南的以下部分: 配置更大的 MTU 值。

    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    这是配置。 在客户端发出请求时会进行 MTU 交换、但在不更改 MTU 的情况下、简单外设示例接收了50个字节、我已将默认的16位写入特性(0xFFF3)更改为自定义特性(128位)  、并配置了 simpleProfileChar3Props = GATT_PROP_WRITE 进入 simpleProfileChar3Props = GATT_PROP_WRITE_NO_RSP、 之后、我无法从客户端接收20个字节以上的器件。 但是、如果客户端设备请求 MTU、我可以接收超过20个字节的数据。

     GATT_PROP_WRITE 和 GATT_PROP_WRITE_NO_RSP 之间是否存在任何差异?

    CCS 版本:8.1.0

    SDK 版本: 4.30.00.08

    我正在结束这个项目,请尽快支持。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Muthu:

    将 UUID 扩展为128位、这通常是由宏完成的、因此这应该不会成为问题。 是否正在使用 GATT_WriteNoRsp ()函数? 是否有不使用 GATT_WriteCharValue()的原因? 外围设备和中央设备中是否都配置了 PDU 大小?

    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我将使用 GATT_WriteNoRsp ()。  我们的要求是使用 GATT_WriteNoRsp ()。 我已在外设端配置了 PDU 大小、如前文所述 、在中端配置了 PDU 大小。

    我将使用 GATT_PROP_WRITE_NO_RSP (simpleProfileChar3Props =GATT_PROP_WRITE_NO_RSP)配置自定义特性属性。 使用此配置、无法  从客户端设备接收更多的20字节。

    此致

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Muthu:

    我不明白为什么 GATT_WriteNoRsp ()在这种情况下的行为会有所不同。 此外、您已确认中央设备和外围设备中的 PDU 为69。 您是否具有蓝牙监听器来确认第一种情况下没有发生 MTU 交换、以及在设备传输的数据不超过20字节时进行比较? 我还想问一下为什么 MTU 更换程序不是一个选项吗?

    谢谢。

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我附上了日志供您参考。 在这种情况下,使用  GATT_WriteCharValue()不更改 MTU 50字节的传输。  

    我还想问一下为什么 MTU 更换程序不是一个选项吗?

     在现有的客户模块在没有更换 MTU 的情况下工作,所以只有我们尝试实现。

    nRF Connect, 2024-05-23
    MDL1234500000000 (0C:61:CF:A0:95:84)
    V	18:07:11.126	Connecting to 0C:61:CF:A0:95:84...
    D	18:07:11.126	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
    D	18:07:11.276	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I	18:07:11.276	Connected to 0C:61:CF:A0:95:84
    D	18:07:11.313	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    D	18:07:11.313	[Broadcast] Action received: android.bluetooth.device.action.BOND_STATE_CHANGED, bond state changed to: BOND_BONDING (11)
    D	18:07:11.330	[Broadcast] Action received: android.bluetooth.device.action.PAIRING_REQUEST, pairing variant: PAIRING_VARIANT_CONSENT (3)
    I	18:07:11.783	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
    I	18:07:12.115	Connection parameters updated (interval: 47.5ms, latency: 0, timeout: 5000ms)
    D	18:07:13.266	[Broadcast] Action received: android.bluetooth.device.action.PAIRING_REQUEST, pairing variant: PAIRING_VARIANT_PIN (0)
    D	18:07:21.031	[Broadcast] Action received: android.bluetooth.device.action.BOND_STATE_CHANGED, bond state changed to: BOND_BONDED (12)
    I	18:07:21.031	Device bonded
    D	18:07:21.089	wait(1600ms)
    V	18:07:22.695	Discovering services...
    D	18:07:22.695	gatt.discoverServices()
    D	18:07:22.732	[Callback] Services discovered with status: 0
    I	18:07:22.732	Services discovered
    V	18:07:22.748	Generic Access (0x1800)
    - Device Name [R W] (0x2A00)
    - Appearance [R W] (0x2A01)
    - Peripheral Preferred Connection Parameters [R] (0x2A04)
    Generic Attribute (0x1801)
    Device Information (0x180A)
    - System ID [R] (0x2A23)
    - Model Number String [R] (0x2A24)
    - Serial Number String [R] (0x2A25)
    - Firmware Revision String [R] (0x2A26)
    - Hardware Revision String [R] (0x2A27)
    - Software Revision String [R] (0x2A28)
    - Manufacturer Name String [R] (0x2A29)
    - IEEE 11073-20601 Regulatory Certification Data List [R] (0x2A2A)
    - PnP ID [R] (0x2A50)
    Unknown Service (e837d9a2-9c49-4493-9547-8e6918a59ca8)
    - Unknown Characteristic [R W] (0000fff1-0000-1000-8000-00805f9b34fb)
       Characteristic User Description (0x2901)
    - Unknown Characteristic [R] (0000fff2-0000-1000-8000-00805f9b34fb)
       Characteristic User Description (0x2901)
    - Unknown Characteristic [W] (64aecb40-849a-44f1-934f-addc4b316423)
       Characteristic User Description (0x2901)
    - Unknown Characteristic [N] (0000fff4-0000-1000-8000-00805f9b34fb)
       Client Characteristic Configuration (0x2902)
       Characteristic User Description (0x2901)
    - Unknown Characteristic [R] (0000fff5-0000-1000-8000-00805f9b34fb)
       Characteristic User Description (0x2901)
    D	18:07:22.748	gatt.setCharacteristicNotification(0000fff4-0000-1000-8000-00805f9b34fb, true)
    V	18:07:32.580	Writing request to characteristic 64aecb40-849a-44f1-934f-addc4b316423
    D	18:07:32.580	gatt.writeCharacteristic(64aecb40-849a-44f1-934f-addc4b316423, value=0x0A312F31323334353130367030306D32353030303031356B323530307A30314E455720594F524B2020414D4552494341200A)
    I	18:07:32.921	Data written to 64aecb40-849a-44f1-934f-addc4b316423, value: (0x) 0A-31-2F-31-32-33-34-35-31-30-36-70-30-30-6D-32-35-30-30-30-30-31-35-6B-32-35-30-30-7A-30-31-4E-45-57-20-59-4F-52-4B-20-20-41-4D-45-52-49-43-41-20-0A
    A	18:07:32.921	"(0x) 0A-31-2F-31-32-33-34-35-31-30-36-70-30-30-6D-32-35-30-30-30-30-31-35-6B-32-35-30-30-7A-30-31-4E-45-57-20-59-4F-52-4B-20-20-41-4D-45-52-49-43-41-20-0A" sent
    V	18:07:54.762	Writing request to characteristic 64aecb40-849a-44f1-934f-addc4b316423
    D	18:07:54.763	gatt.writeCharacteristic(64aecb40-849a-44f1-934f-addc4b316423, value=0x0A312F31323334353130367030306D32353030303031356B323530307A30314E455720594F524B2020414D4552494341200A)
    E	18:08:00.127	Error 133 (0x85): GATT ERROR
    D	18:08:00.127	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
    E	18:08:00.127	Error 8 (0x8): GATT CONN TIMEOUT
    I	18:08:00.127	Disconnected
    D	18:08:00.169	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
    

    谢谢。

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Muthuraj:

    我知道您正在考虑让 CC2640R2F 器件发送 MTU 请求。
    我想问您是否已查看以下文档: https://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_5_30_00_03/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/gatt.html#maximum-transmission-unit-mtu 

    由于 CC2640R2F 的行为似乎是作为 GATT 客户端、我想您应该使用 GATT_ExchangeMTU () 命令。

    我希望这将有所帮助、

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Clement、

    感谢您分享文档。 CC2640R2F 用作外设(服务器)、我正在使用手机(nrf connect 作为客户端)、以供参考。

    是否可以从外设向客户端请求 MTU 大小?

    我尝试过  GATT_ExchangeMTU (),但它不起作用。 我附上了图像供您参考。

    使用此  GATT_WriteCharValue ()属性可以写入超过20个字节 ,但使用 GATT_WriteNoRsp ()属性时,无法在不交换 MTU 的情况下进行写入。在 TI 简单外设示例中,我无法在不交换 MTU 的情况下进行写入。 感谢大家的支持、我已经结束该项目了。

    此致

    Muthuraj k

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj,

    感谢您提供更多信息。

    您能帮助我澄清一下吗?

    1. 您是使用 SDK 中的 blestack 还是 ble5stack? 如果尚未出现这种情况、请使用 ble5stack。
    2.  GATT_ExchangeMTU () 只能由客户端启动,将根据外设和中央的建议值选择 MTU 大小。
    3. 您刚才提到您使用的是作为服务器运行的简单外设项目(示例确实如此)。 但我假设您使用另一个配置为中央设备(客户端)的器件、从该器件执行 GATT_WriteCharValue ()和 GATT_WriteNoRsp、因为这只能从客户端执行。 您能对此进行一下澄清吗?
    4. 这是 nrf 连接应用程序吗?[quote userid="606987" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1363865/cc2640r2f-mtu-exchange-is-not-happening 通过中心设备启用 MTU 请求


    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    1. 您是使用 SDK 中的 blestack 还是 ble5stack? 如果尚未出现这种情况、请使用 ble5stack。 我正在使用 SDK 版本4.30.00.08中的 blestack、我还验证过 ble5stack 运行 起来像 blestack 一样。

        您刚才提到您使用的是作为服务器运行的简单外设项目(示例确实如此)。 但我假设您使用的是            另一个配置为中央设备(客户端)的设备  ,从中执行 GATT_WriteCharValue()和 GATT_WriteNoRsp,如下所示           只能从客户端执行。 您能对此进行一下澄清吗?

          我之前提到过、我将使用简单外设工程、并将写入字符属性(0xFFF3)配置为

           simpleProfileChar3Props = GATT_PROP_WRITE 至 simpleProfileChar3Props = GATT_PROP_WRITE_NO_RSP。

           

          如果我正在使用  GATT_PROP_WRITE、则可以在不交换 MTU 的情况下写入(客户端到服务器)超过20个字节(未 从中央设备-nrf 连接应用启用 MTU)。

          如果使用 GATT_PROP_WRITE_NO_RSP 时、无法写入超过20个字节。 如果从中央设备更改 MTU (从

           中央- nrf 连接应用)可以写入超过20个字节。  

          我们担心 GATT_PROP_WRITE 和 GATT_PROP_WRITE_NO_RSP (如上图所示)之间存在任何差异。 如果有                区别在于、使用 GATT_PROP_WRITE_NO_RSP、然后如何在不交换 MTU 的情况下从客户端写入。

          在现有的客户模块在不交换 MTU 的情况下工作超过20字节。 因此、只有我们在努力实现它。

        此致、

         K·穆图拉伊

         

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj,

    您能在以下方面帮助我吗?

    1. 请尝试将属性设置为"GATT_PROP_WRITE_NO_RSP | GATT_PROP_WRITE"。 这样做是为了帮助找出问题的根源、并查看是否可以将其用作临时解决方法。

    2. 此外,您是否修改了默认 PDU 大小? 尝试使用HCI_LE_WriteSuggestedDefaultDataLenCmd()来设置连接的默认最大传输数据包大小和默认的最大数据包传输时间。 此命令应位于 SimplePeripheral_init()中(示例中已注释)。           
          //Set initial values to maximum, RX is set to max. by default(251 octets, 2120us)
          #define APP_SUGGESTED_PDU_SIZE 251 //default is 27 octets(TX)
          #define APP_SUGGESTED_TX_TIME 2120 //default is 328us(TX)
          HCI_LE_WriteSuggestedDefaultDataLenCmd(APP_SUGGESTED_PDU_SIZE, APP_SUGGESTED_TX_TIME);
    3. 如果您手头有 BLE 监听器、是否可以在使用 GATT_PROP_WRITE_NO_RSP 与 GATT_PROP_WRITE 时共享日志? 如果我没记错、您共享的日志就是应用程序的日志、它们不会提供太多信息。 此外、我看到一个 GATT CONN 超时、这个有用途吗? 您知道原因吗? 可能会有来自中央端的 MTU 限制、这就是为什么监听器日志可以帮助我们了解该端可能发生的情况以及谁/为何限制 MTU 大小的原因。

    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    感谢您的建议、我们已尝试将属性更改为"GATT_PROP_WRITE_NO_RSP | GATT_PROP_WRITE"和"HCI_LE_WriteAdvisedDefaultDataLenCmd()"。 更改此连接后,与移动(中央)没有交换 MTU 的服务器能够接收超过20字节的 nrf 连接应用程序,再次与客户的移动应用程序连接,它不工作,但一旦我连接客户的移动应用程序和后台 NRF 连接与交换 MTU 它工作正常,能够接收超过20字节, 同样的想法没有 MTU 交换与客户的移动应用程序连接,在后台,我们能够  并行地从 nrf 应用程序写入超过20字节。 我们不知道原因是对物业有任何限制。 您对此有什么想法吗? 我们已请求客户从移动应用程序启用连接日志。

    目前、我们没有监听器来获取和共享日志。  

    是否可以从 BT 工具或任何其他开放源码获取日志? 请推荐我们。

    此致、

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj,

    抱歉、我不能完全理解目前的状态。 请您确认以下情况:

    • 当您从中央设备(运行 Nordics 应用程序的电话)传送数据时、cc26 (外围设备)现在可以在不进行 MTU 交换的情况下接收全部字节数(超过20个)。 但是、如果您尝试使用客户的移动应用程序(与 Nordics 应用程序不同)、则无法做到这一点?

    请帮助我对此进行说明。

    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    客户的移动应用程序不同、但我们检查是否有效。  在我前面提问的同时、 GATT_PROP_WRITE_NO_RSP 和 GATT_PROP_WRITE 之间是否存在任何差异 。 您能帮助我解决这个问题吗?

    在更改您的建议后,我分享了一个 Log (北欧应用程序)。

    NRF 连接、2024年05月28日
    MDL0123456789000 (0C:61:CF:A0:95:84)
    v 15:35:45.903连接到0C:61:CF:A0:95:84……
    D 15:35:45.903 GATT = device.connectGatt (AutoConnect = false、transport_LE、首选 PHY = LE 1M)
    D 15:35:46.704 [回调]连接状态已更改、状态为0、新状态为已连接(2)
    I 15:35:46.704连接到0C:61:CF:A0:95:84
    d 15:35:46.738 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    d 15:35:46.761 [广播]收到的操作:android.bluetooth.device.action.BOND_STATE_CHANGED、绑定状态更改为:Bond_bonding (11)
    d 15:35:46.762 [Broadcast] Action received: android.bluetooth.device.action.PAIRING_REQUEST 配对变量: pairing_variant_agreement (3)
    更新了 I 15:35:47.177连接参数(间隔:7.5ms、延迟:0、超时:5000ms)
    已更新 I 15:35:47.491连接参数(间隔:45.0ms、延迟:0、超时:5000ms)
    d 15:35:50.075 [Broadcast] Action Received: android.bluetooth.device.action.PAIRING_REQUEST、pairing variant: pairing_variant_PIN (0)
    已更新 I 15:35:53.159连接参数(间隔:15.0ms、延迟:0、超时:6000ms)
    d 15:35:57.286 [广播]收到的操作:android.bluetooth.device.action.BOND_STATE_CHANGED、绑定状态更改为:Bond_Bonded (12)
    I 15:35:57.286器件绑定
    d 15:35:57.319等待(1600ms)
    v 15:35:58.936发现服务...
    d 15:35:58.936 Gatt.discoverServices()
    D 15:35:58.957 [Callback]发现的服务状态为:0
    I 15:35:58.957发现的服务
    V 15:35:58.972通用访问(0x1800)
    -设备名称[R W](0x2A00)
    -外观[R W](0x2A01)
    -外设首选连接参数[R](0x2A04)
    通用属性(0x1801)
    器件信息(0x180A)
    -系统 ID [R](0x2A23)
    -型号字符串[R](0x2A24)
    -序列号字符串[R](0x2A25)
    -固件版本字符串[R](0x2A26)
    -硬件版本字符串[R](0x2A27)
    -软件版本字符串[R](0x2A28)
    -制造商名称字符串[R](0x2A29)
    - IEEE 11073-20601法规认证数据列表[R](0x2A2A)
    - PnP ID [R](0x2A50)
    未知服务(e837d9a2-9c49-4493-9547-8e6918a59ca8)
    -未知特性[W WNR](64aecb40-849a-44f1-934f-addc4b316423)
       特征用户描述(0x2901)
    -未知特征[N](b792a4bb-db87-436a-9066-db63c5fb3f00)
       客户端特征配置(0x2902)
       特征用户描述(0x2901)
    -未知特征[W](f535dd6e-7975-4abd-9719-491e38a81179)
       特征用户描述(0x2901)
    -未知特征[i](36e8614b-2ded-45c1-9ad3-c9f59a01f21e)
       客户端特征配置(0x2902)
       特征用户描述(0x2901)
    d 15:35:58.972 gatt.setCharacteristicNotification(b792a4bb-db87-436a-9066-db63c5fb3f00、真)
    d 15:35:58.973 gatt.setCharacteristicNotification(36e8614b-2ded-45c1-9ad3-c9f59a01f21e、真)
    v 15:36:17.332对特征64aecb40-849a-44f1-934f-addc4b316423的写入请求
    D 15:36:17.332 GATT.writeCharacteristic (64aecb40-849a-44f1-934f-addc4b316423、值= 0x0A312F31323333435313036306D3235303030303031356B3235307A30314E4557204F524B205942445534A)
    I 15:36:17.448写入64aecb40-849A-44F1-934f-addc4b316423的数据、值:(0x) 0A-31-2F-31-32-33-34-35-31-30-36-70-30-30-30-30-6D-32-30-30-30-30-30-30-30-30-30-30-
    A 15:36:17.448 "(0x) 0A-31-2F-31-32-33-34-35-31-30-30-36-70-30-30-30-30-30-30-30-6-D-32-35-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-30-

    此致

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我已经使用该 BT 工具进行了测试。

    1.在 BT 工具中,如果 选择   GATT_WriteNoRsp ()属性写入超过20个字节,由于 MTU 的限制,无法成功写入。 显示无效的 MTU 大小。

    2.并选择 GATT_WriteCharValue()属性,还显示无效的 MTU 大小。

    3.在使用这两个属性之前,如果  从 BT 工具交换 MTU 大小,GATT_WriteNoRsp() 和 GATT_WriteCharValue() 属性能够写入超过20个字节(从 BT 工具到外围设备)。

    4.如果使用 GATT_WriteLongCharValue()属性,我可以在不交换 MTU 大小的情况下写入超过20个字节。

    我希望客户的移动应用也会发生同样的情况。 在客户移动应用中使用 GATT_WriteNoRsp () 属性。

    此致

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj,

    可以利用的数据 包监听器是 SmartRF 数据包监听器、这是一款可以显示和存储由侦听射频器件捕获的无线电数据包的软件应用程序。 它可能无法提供关于无线传输中发生的情况的非常详细的信息(就像其他专用工具一样)、但它能够让您开始了解中央设备正在发送什么命令以及外设如何应答。

    关于 BTool 测试(感谢您分享此内容)。 当涉及到 MTU 大小时,GATT_WriteNoRsp ()和 GATT_WriteCharValue ()之间应该没有任何差异。 在这两种情况下,都需要 MTU 交换,这就是为什么我想看到低通日志如果发送超过20字节而没有 MTU 交换是可以与 GATT_WriteCharValue()实现的,因为我不希望它是这样的。

    您能否确认客户移动应用正在运行哪种类型的 GATT 写入命令? (例如、GATT_WriteLongCharValue、GATT_WriteNoRsp、GATT_WriteCharValue)

    在更改此与移动设备(中央)的连接后,无需交换 MTU,服务器可以在 nrf connect 应用程序中接收超过20字节[/报价]

    这是否意味着外设在没有 MTU 交换的情况下可以接收超过20个字节的数据?

    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    在使用 BT 工具进行测试之前,我已经使用 Nordic Mobile 应用程序进行了测试,该应用程序传输超过20个字节,完全不知道它们使用的是什么属性(北欧移动应用程序)。

    但是在使用 BT 工具进行测试后,我明白不交换 MTU ,在使用  GATT_WriteNoRsp()或 GATT_WriteCharValue ()时写入超过20个字节 (从中央到外围设备)是不可能的。

    我已请求客户、他们 在移动应用中使用的属性。 他们确认了 GATT_WriteNoRsp ()属性已在使用。

    如何实现、从中央接收超过20个字节?

     

    此致

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    如何实现、从中央接收超过20个字节?

    有任何与此相关的更新吗?  

    请支持解决此问题、我们即将结束此项目。

    此致

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj

    考虑到你提到的两种情况,似乎 NRF 应用程序使用某种类型的 GATT_WriteLongCharValue()函数,如果需要发送的字符数量超过最小值,这不是客户应用程序的情况。 GATT_WriteLongCharValue ()(由 TI 开发)执行将数据分成几个23字节(大约)数据包的任务、以便单独发送它们。 因此、我假设中央侧(NRF 应用程序)而不是客户应用程序执行类似的任务(仅执行 GATT_WriteNoRsp ()- 23个字节)。 此行为由 蓝牙规范确定。

    Br、

    大卫。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    根据您的回复、我可以理解以下几点、如果我错了、请确认。

    1. GATT_WriteLongchar ()函数适用于 TI 芯片组。 在这里、如果器件位于中央、我们可以对超过23个字节进行碎片整理。

    2. BLE 规范默认 MTU 大小为23字节。

    3.默认的 MTU 为23个字节,可以增加到247个字节。 增加此值时、可以通过为一个事务发送多个数据包来实现更长的有效负载。 如何在外设芯片组上实现? 请提供建议。  

    我们渴望答案不要拖延时间。 客户询问是否可行? 我们需要最终投入生产。 我希望你理解我们的立场。

    此致、

    K·穆图拉伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj,

    1. GATT_WriteLongchar()函数在 SDK 中实现,中央设备可以使用该函数对数据包进行碎片整理并单独发送,从而以比设置的 MTU 更大的大小发送数据。 请再次考虑、此逻辑是由中央实施的(在您的情况下、必须由移动应用实施)。
    2. 默认情况下、LE 器件假设 L2CAP PDU 的大小为27字节、这对应于 单个连接事件数据包中可以传输的 LE 数据包的最大大小。 借助 数据长度扩展功能 、LE 控制器可发送具有高达251字节应用数据的有效负载的数据通道数据包数据单元(PDU)。 如果在连接之前、建议的 MTU 大小设置为 TX 和 RX 的默认值(27字节)、则 CC2640R2不会启动数据长度交换。 如果在连接之前未默认设置 MTU 大小、则设备将协商数据通道 PDU 的有效负载大小。 在任何情况下、都需要进行 MTU 交换/协商。 请参阅 在应用中使用 DLE 部分

    Br、

    大卫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我可以从您的命令中理解

    1. BLE 堆栈不支持外设的数据长度扩展功能。

    2.如果客户端未按默认 MTU 大小进行设置,BLE5堆栈将支持外围设备的数据长度扩展功能。 这将支持大于20字节的数据传输、而无需进行 MTU 交换。 请确认。  

    我将尝试使用 BLE5STACK。

    此致、

    Muthuraj.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Muthuraj,

    BLE5STACKBLESTACK 支持相同的机制、因此需要执行 MTU 交换过程。 这由蓝牙规范指定、请参阅 核心规范5.0的第4.3.1节 Exchange MTU。 如果没有进行交换/协商、则中央设备和外设都无法知道通信的 MTU 大小、因此会假设最小值。 我提到过、NRF 应用可能会对比默认 MTU 大小(23字节)更长的 GattWrite 命令进行管理、方法是对这些命令进行碎片整理、然后将其发送到外设接收的单独数据包中。 此过程不需要 MTU 交换、因为中心设备将以最小的大小工作。

    总体而言、MTU 在 Central 的 MTU 大小与外围设备的 MTU 大小之间是最小的。 默认情况下、该值为23。 超过23意味着客户端应向服务器发送 MTU 交换请求。 如果 MTU 大小为23,并且您要发送超过23个字节,则应使用"长写/长读"过程。

    Br、

    大卫。