ble4.2一次最多能传输多少字节?

1、链路层数据包格式

在这里插入图片描述
可以看出PDU(协议数据单元)字段长度在2-257字节之间。

2、数据通道PDU

在这里插入图片描述
可以看出,数据通道PUD包含三部分,其中:
Header:包头,2字节;
Payload:数据,变长;
MIC:数据一致性校验,4字节。

3、L2CAP层数据包格式

在这里插入图片描述
可以看出,L2CAP层数据包包含三个部分,其中:
Length:长度,2字节;
Channel ID:信道ID,2字节;
Information payload:变长。

4、Attribute Protocol PDU格式

在这里插入图片描述
可以看出,Attribute Protocol PDU包含三个部分,如下:
Opcode:操作码,1字节;
Attribute Parameters:ATT参数,变长;
Authentication Signature:身份验证签名,如果有,则是12字节。

5、ATT层完整数据包

在这里插入图片描述
所以ATT_MTU最大长度为257-2(Header)-4(MIC)-2(Length)-2(Channel ID)=247

6、ATT层操作符Handle Value Notification(0x1B)

在这里插入图片描述
结合5可以看出,当ATT层操作符为Handle Value Notification(0x1B)时,Attribute Value的最大长度为247-3=244,即每次可以传输的最大字节为244。

7、ATT层操作符Signed Write Command(0xD2)

在这里插入图片描述
结合5可以看出,当ATT层操作符为Signed Write Command(0xD2)时,Attribute Value的最大长度为247-12=235,即每次可以传输的最大字节为235。

8、总结

1、ATT_MTU最大长度为257-2(Header)-4(MIC)-2(Length)-2(Channel ID)=247;
2、ATT层不同的操作符,可以传输的用户字节不同。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个简单的Ble蓝牙4.2协议传输完整用例: 1. 初始化设备并扫描周围的Ble设备。 2. 连接到所需的Ble设备。 3. 发现所需的服务和特征。 4. 启用所需的通知特征以接收数据。 5. 发送数据到写入特征。 6. 监听接收到的数据并进行处理。 7. 断开连接。 下面是一个示例代码片段: ```python # 导入必要的模块和库 from bluepy.btle import Scanner, Peripheral, UUID # 设置所需的UUID和地址 service_uuid = UUID("0000180f-0000-1000-8000-00805f9b34fb") char_uuid = UUID("00002a19-0000-1000-8000-00805f9b34fb") device_address = "00:11:22:33:44:55" # 扫描设备 scanner = Scanner() devices = scanner.scan(5.0) for dev in devices: if dev.addr == device_address: # 连接到设备 device = Peripheral(device_address) # 发现所需的服务和特征 service = device.getServiceByUUID(service_uuid) characteristic = service.getCharacteristics(char_uuid)[0] # 启用通知特征以接收数据 characteristic.write(b"\x01\x00") while True: # 监听接收到的数据并进行处理 if device.waitForNotifications(1.0): continue print("Waiting...") # 断开连接 device.disconnect() ``` 在上面的示例中,我们使用了Python的bluepy库来实现Ble蓝牙4.2协议传输完整用例。我们首先使用Scanner类扫描周围的设备,然后使用Peripheral类连接到所需的设备,并使用getServiceByUUID()和getCharacteristics()方法发现所需的服务和特征。接下来,我们使用write()方法启用通知特征以接收数据,并使用waitForNotifications()方法监听接收到的数据并进行处理。最后,我们使用disconnect()方法断开连接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值