咸鱼346 2023-10-20 20:34 采纳率: 50%
浏览 16

ST17H66芯片(BLE)

在开发过程中遇到一些问题,想不明白,希望请教一下您。怎么解决产品量产时的设备地址问题呢?就是比如说在开发的时候是对着一块板进行开发的,程序中MAC地址是固定的,是不变化的。如果把这个程序用到量产,那就有全部板子都是同一个地址的。那就会出现一种情况:在一个范围内有A、B、C三个产品,这三个产品因为都是同样的,里面程序也是一样的,mac地址也是一样的,那如何能够将它们区分呢,连接的时候怎么知道自己连的是哪一个呢?换句话说就是处理这个设备地址的代码思路应该是怎样呢,能够实现使开发出来的产品既能区别与其它蓝牙(在搜索时只显示本产品的蓝牙信息,附近的其它蓝牙要过滤掉),而且每个产品都是能够单独连接使用。希望得到您的指点,十分期待您的回复,祝工作顺利、生活美满。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-20 22:09
    关注

    【以下回答由 GPT 生成】

    【问题分析】 该问题涉及如何解决ST17H66芯片(BLE)在产品量产时的设备地址问题。开发阶段使用的是一块开发板,MAC地址是固定且不变化的,但在量产阶段,所有板子都具有相同的MAC地址,导致无法区分不同产品的蓝牙信息,同时也无法实现产品的独立连接和使用。

    【解决方案】 针对该问题,可以采取以下解决方案:

    1. 使用唯一的设备标识符:为每个产品分配唯一的设备标识符(Device Identifier),可通过软件或硬件手段实现。设备标识符可用来区分不同产品的蓝牙信息。

    2. 修改设备地址生成的方式:通过修改设备地址的生成方式,使其适用于量产阶段。具体步骤如下:

    3. 定义设备地址的生成规则:可以选择根据产品类型、序列号等固定信息来生成设备地址。这样可以保证不同产品的设备地址是不同的。

    4. 生成设备地址的方法:根据定义的生成规则,编写相应的代码生成设备地址。可使用一些特定算法、随机数生成器等来实现。

    5. 存储设备地址:将生成的设备地址存储在芯片的非易失性存储器(如Flash)中,确保每次启动设备都能读取到正确的设备地址。

    6. 使用广播包筛选:通过在广播包中添加特定的标识符,来识别和过滤出本产品的蓝牙信息。具体步骤如下:

    7. 在广播包中添加厂商特定数据:在广播包中添加特定的厂商特定数据字段,可以使用厂商特定的ID或其他标识符。开发阶段时,每个开发板的标识符相同;在量产时,将为每个产品分配不同的标识符。

    8. 根据厂商特定数据进行过滤:在扫描其他蓝牙设备时,根据厂商特定数据进行筛选,只显示包含特定标识符的设备信息。

    9. 建立连接时的认证:通过在建立连接时进行认证,来确保连接的设备是本产品的设备。具体步骤如下:

    10. 设计认证流程:在建立连接时,进行认证操作,可以使用一些安全算法(如AES加密)来保证认证的安全性。

    11. 进行连接认证:在手机端和芯片端分别实现认证代码,对连接进行双向认证,保证连接的安全性和可靠性。

    12. 根据认证结果进行处理:在认证成功后,才能进行正常的数据交互和使用。可以使用认证结果进行后续操作的控制和判断。

    【代码示例】 这里给出一个示例代码,在生成设备地址的过程中使用了特定算法(示意),以及在广播包中添加了特定的厂商特定数据示意:

    #include <stdint.h>
    #include <stdlib.h>
    
    // 定义设备标识符长度
    #define DEVICE_IDENTIFIER_LENGTH 4
    
    // 生成设备地址的函数
    void generateDeviceAddress(uint8_t *deviceAddress) {
      // 根据生成规则生成设备地址示例使用随机数生成
      for (int i = 0; i < DEVICE_IDENTIFIER_LENGTH; i++) {
        deviceAddress[i] = rand() % 256;
      }
    }
    
    // 修改广播包的函数在广播包中添加厂商特定数据
    void modifyAdvertisingPacket(uint8_t *advertisingPacket, uint8_t *deviceAddress) {
      // 在广播包中添加厂商特定数据字段
      // 假设厂商特定数据字段长度为 3
      advertisingPacket[0] = 0xFF;  // 厂商特定数据类型
      advertisingPacket[1] = deviceAddress[0];  // 厂商特定数据字段 1
      advertisingPacket[2] = deviceAddress[1];  // 厂商特定数据字段 2
      advertisingPacket[3] = deviceAddress[2];  // 厂商特定数据字段 3
      // 添加其他广播包数据
    }
    

    请注意,以上只是一个示例,具体的代码实现需要根据具体的开发环境和需求进行调整。



    【相关推荐】


    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7575770
    • 除此之外, 这篇博客: 汇承4.0蓝牙BLE串口助手HC-COM的使用方法及出错的原因和改正方法中的     乍一看,我们发送1的时候,只返回了一个1 ,发送0的时候,只返回了一个0,那单片机接收的其他信息是从何而来的呢?,为啥手机没有显示返回的其他信息呢?对此我进行了大量的实验,最终发现这个app,它一次发送实际上是发送20位,什么意思呢? 当我们输入一个1点击发送的时候,它实际上发送的是1000 0000 0000 0000 0000,也就是说当我们输入的数据的位数不足20位时它会自动补零,这就解释了为什么LED灯不会常亮,只会闪一下,因为在接收完我们发送的1后,它又接收了19个0,把这20个数据返回我们手机上的时候,它这个app把它补得这19个0又以空格的格式进行显示,而不是显示0(有点坑)。 部分也许能够解决你的问题。

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月20日

悬赏问题

  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme