Part Number:CC2640R2FOther 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.c, rcosc_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例程中,这样使用还是出现连接失败的情况
感谢回复
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
您好,
要在特定 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
请您先验证下是否按照该部分中的说明实现了所需行为?
,
lily:
您好
我仔细对比了simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/ble-stack-3.x/custom-hardware.htm这个文档和
TI Provided Board Files — SimpleLink 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例程进行测试,看一下情况
感谢回复
,
Cherry Zhou:
好的我们跟进给工程师看下。
,
Cherry Zhou:
您好,
您试下用最新版本的 SDK (5.30)来实现无晶振运行, 1.40 SDK 是在很久以前推出的,SDK 在之后的版本中增加了许多改进/功能和错误修复。
建议您从非 OAD simple_peripheral 开始并使能无晶振操作。 验证之后,建议转到 OAD simple_peripheral 示例。 这可以确保我们遵循正确的过程来使能无晶振操作。
,
lily:
使用官方的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,还有办法吗?
感谢回复
,
Cherry Zhou:
好的我们跟进给工程师看下。
,
YiKai Chen:
CC2640R2F要做onchip OAD有點太勉強,建議改用CC2642R
,
lily:
条件受限,需要使用YFV封装
,
Cherry Zhou:
lily 说:,但是结果仍然是报错(连接失败)。
您之前说报错,是具体什么时候报错?是与未修改的示例一起发生的,还是与已修改 RCOSC 的示例一起发生的?
,
lily:
使用simplelink_cc2640r2_sdk_1_40_00_45这个版本的OAD ONCHIP例程
我试过将原版官方例程导入CCS然后直接编译烧写到板子(硬件上已经没有32.768K晶振)上测试,是可以用手机app扫描到设备名为“SBP OAD APP v001”的设备,但是在建立连接的时候失败,至于具体的错误代码我没有关注(没有预留调试口),这个过程你们可以重现去分析一下
然后,是在这个的基础上去做相关与RCOSC相关的改动(如提问),测试结果与未做修改时类似(从现象上看是一样),也是可以扫描到设备名为“SBP OAD APP v001”的设备,但是建立连接也是失败的
,
YiKai Chen:
我用simplelink_cc2640r2_sdk_5_30_00_03的simple_peripheral例程去做相关与RCOSC相关的改动然後跑在LAUNCHXL-CC2640R2F上,是可以扫描到设备也可以建立连接的,給你參考一下
,
lily:
我原本就是使用的simple_peripheral例程,在这个例程上去修改rcosc是没有问题的,只是现在项目需求要加OAD。
那就2种方式选择,1是直接使用OAD ONCHIP例程,修改rcosc,再把功能移植过去;2是在已经修改了rcoscsimple_peripheral例程上加OAD
他们都建议的是使用第1种方法,所以我现在是第一步,先把OAD ONCHIP例程修改rcosc。结果就卡在第一步了
,
YiKai Chen:
lily 说:卡在第一步了
是指那一步?
,
lily:
卡在“在OAD onchaip这个例程上完成RCOSC相关的修改”这一步
参照指引文档中Using 32-kHz Crystal-Less Mode部分的内容(这部分内容针对的应该是simple peripheral例程,而OAD onchip与simple peripheral的工程文件结构也不完全一样),对OAD onchip例程进行修改,但是修改完后的测试结果和不修改的时候类似(一样),所以我是怀疑我参照文档对OAD onchip例程的修改是不正确的,想询问验证一下
,
Cherry Zhou:
您好,
不知道您的问题是否有解决?
,
lily:
并没有
,
Cherry Zhou:
好的明白了,那这样吧,麻烦您整理下您目前的问题,我们一起升级到英文论坛来给工程师看下,是否方便?