TI中文支持网
TI专业的中文技术问题搜集分享网站

[FAQ] 在CC2640中进行片外OAD时flash用完的问题

Q: When I tried to implement OAD in the project, I encountered a problem with the flash size: my original firmware covers about 2/3 of the final function, the stack used is 69.6k, and the application is 47.4k.

App:

name

original

length

used

Unused

Attributes

filling

———————-

——–

———

——–

——–

—- 

——–

FLASH

00000000 0000cfff 0000bdb2 0000124d R X

FLASH_LAST_PAGE

0001f000 00001000 00000058 00000fa8 R X

Stack:

name

original

length

used

Unused

Attributes

filling

———————-

——–

———

——–

——–

—- 

——–

FLASH

0000d000 00012000 0001163c 000009c4 R X

 

When I want to implement OAD in SBP mode, I lost the flash page 0. I need to run the operating system from flash instead of ROM? When using this setting, the flash size is not enough.

The program and available memory do not match. The alignment placement of the ".cinit" part with a size of 0x9ee failed. Available memory range:

   FLASH

Size: 0xafff

Unused: 0x1

Maximum: 0x1       

 

   FLASH_LAST_PAGE 

Size: 0x1000

   Unused: 0x8

Maximum: 0x4      

 

Is the situation different for the Sensor TagOAD sample? Can I run the operating system from ROM? (For the difference between SBP and Sensortag OAD, please see here ). When the ROM is included in my build, it will consume 4.8k of flash. Is this possible?

Do you think there are other ways to save flash?

A: As stated in the document, since RCFG has been fixed in page 0, RTOS must be built for flash instead of ROM.

Have you tried reducing stack features, such as OSAL SNV or disabling pairing/bonding support? This will free up more flash space.

 

 

Q: 我了解ROM操作系统需要访问页面0。但是在SensorTag OAD模式下,应用程序可自由使用页面0(“-应用程序映像始于0x00000”),请参阅此处。

在SensorTag示例中,我在文件

C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\SensorTag\CC26xx\CCS\Config\appBLE.cfg中找到了两行

且SensorTag已启用OAD,对吗?

从sensorTag的映射文件中:该应用程序使用地址0x0 …0000dfff,因此应该可在ROM中使用操作系统,对吗?

 FLASH                00000000   0000dfff  0000bd80  0000227f  R  X

这让我认为sensorTag应用程序使用ROM中的操作系统并启用了OAD,对吗?

节省flash空间的其他方法:您让我查阅《软件开发人员指南》的“10.4.1最小化flash使用率”一章。感谢您的提示,我将查看此章节内容。

 

A: 是的,对于OAD,SensorTag的确在ROM配置中使用RTOS。但是,请注意:如果在擦除扇区0或未完全编程时发生诸如复位或断电事件之类的故障,则该器件将无法引导到软件,因为复位向量表将无效。这种状态下,除非通过JTAG或串行编程器恢复软件,否则该器件将被视为无法操作。SensorTag是一个演示和应用程序开发平台,因为它由DevPack调试器进行升级,因此可能会承担此风险。

除非您的产品上具有适当的调试/flash编程接口,否则我建议在OAD的Flash配置中使用推荐的RTOS。

 

Q: 如果在OAD期间易受影响时间内发生错误/重置(在擦除flash之后才将其完全写入),我们很清楚非引导器件的风险。但是我们不希望发生此类情况。我们有一个电池供电器件,因此不会发生开机/故障重置。如果flash写入本身导致重置,则推荐的OAD也将卡在永久的BIM中。因此,我们决定采用OAD的Sensor Tag理念。

仍然有几个问题需请教:

–       CCFG面积如何?通常来讲,闪存中的用户ccfg面积位于最后一页,与BIM相同,无法使用OAD更新。这是否意味着我无法对ccfg标志进行任何更改?在Sensor Tag中,ccfg链接到地址0x0003C,所以在页面0上。。这可能吗?在这篇贴子此处中,我了解到ccfg范围必须在flash的最后一页,因为“ROM code”也访问这些地址。我可以使用页面0来保存ccfg初始化程序吗?

–       BIM位于闪存(0x1F000)的最后一页,目前使用2.3kByte,因此该页面中仍有1.7k未使用。我也许可以将此区域用于BIM和应用程序的常用函数,即访问外部ROM或常量或字符串,是吗?

 

A:

CCFG面积如何?通常来讲,闪存中的用户ccfg面积位于最后一页,与BIM相同,无法使用OAD更新。这是否意味着我无法对ccfg标志进行任何更改?

从技术上讲,您可写入1's到0's的位以继续更新CCFG面积,但我们建议不要这样做。CCFG不会更改,但新的TI RTOS / driverLib版本可能会扩展CCFG(朝着下级地址),以支持软件添加的新功能、故障修复或性能改进。如果此处还有其他数据,那么对于这些功能,可能会将0's解释为“enable”,这可能会产生不良影响。

在Sensor Tag中,ccfg链接到地址0x0003C,所以在页面0上。这可能吗?在这篇贴子此处中,我了解到ccfg范围必须在flash的最后一页,因为“ROM代码”也访问这些地址。我可使用页面0来保存ccfg初始化程序吗?

您在哪里看到CCFG链接到0x3C?CCFG应该位于flash的末尾处,对于SensorTag项目,它仅由BIM项目链接。

Boot ROM会读取此区域,并检查是否应启用JTAG,配置flash擦除/写入锁定,并检查是否设置了flash映像有效字段。

这是通过读取地址0x50003000来完成的,该地址始终映射到最后一个flash page。

