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.

[参考译文] CC3351:由于 HCI ACL 数据包大小超过驱动程序限制 (255)、BLE GATT 服务发现在 TI CC33xx SDIO 上失败

Guru**** 2979400 points

Other Parts Discussed in Thread: CC3351

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1638231/cc3351-ble-gatt-service-discovery-fails-on-ti-cc33xx-sdio-due-to-hci-acl-packet-size-exceeding-driver-limit-255

器件型号: CC3351

症状

  • 使用 Android 应用成功建立 BLE 连接
  • MTU 协商为 517 字节
  • GATT 服务发现正常启动
  • 在~30 秒内没有 ATT 流量后、远程设备(Android 应用程序)会以原因终止连接 0x13 (远程用户终止)
驱动程序和固件版本:
[22.898887] wlcore:无线驱动程序版本 1.7.2.239 [22.899948]
wlcore
:无线固件版本 1.7.11.323 [22.899960] wlcore:无线 PHY 版本 1.2.0.47.6.39.69

btmon 日志:

ACL 碎片问题。   

< ACL Data TX:处理 3584 标志 0x00 dlen 255    #96 [hci0] 93.000000
< ACL Data TX:处理 3584 标志 0x01 dlen 3      #97 [hci0] 93.000000
   ATT:通过类型响应读取 (0x09) 长度 253
    属性数据长度:21
    属性数据列表:12 个条目
    句柄:0x0016
    值:121700c7141e933c6395839e4a020401b0a602
    句柄:0x0019
    值:081a00c7141e933c6395839e4a040401b0a602
    句柄:0x001b
    值:081c00c7141e933c6395839e4a0b0401b0a602
    手柄:0x001d
    值:081e00c7141e933c6395839e4a080401b0a602
    句柄:0x001f
    值:022000c7141e933c6395839e4a050401b0a602
    手柄:0x0021
    值:082200c7141e933c6395839e4a070401b0a602
    句柄:0x0023
    值:082400c7141e933c6395839e4a090401b0a602
    句柄:0x0025
    值:022600c7141e933c6395839e4aff0401b0a602
    句柄:0x0027
    值:082800c7141e933c6395839e4a010401b0a602
    手柄:0x0029
    值:122a00c7141e933c6395839e4a0a0401b0a602
    句柄:0x002c
    值:082d00c7141e933c6395839e4a060401b0a602
    句柄:0x002e
    值:022f00c7141e933c6395839e4a030401b0a602
> HCI 事件:已完成的包的数量。 (0x13) PLEN 5 #98 [hci0] 93.000000
    数字句柄:1.
    手柄:3584 地址:5F:EC:32:F9:9F:96(可解析)
    计数:1.
> HCI 事件: LE Meta 事件 (0x3e) PLEN 6.        #99 [hci0] 94.000000
   LE PHY 更新完成 (0x0c)
    状态:成功 (0x00)
    手柄:3584 地址:5F:EC:32:F9:9F:96(可解析)
    TX PHY:LE 2M (0x02)
    RX PHY:LE 2M (0x02)

dmesg:

`[bt SDIO HCI]`错误:skb 长度错误 258:255 μ m


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

    您好、张:

    首先、您是否有办法让我在不使用您的应用程序的情况下重现此问题?

    第二、也许您可以尝试注释掉 IF 语句、看看错误是否已删除? 如下面的差分版本:

    diff --git a/drivers/bluetooth/btti_main.c b/drivers/bluetooth/btti_main.c
    index 6857d8b90df0..cfe220cc2c41 100644
    --- a/drivers/bluetooth/btti_main.c
    +++ b/drivers/bluetooth/btti_main.c
    @@ -76,12 +76,12 @@ static int btti_hci_tx_pkt(struct btti_private *private_data,\
            if (!skb || !skb->data)
                    return -EINVAL;
     
    -       if (!skb->len || ((skb->len + BT_SDIO_HEADER_LEN) > BT_SDIO_UPLD_SIZE))
    -       {
    -               BT_ERR("[bt sdio hci] TX Error: Bad skb length %d : %d",
    -                                               skb->len, BT_SDIO_UPLD_SIZE);
    -               return -EINVAL;
    -       }
    +       // if (!skb->len || ((skb->len + BT_SDIO_HEADER_LEN) > BT_SDIO_UPLD_SIZE))
    +       // {
    +       //      BT_ERR("[bt sdio hci] TX Error: Bad skb length %d : %d",
    +       //                                      skb->len, BT_SDIO_UPLD_SIZE);
    +       //      return -EINVAL;
    +       // }
     
            skb_push(skb, BT_SDIO_HEADER_LEN);
     
    

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

    此外、您能否发布更多日志以准确显示此错误的 skb 长度错误发生的时间? 您知道哪个 HCI 命令会产生错误吗?

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

    尊敬的 Kaiwen:

    您能否 恢复先前的更改、然后应用以下内容?

    diff --git a/drivers/bluetooth/btti_drv.h b/drivers/bluetooth/btti_drv.h
    index 39df46cbb1af..a475fa6bbae1 100644
    --- a/drivers/bluetooth/btti_drv.h
    +++ b/drivers/bluetooth/btti_drv.h
    @@ -30,7 +30,7 @@
     
     
     #define BT_SDIO_HEADER_LEN                     4
    -#define BT_SDIO_UPLD_SIZE                      (251+BT_SDIO_HEADER_LEN)
    +#define BT_SDIO_UPLD_SIZE                      (247+BT_SDIO_HEADER_LEN)
     
     #define CMD_TYPE_BLE_ENABLE         1
     
    diff --git a/drivers/bluetooth/btti_sdio.h b/drivers/bluetooth/btti_sdio.h
    index 1fa7441d3573..7ec807a4158f 100644
    --- a/drivers/bluetooth/btti_sdio.h
    +++ b/drivers/bluetooth/btti_sdio.h
    @@ -22,7 +22,7 @@
     #define SDIO_BLOCK_SIZE                        128
     
     #define TIDRV_BT_RX_PACKET_BUFFER_SIZE         (HCI_MAX_FRAME_SIZE)
    -#define TIDRV_SIZE_OF_CMD_BUFFER         (251)
    +#define TIDRV_SIZE_OF_CMD_BUFFER         (247)
     
     #define MAX_RX_PACKET_SIZE     (((min_t (int, TIDRV_BT_RX_PACKET_BUFFER_SIZE, \
                            TIDRV_SIZE_OF_CMD_BUFFER) + SDIO_HEADER_LEN \

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

    它无法按预期工作、但仍会出现以下错误:

    [203.235760]蓝牙:[BT SDIO HCI] TX 错误:错误的 skb 长度 259:251
    [ 203.235772]蓝牙:[BT SDIO HCI] TX、错误发送数据包

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

    尊敬的 Kaiwen:

    正如测试一样、您是否能够使用 UART 驱动程序实现同样的功能? 您是否遇到同样的问题? 我正在尝试将此问题隔离到 SDIO 或 UART 驱动器或固件上。

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

    尊敬的 Sabeeh:

    我已尝试使用 UART 驱动程序继续执行相同的测试、但无法发现任何 HCI 器件。

    我还尝试捕获 cc3351 固件日志、这可能有助于解决此问题。 无法在此处上传二进制文件、我会通过电子邮件发送。

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

    尊敬的 Sabeeh:

    我认为您在另一篇文章中提供的路径可以解决这个问题。 现在可以关闭。 谢谢!

    /cfs-file/__key/communityserver-discussions-components-files/968/ble_5F00_clamp.patch