Thread 中讨论的其他部件:、 CC2540、 CC2650
我正在尝试使用 CC2640实现片上 OAD。 我遵循了 cc2640 BLE OAD 用户指南、当我将 SimpleBLEPeripheral 图像添加到 BLE Device Monitor 时、我收到一条消息"在图像中找不到有效的 OAD 标头。 使用生成的标头"。
当我 对项目不做任何更改时、为什么会获得此结果?
谢谢
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.
我正在尝试使用 CC2640实现片上 OAD。 我遵循了 cc2640 BLE OAD 用户指南、当我将 SimpleBLEPeripheral 图像添加到 BLE Device Monitor 时、我收到一条消息"在图像中找不到有效的 OAD 标头。 使用生成的标头"。
当我 对项目不做任何更改时、为什么会获得此结果?
谢谢
您好、Mario、
感谢您的见解。 我真的很感谢。
我将尽最大努力遵循 CC2640 BLE OAD 用户指南 v2.2.1开箱即用片上示例以及此主题中标注的建议。
这里是我目前所了解的一切。
-我将 CC2650 LP 用于主机、将内部 CC2640板用于目标。
-我主要使用 cc2650lp simple_link 示例代码、但使用 cc2640r2f SDK 中的 BTool 3.0、如该主题中所述。
- cc2650lp_host_test_rel.hex 和 oad_target_cc2650lp_unified.hex 应用程序似乎工作正常。
- BTool 从 cc2650主机成功扫描并建立到 cc2640目标
-对于 OAD Flash_ImageB、我将使用 IAR IDE 构建 cc2650lp/simple_peripheral 项目、如 OAD 指南中所建议。
-如您所见、我需要禁用校验和并注释掉图像标题。 然后、使用 OAD_IMAGE_TOOL 从命令行生成二进制文件。
-由于目标是 CC2640,因此我将设置元数据位置和图像范围以及其他选项,例如:-t onchip -i app -v 0 --usrId BBB -m 0x9000 -r 0x13000
- BTool 似乎对 oad_imgB 满意,因为所有标记为“有效”的字段
- BTool 似乎启动并通过 OAD 进行。
-*但是*,最后我收到错误消息:" :OAD 下载未成功"
嗯、这就是我所在的位置。 我觉得它接近了、但仍然没有成功。
您好、Mario、
是的、我发现0x13000的上限范围是坏的、并且已经对其进行了更改。 我的帖子中的值不正确。 我使用的是0x12000、就像您说的。
我在 oad.c 中的 systemReset()之前添加了 sendStatus() 我在重新构建工作映像时遇到了一些问题、不确定原因、但我会解决这个问题。
我猜我还需要进行一些状态检查、以便在系统重置之前为出站通信提供延迟。 但是、当我到达那里时、我将看到它。
谢谢、
韦恩
我的情况越来越接近。 我可以始终如一地下载 ImgB (simple_Peripheral 项目)
我的问题是/是、我需要注释掉 OAD_TARGET_INTERNAL_FLASH_FLASH_c 中的 imgHdr、以获得"有效"的 ImgB。 但是、对于 ImgA (OAD_TARGET)、需要 imgHdr。 因此、我在其周围添加了一个条件编译器、并使用#ifndef HAL_image_B 我不喜欢它、但 直到我知道发生了什么、它才起作用。
我还在最后一个下载块之后将带有较新代码块的 oad.c 修改为 sendStatus()。
但是,如果我替换 systemReset(),就像新代码一样,BTool 会接收到 OAD_SUCCESS 状态,但在等待目标重置时挂起(因为目标已删除,所以它不会执行此操作)。
-如果我在 systemReset()之前添加新代码,那么 sendStatus()在复位发生之前似乎没有时间发送状态。 BTool 报告 OAD_FAILED。
向前迈出一小步
韦恩
您好、Mario、Wayne、
因此、我快速启动并运行系统、能够成功执行片上 OAD 传输、请注意、我尚未应用我们在该线程中发现的所有修复。
下面是我重现2.2.1的步骤:
IMG_A:
-打开 OAD 目标项目(img_A)
-将 BIM 更改为与 XDS 110 (而非 XDS 100v3)配合使用(通过项目设置)
-将应用程序(img_a)项目更改为不用0xFF 填充空空间(重要! 在 OAD 维基网页+ SDG 上注明)
-使用 OAD Image 工具执行以下操作:
将所有内容合并到一个二进制文件中
将 IMG_A 的元数据插入0x600
-将 IMG_A 刷写到 launchpad 上
一切都很好:)
IMG_B:
-打开 Simple Peripheral Project 并选择 IMG_B 构建配置
-已将项目更改为不使用0xFFs 填充空空间
-在 oad_target_internal_flash.c 中注释掉了图像标题内容、因为我将使用 oad_image 工具插入元数据
-使用 OAD 映像工具生成包含元数据@ 0x9000的二进制文件
-使用二进制加载 BTool、并使用 BTool 在原位修改元数据以使其有效
图像尺寸不正确
版本太低(此值递增)
UID 更改为 B B B B B
将图像发送到 OAD 目标-尽管 BTool 报告了失败(因为我尚未在该线程中应用修复程序)、但目标确实已重置并开始广播新代码。
已使用图像无效服务使 IMG_B 无效、并验证 IMG_A 在复位时是否已开始运行。 生成新 IMG_B 并再次执行 OAD。 除 BTool 报告的故障外、没有其他问题。
希望这对您有所帮助、
反叛分子
你好,Rebel,
非常感谢您对此进行的测试。 很抱歉、我不了解 TI、但我对 TI 的开发有点陌生。
我尝试按照您的指定配置项目选项和 OAD_TOOL 选项。 当我针对 IMG_A 执行此操作时、会出现如下错误:
>> oad_image_tool.exe oad_target_cc2650lp_app.hex oad_target_cc2650lp_stack.hex bim.hex -ob oad_target_cc2650lp_unified.bin -t onchip -i production -v 0 --usrId AAAA -m 0x0600
>> 致命错误:--提供的元数据位置(0x00000600)不为空。 正在退出。
我在指定范围选项( 如-r :0x8000)时遇到相同的错误
我做了哪些错误的事?
谢谢、
韦恩
奇怪的是、我只能:
oad_image_tool.exe oad_target_cc2650lp_app.hex oad_target_cc2650lp_stack.hex bim.hex -usrId AAAA -t onchip -m 0x600 -o unified.hex -ob unified.bin
没有问题。 (确保防止所有项目使用可能是您遇到的问题的0xFF 填充未使用的空间)
请注意、版本将为1、因此 IMG_B 需要更新。 此外、我还将使用来自最新 R2 SDK 的 OAD_IMAGE_TOOL。
您不必使用 range 命令,特别是对于统一的(即 BIM + STACK + IMG_A),堆栈将位于第19->30页,因此如果使用范围,您将会清除该信息。
此致、
反叛分子
你好,Rebel,
我已经尝试了 IMG_A 的 OAD_IMAGE_TOOL 选项、而且可以肯定的是、它会创建没有错误的输出、并且不会注释掉 imgHdr。 尽管有趣的是、控制台输出现在会混乱(这很重要吗?):
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15
[41mX[0m[41mX[0m[41mX[0m[41mX[0m][41mX[0m [41mX
针对 IMG_B
我将项目选项更改为非填充、并注释掉了 imgHdr。
我运行了: oad_image_tool.exe simple_peripheral_cc2650lp_app.hex -ob app_oad.bin -t onchip -i app -v 3 -usrId BBBB -m 0x9000 -r 0x12000
我通过报告的元数据获得成功的结果:
描述:| CRC | CRC-Shdw | imgVer | imgLen | usrId | imgAddr | imgType | stat|
数据:| 0x26FE | 0xFFFF | 3| 9212 | 42:42:42:42| 2404| 01| FF |
我打开 BTool (来自 cc2640r2f SDK 的最新工具):
因此、我替换元数据并编写自己的数据、具体方法是指定:vers:3、 length:2400 (实际上是在我选择"添加元数据"时填入的)、 uid BBBB、 imgType:1
OAD 立即终止。 所以、我设置了一些错误。
韦恩
您好、Mario、
我认为你是对的、可能是你的 IMG_B、我的附件(带 A)
e2e.ti.com/.../application_5F00_img_5F00_b.hex
/cfs-file/__key/communityserver-discussions-components-files/538/IMGA.hex
你好,Rebel,
我下载了 IMG_B、我的 BTool 告诉我元数据无效、因此我通过填充十六进制文件位置0x9000中的所有0xFFs 来创建自己的元数据。 然后、我使用 OAD 映像工具来生成我自己的元数据。
然后我成功下载 IMG_B、看不到任何广播。
然后、我使用闪存编程器刷写 IMG_A。 它广播 OAD 目标映像 A、一切都很好。
然后、我再次使用 BTool 下载 IMG B、图像被拒绝。
因此、使用 IMG_A 和 IMG_B、我甚至无法下载 IMG B。
您是否正在使用 launchpad?
谢谢、
Mario
你好,Rebel,
很遗憾、我没有 cc2640R2F launchpad。 即使它确实起作用、我也希望它能够在 cc2640目标上运行、因为这就是我们的产品将要实现的目标。
以下是文件。 我必须将扩展名更改为 txt 才能发布。
谢谢、
Mario
你好,Rebel,
当我在 FlashROM 配置中运行应用程序时、它会起作用、但当我在 FlashOnly"中运行它时、它不起作用。
如果我能够使您的图像正常工作、那么我的项目不会有问题?
我已将 BLE SDK 安装到另一个目录中进行尝试、但我遇到了相同的问题。
因为我能够使你的图像正常工作、所以现在我更加困惑。
我注意到您的 IMG B 十六进制文件与我的文件不同,如果您没有对 SimplePeripheral 项目进行任何更改,它应该是相同的。
您是否进行过任何更改(除了 commentin _imgHdr struct)或是否按原样使用了它?
谢谢、
Mario