由于国庆节假期,帖子审批以及工程师回复将会有所延迟,敬请谅解

CC2640R2F: 在simple_peripheral_oad_onchip这个OAD例程上进行RCOSC相关配置

Part Number: CC2640R2F
Other Parts Discussed in Thread: UNIFLASH, CC2642R,

使用的SDK版本是simplelink_cc2640r2_sdk_1_40_00_45

因为硬件的设计是没有使用32.768K的外部晶振,所以之前是使用的simple_peripheral例程中的RCOSC配置

查到SDK中有simple_peripheral_oad_onchip例程,考虑是把功能移植过来,但是应该也需要对这个例程做RCOSC相关的操作

参考这里的步骤来修改:https://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_5_30_00_03/docs/blestack/ble_user_guide/html/ble-stack-3.x/custom-hardware.html#using-32-khz-crystal-less-mode

按照文档指引,如下操作:

1、在bim_oad_onchip_cc2640r2lp_app中将ccfg_app_ble.c状态进行exclude from build操作

2、在simple_peripheral_cc2640r2lp_oad_onchip_app,将相关文件(rcosc_calibration.crcosc_calibration.h and ccfg_app_ble_rcosc.c)直接复制粘贴到simple_peripheral_cc2640r2lp_oad_onchip_app\Application路径下,增加宏定义USE_RCOSC,文档中的其他操作在这个配置的源码中都已经实现。

3、编译时,报错

查找这个函数,发现是有定义的,但不知道为什么报错,重新添加头文件也不行。我就暂时注释掉了RCOSC_enableCalibration()中的语句HCI_EXT_SetSCACmd(500);

3、这样操作完成后发现编译simple_peripheral_cc2640r2lp_oad_onchip_app生成的bin文件会超出0x9000,占用后面的空间,造成在使用UniFlash时报错overlap,因此在宏定义中修改POWER_SAVING_____X取消低功耗,这样就不会超出

4、simple_peripheral_cc2640r2lp_oad_onchip_stack中也修改POWER_SAVING_____X取消低功耗

5、重新编译后,使用UniFlash将3个hex文件、1个bin文件烧写进芯片,使用手机可以扫描到设备名为“SBP OAD APP v001”的设备,点击连接但是一直是建立连接失败。这样情况和代码未做相关修改时类似(测试用的硬件上没有32.768K晶振) 

6、请问这样操作是否正确?如果正确的话,最后结果不正确还有其他原因吗?

7、另外,如果不需要使用低功耗功能,在宏定义中将POWER_SAVING注释或修改,是不是不用做上述的相关的操作就可以直接使用?但是这样似乎是不行的,之前在simple_peripheral例程中,这样使用还是出现连接失败的情况

