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.

[FAQ] [参考译文] [常见问题解答] OAD 已知问题和修复程序

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/770512/faq-oad-known-issues-and-fixes

一般已知问题和修复、适用于 cc13xx 和 cc26xx

1.设备在 OAD 成功后无法重新启动

答:拔下/重新插入或硬复位将修复此问题、器件将正常启动。

7.0.48.0发行版之前的仿真工具包存在错误。 当 JTAG 断开连接时、该错误会导致处理器在下一次启动时进入启动暂停(HIB)模式。 对于 OAD,即在 OAD 结束时发出 HAL_SYSTEM_RESET()。 下面显示了两个波形(LEFT = HIB、RIGHT = NORMAL JTAG DISCONNECT):

simplelink_cc13x2_26x2_sdk_2_40_00_81

 使用 Android 8.0.0时、SimpleLink Starter 不会在 BLE 器件列表中显示 CC13x2/CC26x2持久应用。

答:oad_persistent_app.c 中的 advData 具有不正确的长度字段。 来解决这个问题  

从中更改

//广播数据
静态 uint8_t advertData[]=
{
0x02,//此数据
GAP_ADTYPE_FLAGS 的长度,
DEFAULT_DISCOTE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

//服务 UUID,通知中央设备此
外设
中包含哪些服务//,//此数据 GAP_ADTYPE_NOT_SUPPORTED 的长度,
// //一些 UUID,但不是全部
LO_UINT16 (OAD_SERVICE_UUID)、
HI_UINT16 (OAD_SERVICE_UUID)、
//LO_UINT16 (SIMPLEPROFILE_SERV_UUID)、
//HI_UINT16 (SIMPLEPROFILE_SERV_UUID)
;} 

更改为

//广播数据
静态 uint8_t advertData[]=
{
0x02,//此数据
GAP_ADTYPE_FLAGS 的长度,
DEFAULT_DISCOTE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

//服务 UUID,通知中央设备此
外设中包含哪些服务
//,//此数据 GAP_ADTYPE_NOT_SUPPORTED 的长度
,// //一些 UUID,但不是全部
LO_UINT16 (OAD_SERVICE_UUID)、
HI_UINT16 (OAD_SERVICE_UUID)、
//LO_UINT16 (SIMPLEPROFILE_SERV_UUID)、
//HI_UINT16 (SIMPLEPROFILE_SERV_UUID)
;} 

simplelink_cc2640r2_sdk_1_40_00_45

1. 在第1985行的 oad.c 中替换以下代码  if(idPld->len > (stackImageHeader->stackStartAddr - 1)) 

进行了如下操作  

if ((idPld->len - 1)>= stackImageHeader->stackStartAddr) 

simplelink_cc2640r2_sdk_1_35_00_33

在 CCS 工程 OAD_TARGET_cc2640r2lp_app 中、将出现构建错误、并包含以下文本:

错误#10099-D:程序不能放入可用内存中。

答:此错误发生在 OAD_TARGET_cc2640r2lp_app 项目的链接阶段。 问题本身是由于链接器希望将应用程序的.text 段放入一个连续块中。 这是不可能的、因为内存中没有足够大的空洞来容纳一个块中的所有内存。 存储器中的这个空洞与未使用的存储器不同-未使用的存储器是指所有剩余的可用存储器。

此问题的权变措施是修改链接器命令文件、告知链接器允许它根据单独的对象拆分.text 段、并将它们放置在合适的位置。

实际上、修改链接器命令文件"cc26xx_app_oad_onchip.cmd"、这样就可以了

.text :> FLASH

变为

.text :>> FLASH

simplelink_cc2640r2_sdk_1_30_00_25

在 CCS 工程 OAD_TARGET_cc2640r2lp_app 中、将出现构建错误、并包含以下文本:

错误#10099-D:程序不能放入可用内存中。

答:此错误发生在 OAD_TARGET_cc2640r2lp_app 项目的链接阶段。 问题本身是由于链接器希望将应用程序的.text 段放入一个连续块中。 这是不可能的、因为内存中没有足够大的空洞来容纳一个块中的所有内存。 存储器中的这个空洞与未使用的存储器不同-未使用的存储器是指所有剩余的可用存储器。

此问题的权变措施是修改链接器命令文件、告知链接器允许它根据单独的对象拆分.text 段、并将它们放置在合适的位置。

实际上、修改链接器命令文件"cc26xx_app_oad_onchip.cmd"、这样就可以了

.text :> FLASH

变为

.text :>> FLASH

BLE Stack 2.2.x

IAR OAD 项目在边界更改后崩溃。 要重现此问题,请执行以下操作:

  1. 更改 build_config.opt 以启用可增大堆栈边界的功能(即启用数据长度扩展)
  2. 重新构建 BIM、堆栈和应用项目。
  3. 以相同的顺序加载这些项目。
  4. 请注意、器件将在 BIOS_Start 之后崩溃、这是因为 ICALL_STACK0_ADDR 上的存储器已损坏(0xFF)

答:要解决此问题、请执行以下步骤:

  1. 进入应用项目、右键单击并选择选项
  2. 从左侧窗格中选择链接器
  3. 选择校验和窗格
  4. 取消选中"Fill unused code memory"框
  5. 重新构建应用程序项目。