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.

[参考译文] CC2652R:SysConfig 生成的扫描响应数据错误

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1180183/cc2652r-sysconfig-generated-scan-response-data-wrong

器件型号:CC2652R
Thread 中讨论的其他器件:SysConfigSYSBIOS

如果我在 SysConfig 的扫描响应部分中添加制造商特定数据、则似乎会为制造商数据生成不正确的长度、例如

当我认为它应该为0xF 时、生成一个0x10的长度。

uint8_t scanResData1[]=

0x07、
GAP_ADTYPE_LOCAL_NAME_COMPLETE、
"0"、
"0"、
"0"、
"0"、
"0"、
"0"、

0x05、
GAP_ADTYPE_SLAVE_CONN_INTERVE_RANGE、
LO_UINT16 (24)、
HI_UINT16 (24)、
LO_UINT16 (40)、
HI_UINT16 (40)、

0x10、
GAP_ADTYPE_MANUFACTURER_SPECIFIC,
//公司标识符
0x50、
0x54、

//附加数据
0x11、
0x22、
0x33、
0x44、
0x55、
0x66、
0x77、
0x88、
0x99、
0xAA、
0xbb、
0xcc、

};

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

    您好、Martin、

    您使用的是哪个 SDK 版本? 我无法在 最新的 SDK 上重现此内容

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

    我将代码移植到 simplelink_cc13xx_cc26xx_sdk_6_30_01_03。 我很确定、几年前、我在使用旧得多的 SDK 时注意到了这个问题、但成功地解决了这个问题。 使用此版本时,由于长度大于31,因此这次我不能看到错误。

    这是.syscfg 文件:

    /**
    *生成此文件时使用了这些参数。 它们将自动应用于后续加载
    *通过 GUI 或 CLI。 使用'--help'运行 CLI 以获取有关如何覆盖这些参数的其他信息。
    *@客户端-器件"CC2642R1FRGZ"-封装"RGZ"-器件"默认"-RTOS "tirtos7"-产品" simplelink_cc13xx_cc26xx_sdk@6.30.01.03 "
    *@版本{"工具":"1.14.0+2667"}
    *

    /**
    *导入此配置中使用的模块。
    *
    const ble = scripting.AddModule ("/ti/ble5stack/ble);
    const CCFG = scripting.AddModule ("/ti/devices/CCFG);
    const rfdesign = scripting.AddModule ("/ti/devices/radioconfig/rfdesign);
    const Display = scripting.AddModule ("/ti/display/Display);
    const Display1 = Display.addInstance();
    const AESCM=scripting.AddModule ("/ti/drivers/AESCCM);
    const AESCM1 = AESCM.addInstance();
    const AESCTRDRBG = scripting.AddModule ("/ti/drivers/AESCTRDRBG);
    const AESCTRDRBG1 = AESCTRDRBG.addInstance();
    const AESECB = scripting.AddModule ("/ti/drivers/AESECB);
    CONST AESECB1 = AESECB.addInstance();
    const ECDH = scripting.AddModule ("/ti/drivers/ECDH);
    const ECDH1=ECDH.addInstance();
    const GPIO = scripting.AddModule ("/ti/drivers/GPIO);
    const GPIO1 = GPIO.addInstance();
    const GPIO2 = GPIO.addInstance();
    const GPIO15=GPIO.addInstance();
    const GPIO16=GPIO.addInstance();
    const GPIO17 = GPIO.addInstance();
    const Power = scripting.AddModule ("/ti/drivers/Power);
    const rf = scripting.AddModule ("/ti/drivers/RF);
    const SPI = scripting.AddModule ("/ti/drivers/SPI、{}、false);
    CONST SPI1 = SPI.addInstance();
    const SPI2 = SPI.addInstance();
    const TRNG = scripting.AddModule ("/ti/drivers/TRNG);
    CONST TRNG1=TRNG.addInstance();
    const 计时器= scripting.AddModule ("/ti/drivers/Timer、{}、false);
    const Timer1 = Timer.addInstance();
    const Timer2 = Timer.addInstance();
    const Timer3 = Timer.addInstance();
    const Timer4 = Timer.addInstance();
    const UART2 = scripting.AddModule ("/ti/drivers/UART2、{}、false);
    const UART21 = UART2.addInstance();
    const UART22=UART2.addInstance();
    const Watchdog = scripting.AddModule ("/ti/drivers/Watchdog、{}、false);
    const Watchdog1= Watchdog.addInstance();
    const Settings = scripting.AddModule ("/ti/posix/tirtos/Settings);
    const BIOS = scripting.AddModule ("/ti/sysbios/BIOS);
    const GateMutexPri = scripting.AddModule ("/ti/sysbios/gates/GateMutexPri);
    const HeapCallback = scripting.AddModule ("/ti/sysbios/heaps/HeapCallback);
    const Event = scripting.AddModule ("/ti/sysbios/knl/Event);
    const Idle = scripting.AddModule ("/ti/sysbios/knl/Idle、{}、false);
    const Idle2 = idle.addInstance();
    const Mailbox = scripting.AddModule ("/ti/sysbios/knl/Mailbox);
    const 错误= scripting.AddModule ("/ti/sysbios/runtime/Error);
    const SysCallback = scripting.AddModule ("/ti/sysbios/runtime/SysCallback);
    const 时间戳= scripting.AddModule ("/ti/sysbios/runtime/Timestamp);

    /**
    *将自定义配置值写入导入的模块。
    *
    bLE.lockProject = true;
    bLE.extAdv = false;
    ble.defaultTxPower ="HCI_EXT_TX_POWER_5_DBM";
    ble.deviceName ="000000";
    BLE.maxConnNum = 1;
    BLE.maxPDUNum = 3;
    BLE.maxPDUSize = 90;
    bLE.bonding = false;
    BLE.allowDebugKeys = false;
    BLE.disableDisplayModule = true;
    bLE.tbmActiveItemsOnly = false;
    ble.noOsalSnv = true;
    bLE.radioConfig.codeExportConfig.$name ="ti_devices_radioconfig_code_export_param0";
    ble.connUpdateParamsPeripheral.$name ="ti_ble5stack_general_ble_conn_update_params0";
    BLE.connUpdateParamsPeripheral.reqMinConnInt = 30;
    BLE.connUpdateParamsPeripheral.reqMaxConnInt = 50;
    BLE.connUpdateParametersPeripheral.reqConnTo = 3000;
    ble.advSet1.$name ="ti_ble5stack_broadcaster _advertising_set0";
    ble.advSet1.advParam1.$name ="ti_ble5stack_Broadcaster 广播_advertising_params0";
    bLE.advSet1.advParam1.txPower ="otherTxPower";
    bLE.advSet1.advParam1.txPowerValue = 5;
    ble.advSet1.advData1.$name ="ti_ble5stack_broadcaster _advertising_Data0";
    BLE.advSet1.advData1.GAP_ADTYPE_FLAGS = true;
    bLE.advSet1.advData1.通告 标志=["GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED "、"GAP_ADTYPE_FLAGS_GENE"];
    bLE.advSet1.advData1.ShortenedLocalName ="SP";
    bLE.advSet1.advData1.numOfUIDs16More = 1;
    BLE.advSet1.advData1.UID016More = 0xFFF0;
    BLE.advSet1.advData1.GAP_ADTYPE_16BIT_COMPLETE = true;
    bLE.advSet1.advData1.numOfUIDs16Complete = 1;
    BLE.advSet1.advData1.UID016Complete = 0xC0C0;
    ble.advSet1.scanRes1.$name ="ti_ble5stack_broadcaster 广播_data1";
    BLE.advSet1.scanRes1.GAP_ADTYPE_SLAVE_CONN_INTERVE_RANGE = true;
    BLE.advSet1.scanRes1.minConnInterval = 30;
    BLE.advSet1.scanRes1.maxConnInterval = 50;
    BLE.advSet1.scanRes1.GAP_ADTYPE_MANUFACTURER_SPECIFIC= true;
    ble.advSet1.scanRes1.companyIdentifier = 0x5054;
    BLE.advSet1.scanRes1.GAP_ADTYPE_LOCAL_NAME_COMPLETE =真;
    BLE.advSet1.scanRes1.additionalData ="0x112233445566778899AABBCC";
    ble.advSet2.$name ="ti_ble5stack_broadcaster _advertising_set1";
    ble.advSet2.advParam2.$name ="ti_ble5stack_Broadcaster _advertising_params1";
    ble.advSet2.advData2.$name ="ti_ble5stack_Broadcaster _advertising_data2";
    BLE.advSet2.advData2.GAP_ADTYPE_FLAGS = true;
    bLE.advSet2.advData2.通告 标志=["GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED "、"GAP_ADTYPE_FLAGS_GENE"];
    bLE.advSet2.advData2.numOfUIDs16More = 1;
    BLE.advSet2.advData2.UID016More = 0xFFF0;
    bLE.advSet2.advData2.gap_ADTYPE_16BIT_COMPLETE = true;
    bLE.advSet2.advData2.numOfUIDs16Complete = 1;
    BLE.advSet2.advData2.UID016Complete = 0xC0C0;
    ble.advSet2.scanRes2.$name ="ti_ble5stack_Broadcaster 广播_data3";
    BLE.advSet2.scanRes2.GAP_ADTYPE_LOCAL_NAME_COMPLETE =真;
    BLE.advSet2.scanRes2.GAP_ADTYPE_SLAVE_RANGE = true;
    BLE.advSet2.scanRes2.minConnInterval = 30;
    BLE.advSet2.scanRes2.maxConnInterval = 50;
    BLE.advSet2.scanRes2.GAP_ADTYPE_MANUFACTURER_SPECIFIC= true;
    ble.advSet2.scanRes2.companyIdentifier = 0x0000;
    BLE.advSet2.scanRes2.additionalData ="0x112233445566778899AABBCC";

    CCFG.enableBootloaderBackdoor = true;
    CCFG.DIoBootloaderBackdoor = 13;
    CCFG.levelBootloaderBackdoor ="低电平有效";
    CCFG.ccfgTemplate。$name ="ti_devices_CCFG_CCFGCC26XXTemplate0";

    Display1.$name ="CONFIG_Display_0";
    Display1.enableANSI = true;
    Display1.uartBufferSize = 128;
    Display1.displayType ="主机";
    Display1.maxPrintLength = 16;

    AESCM1.$name ="CONFIG_AESCM0";

    AESCTRDRBG1.$name ="CONFIG_AESCTRDRBG_0";
    AESCTRDRB1.aesctrObject.$name ="CONFIG_AESCTR_0";

    AESECB1.$name ="CONFIG_AESECB0";

    ECDH1.$name ="CONFIG_ECDH0";

    GPIO1.$name ="Board_flash_CS";
    GPIO1.initialOutputState ="高电平";
    GPIO1.MODE ="输出";
    GPIO1.gpioPin。$assign ="焊球.31";

    GPIO2。$name ="Board_flash_enable";
    GPIO2.MODE ="输出";
    GPIO2.initialOutputState ="高电平";
    GPIO2.gpioPin。$assign ="焊球.26";

    GPIO15.$name ="Board_蜂 鸣器";
    GPIO15.MODE ="输出";
    GPIO15.gpioPin。$assign ="焊球.18";

    GPIO16.$name ="Board_PModule_SPI_Config_CS";
    GPIO16.MODE ="输出";
    GPIO16.gpioPin。$assign ="焊球.32";

    GPIO17.$name ="Board_PModule_Ext_CS";
    GPIO17.MODE ="输出";
    GPIO17.initialOutputState ="高电平";
    GPIO17.gpioPin。$assign ="焊球.21";

    SPI1.$name ="CONFIG_SPI_0";
    SPI1.SPI.$assign ="SSI0";
    SPI1.SPI.SPI.sclkPin。$assign ="ball。7";
    SPI1.SPI.MISO 引脚$assign ="焊球.5";
    SPI1.SPI.MOSIPin。$assign ="焊球.6";
    SPI1.SPI.dmaRxChannel.$assign ="DMA_CH3";
    SPI1.SPI.dmaTxChannel.$assign ="DMA_CH4;

    SPI2.$name ="CONFIG_SPI_1";
    SPI2.SPI.$assign ="SSI1";
    SPI2.SPI.SPI.sclkPin。$assign ="焊球.30";
    SPI2.SPI.SPI.MISO 引脚$assign ="焊球.28";
    SPI2.SPI.SPI.MOSIPin。$assign ="B焊 球.29";
    SPI2.SPI.SPI.dmaRxChannel.$assign ="DMA_CH16";
    SPI2.SPI.SPI.dmaTxChannel.$assign ="DMA_CH17";

    TRNG1.$name ="CONFIG_TRNG_0";

    Timer1.$name ="CONFIG_TIMER_0";
    Timer1.useGPTimer = true;
    Timer1.timerInstance.$name ="CONFIG_GPTIMER_0";
    Timer1.timerInstance.timer$assign ="GPTM1";

    Timer2.$name ="CONFIG_TIMER_1";
    Timer2.useGPTimer = true;
    Timer2.timerInstance.$name ="CONFIG_GPTIMER_1";
    Timer2.timerInstance.timer$assign ="GPTM1";

    Timer3.$name ="CONFIG_TIMER_2";
    Timer3.useGPTimer = true;
    Timer3.timerInstance.$name ="CONFIG_GPTIMER_2";
    Timer3.timerInstance.timer$assign ="GPMT2";

    Timer4.$name ="CONFIG_TIMER_3";
    Timer4.useGPTimer = true;
    Timer4.timerInstance.$name ="CONFIG_GPTIMER_3";
    Timer4.timerInstance.timer$assign ="GPMT2";

    UART21.$name ="CONFIG_UART2_0";
    UART21.FlowControl = true;
    UART21.rxRingBufferSize = 128;
    UART21.UART.$assign ="UART0";
    UART21.UART.txt 引脚.$assign ="焊球.16";
    UART21.UART.rxPin。$assign ="焊球.15";
    UART21.UART.ctsPin。$assign ="焊球.17";
    UART21.UART.rtsPin。$assign ="焊球.14";

    UART22.$name ="CONFIG_UART2_1";
    UART22.rxRingBufferSize = 128;
    UART22.UART.$assign ="UART1";
    UART22.UART.txt 引脚.$assign ="焊球.38";
    UART22.UART.rxPin。$assign ="ball.37";

    Watchdog1.$name ="CONFIG_Watchdog_0";
    Watchdog1.watchdog.$assign ="WDT0";

    BIOS.sertsEnabled = false;
    BIOS.rtsGateType ="BIOS_GateMutexPri";
    BIOS.heapSize = 0x00000000;
    BIOS.heapType ="HeapCallback";

    const Hwi = scripting.AddModule ("/ti/sysbios/family/arm/m3/Hwi、{}、false);
    hwi.enableException = false;

    HeapCallback.initFxn ="osalHeapInitFxn";
    HeapCallback.allocInstFxn ="osalHeapAllocFxn";
    HeapCallback.freeInstFxn ="osalHeapFreeFxn";
    HeapCallback.getStatsInstFxn ="osalHeapGetStatsFxn";
    HeapCallback.isBlockingInstFxn ="osalHeapIsBlockingFxn";

    const 时钟= scripting.AddModule ("/ti/sysbios/knl/Clock、{}、false);
    clock.tickPeriod = 10;
    Clock.swiPriority = 5;

    const Timer_1 = scripting.AddModule ("/ti/sysbios/family/arm/cc26xx/Timer、{}、false);
    Timer_1.rtc.$assign ="RTC0";

    Idle2.$name ="powerIdle";
    Idle2.idleFxn ="Power_idleFunc";

    const semaphore = scripting.AddModule ("/ti/sysbios/knl/Semaphore、{}、false);
    Semaphore.supportsPriority = false;

    const Swi = scripting.AddModule ("/ti/sysbios/knl/Swi、{}、false);
    SWI.numPriorities = 6;

    const 任务= scripting.AddModule ("/ti/sysbios/knl/Task、{}、false);
    Task.defaultStackSize = 512;
    task.idleTaskStackSize = 768;
    Task.numPriorities = 6;

    error.policy ="Error_spin";
    error.printDetails = false;

    const System = scripting.AddModule ("/ti/sysbios/runtime/System、{}、false);
    system.abortFxn ="System_abortSpin";
    system.exitFxn ="System_exitSpin";
    System.extendedFormats ="%f";
    system.supportModule ="SysCallback";

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

    您好、Martin、

    我认为31字节有效载荷是源自蓝牙 LE 规范(第2.3.2.2节 SCAN_RSP)的限制。 如果在"事件属性"中将广播设置为"传统"、则会看到此错误。 您必须利用扩展广播负载来发送更多数据。

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

    是的、我知道限制它31、但问题是生成的数组错误。 如果我将"Additional Data"字段设置为0x11、我将得到:

    0x05、
    GAP_ADTYPE_MANUFACTURER_SPECIFIC,
    //公司标识符
    0x50、
    0x54、

    //附加数据
    0x11、

    长度为5而不是4、当 UI 计算长度时、它也使用了错误的长度、因此如果我添加另一个字节、它将生成的最大大小数组为30字节、这会产生错误且不会编译。 在旧版本的 SDK 中、它没有错误地检查长度、因此我可以再添加一个字节并获取大小正确的数组、然后在代码中修复长度字节。

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

    好的、我明白了。 如果您将"附加数据"设置为 0x112233445566778899AABBCC、它将正确生成12个字节的数据、但在长度计算中包含"0x"、并认为它比应有的长1个字节。 如果您将其设置为 不带0x 的112233445566778899AABBCC、它仍会将其解释为十六进制字符串并生成正确的字节和长度。