–       BIM位于闪存(0x1F000)的最后一页,目前使用2.3kByte,因此该页面中仍有1,7k未使用。我也许可以将此区域用于BIM和应用程序的常用函数,即访问外部ROM或常量或字符串,是吗?

 

从理论上讲,您可以这样做。但是请注意:如果CCFG结构在后续版本中进行了扩展,则应在CCFG结构之前释放数百个字节。

 

Q:

您在哪里看到CCFG链接到0x3C?CCFG应该位于闪存的末尾处,对于SensorTag项目,它仅由BIM项目链接。

Boot ROM会读取此区域,并检查是否应启用JTAG,配置闪存擦除/写入锁定,并检查是否设置了闪存映像有效字段。

这是通过读取地址0x50003000来完成的,该地址始终映射到最后一个flash page。

当我编译原始的SensorTag项目配置“FlashOnlyOAD”时,

  0000003c    0000003c    00000058   00000058    r– .ccfg

我在映射文件中看到。这可能来自/SensorTag/Startup/ccfg_appBLE.c文件,其作为项目的一部分并且包括ccfg.c文件。

除此之外,

  0001ffa8    0001ffa8    00000058   00000058    r– .ccfg

 

在BIM的映射文件中也发现了这一现象。这是否意味着ccfg在Flash中变为两倍?

对于SBP OAD示例,还有另一件事我不理解:如OAD用户指南中所述,在激活OAD的情况下编译原始SimpleBLEPeripheral示例时,BIM链接在页面0(IVEC_FLASH,地址0x0)和第31页(FLASH)中。页面0中只有向量表(.TI.bound:resetVectors,长度0x3C),所有功能都在页面31中,始于地址0x1F000(LoaderEntry,长度0xF06)。另外,ccfg部分位于页面31(地址0x1ffa8,长度0x58.ccfg)。

这是否意味着以SBP OAD方式,在Flash的操作系统中我丢失了页面0、页面31以及4.9k的空间?

为什么我不能将BIM功能链接到页面0?

BIM的BIM_ExtFlash.map.txt映射文件

 

A: 与IAR一样,应在OAD构建中将ccfg_appBLE.c排除在SensorTag外。您可简单地从构建中排除SensorTag中的一个。

在页面0中,BIM项目将在页面0中放置一组重置矢量,并在页面31中放置BIM图像。合并图像时,不会使用BIM图像的重置矢量,据我所知,其仅用于调试。。

页面0中包含BIM将阻止您升级此页面,因为您无法从要擦除的位置执行代码。

Q:

在页面0中,BIM项目将在页面0中放置一组重置矢量,并在页面31中放置BIM图像。合并图像时,不会使用BIM图像的重置矢量,据我所知,其仅用于调试。。

页面0中包含BIM将阻止您升级此页面,因为您无法从要擦除的位置执行代码。

OAD的SensorTag方式可能正确,是吗?但是我在SimpleBLEPeripheral项目中观察到了这一点。您能否将成功构建的带有OAD项目的SBP的Application,Stack和BIM项目的映射文件发送给我?我希望看到BIM在页面0,Application在页面1… x,Stack在页面x…30,ccfg在31页上。从Flash运行操作系统。

对于OAD的Sensor Tag方式,我希望Application在页面0 … 页面x,Stack在x…30,BIM和ccfg在页面31,操作系统在ROM中。

这是否正确?

 

A: 请随意按照SensorTag项目的方式进行OAD。CCS项目的名称可能错误,因为它实际上是FlashROM。

*链接器文件:cc26xx_ble_app_oad.cmd

*链接器定义:APP_BASE=0x00000

* appBLE.cfg uses ROM + M3Hwi.resetVectorAddress = 0x0;

*来自Profiles\OAD\CC26xxST\oad.c和Profiles\OAD\CC26xxST\oad_target_externalFlash.c的OAD配置文件

BIM项目在这里也有所差异。

*构建配置FlashOnly_SensorTag->未定义precompiler define KEEP_INTVECS。

这应该将BIM(不再是真正的BIM,仅是BaseLoader)与CCFG一起放在扇区31中,并使扇区空间耗尽。

请注意:完成后必须从OAD调用baseloader,而不是通过重置。这通过OAD\CC26xxST\oad_target_externalFlash.c:: OADTarget_systemReset()完成。

我可能遗漏了一些细节,但这应该可以帮助您入门。

 

Q: 我认为我已安装固件并开始运行。至少,“BIM”现在映射到扇区31,应用程序可以正常启动等。

我现在遇到了另一个问题:显然,从器件监视器或Sensor Tag应用程序传输的数据有所不同。使用设备监视器对器件进行OAD时,我观察到了不太可信的数据。对于SBP和SensorTag OADing方式,协议是否有所不同?在SensorTag应用中,器件不再列出,因为它具有不同的广告名称。如何能将正确的数据发送到我的器件的OAD“master”?

A: 只要您使用HEX文件作为输入,最新的DevMon应该会成为一台很好的“主站”。

DevMon根据十六进制文件计算图像的长度、crc和起始地址(发送到Identify特征)。需要注意:DevMon会将其大小四舍五入到下一个整个页面/扇区。

The SensorTag application may always choose 0x0000 as the location where the .bin file should be copied. This is also the case in your use case, but it does not apply to 0x1000 (0x400 words) SimpleBLEPeripheral

Annie Liu:

我们建议您在发布新问题之前先搜索 E2E支持论坛,E2E支持论坛已经拥有数十万个已得到解答的话题。  这通常是解决问题的最快方法。

赞(0)
未经允许不得转载:TI中文支持网 » [FAQ] 在CC2640中进行片外OAD时flash用完的问题
分享到: 更多 (0)