感谢回复

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    要在特定 SDK 上使能无晶振模式,需要参考该 SDK 的说明。在您的问题中,我们认为在1.40 SDK 上使能无晶振的步骤与在5.30 SDK 上的步骤不同。您可在SDK 安装中的以下位置中找到配置无晶振模式的说明:simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/ble-stack-3.x/custom-hardware.htm

    请您先验证下是否按照该部分中的说明实现了所需行为?

  • 您好

    我仔细对比了simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/ble-stack-3.x/custom-hardware.htm这个文档和

    TI Provided Board Files — SimpleLinkTm CC2640R2 SDK User's Guide for BLE-Stack 3.x.x 3.03.08.00 documentation文档中

    Using 32-kHz Crystal-Less Mode部分的内容,基本上是完全一样的,您也可以去对比一下

    下图是simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/ble-stack-3.x/custom-hardware.htm中相关内容:

    此前我已经按照文档中的操作指引对SDK进行了修改,修改内容和顺序已经在提问中有说明,但是结果仍然是报错(连接失败)。你们可以把硬件上的32.768K拿掉,然后运行标准版本的OAD例程进行测试,看一下情况

    感谢回复

  • 好的我们跟进给工程师看下。

  • 您好,

    您试下用最新版本的 SDK (5.30)来实现无晶振运行, 1.40 SDK 是在很久以前推出的,SDK 在之后的版本中增加了许多改进/功能和错误修复。

    建议您从非 OAD simple_peripheral 开始并使能无晶振操作。 验证之后,建议转到 OAD simple_peripheral 示例。 这可以确保我们遵循正确的过程来使能无晶振操作。 

  • 使用官方的SDK中的C:\ti\simplelink_cc2640r2_sdk_5_30_00_03\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_peripheral_oad_onchip例程

    1、先编译bim_oad_onchip_cc2640r2lp_app

    2、再编译persistent_app_cc2640r2lp

    3、再编译simple_peripheral_cc2640r2lp_oad_onchip_stack

    4、再编译simple_peripheral_cc2640r2lp_oad_onchip_app,报错

    log如下:"C:/ti/simplelink_cc2640r2_sdk_5_30_00_03/source/ti/blestack/common/cc26xx/ccs/cc26xx_app_oad.cmd", line 318: error #10099-D: program will not fit into available memory. placement with alignment fails for section "GROUP_3" size 0x933c . Available memory ranges:
    FLASH size: 0x8f98 unused: 0x11 max hole: 0x3
    "C:/ti/simplelink_cc2640r2_sdk_5_30_00_03/source/ti/blestack/common/cc26xx/ccs/cc26xx_app_oad.cmd", line 327: error #10099-D: program will not fit into available memory. placement with alignment fails for section ".cinit" size 0x329 . Available memory ranges:
    FLASH size: 0x8f98 unused: 0x4 max hole: 0x3
    error #10010: errors encountered during linking; "simple_peripheral_cc2640r2lp_oad_onchip_app_FlashROM.out" not built

    TI Code Composer Studio: Version: 10.1.0.00010 

    TI Code Generation Tools for Arm: TI v18.12.8.LTS

    XDCTools: 3.51.03.28

    查了下资料,参考[EXT_EP-10229] [Build] BLE3 Simple Peripheral OAD on-chip examples fail to compile due to memory limitation with CCS - Software Issue Report (SIR),说是CCS内存限制,无法编译OAD工程

    这样的情况这么解决?如果无法使用最新SDK,还有办法吗?

    感谢回复

  • 好的我们跟进给工程师看下。

  • CC2640R2F要做onchip OAD有點太勉強,建議改用CC2642R

  • 条件受限,需要使用YFV封装

  • ,但是结果仍然是报错(连接失败)。

    您之前说报错,是具体什么时候报错?是与未修改的示例一起发生的,还是与已修改 RCOSC 的示例一起发生的?

  • 使用simplelink_cc2640r2_sdk_1_40_00_45这个版本的OAD ONCHIP例程

    我试过将原版官方例程导入CCS然后直接编译烧写到板子(硬件上已经没有32.768K晶振)上测试,是可以用手机app扫描到设备名为“SBP OAD APP v001”的设备,但是在建立连接的时候失败,至于具体的错误代码我没有关注(没有预留调试口),这个过程你们可以重现去分析一下

    然后,是在这个的基础上去做相关与RCOSC相关的改动(如提问),测试结果与未做修改时类似(从现象上看是一样),也是可以扫描到设备名为“SBP OAD APP v001”的设备,但是建立连接也是失败的

  • 我用simplelink_cc2640r2_sdk_5_30_00_03的simple_peripheral例程去做相关与RCOSC相关的改动然後跑在LAUNCHXL-CC2640R2F上,是可以扫描到设备也可以建立连接的,給你參考一下

  • 我原本就是使用的simple_peripheral例程,在这个例程上去修改rcosc是没有问题的,只是现在项目需求要加OAD。

    那就2种方式选择,1是直接使用OAD ONCHIP例程,修改rcosc,再把功能移植过去;2是在已经修改了rcoscsimple_peripheral例程上加OAD

    他们都建议的是使用第1种方法,所以我现在是第一步,先把OAD ONCHIP例程修改rcosc。结果就卡在第一步了

  • 卡在第一步了

    是指那一步?

  • 卡在“在OAD onchaip这个例程上完成RCOSC相关的修改”这一步

    参照指引文档中Using 32-kHz Crystal-Less Mode部分的内容(这部分内容针对的应该是simple peripheral例程,而OAD onchip与simple peripheral的工程文件结构也不完全一样),对OAD onchip例程进行修改,但是修改完后的测试结果和不修改的时候类似(一样),所以我是怀疑我参照文档对OAD onchip例程的修改是不正确的,想询问验证一下

  • 您好,

    不知道您的问题是否有解决?

  • 好的明白了,那这样吧,麻烦您整理下您目前的问题,我们一起升级到英文论坛来给工程师看下,是否方便?