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:CC2640 -如何将传感器控制器 AUX RAM 配置为通用 SRAM

Guru**** 2562120 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/567048/compiler-cc2640-cc2640---how-to-configure-sensor-controller-aux-ram-as-general-purpose-sram

器件型号:CC2640

工具/软件:TI C/C++编译器

团队、

由于收集和处理的数据数量、我一直在处理一个客户应用、该应用在器件的系统 SRAM 上运行的较少。 我想回收2KB 的存储器映射传感器控制器 AUX RAM、仅供 cm3内核使用、因为其应用中不需要 SCE。

为此、我只需修改链接器.cmd 文件以将该区域添加到存储器中、并将段定义为".scratchpad":

#define AUX_RAM_BASE0x400E0000
#define AUX_RAM_SIZE 0x800

/*系统内存映射*/

内存
{
/*存储在内部闪存中并从内部闪存执行的应用程序*/
闪存(RX):origin = flash_BASE,length = flash_size
/*应用程序使用内部 RAM 进行数据*/
SRAM (rwx):origin = RAM_base,length = RAM_SIZE
/*应用程序将 AUX RAM 用于暂存区数据*/
AUX_SRAM (rwx):origin = AUX_RAM_base,length = AUX_RAM_size
}

//内存中的段分配*/

SECTIONS
{
.text :>闪存
.const :>闪存
.constdata :>闪存
rodata :>闪存
.cinit :>闪存
.pinit :>闪存
init_array :>闪存
.EMB_TEXT :>闪存
.ccfg :>闪存(高电平)

#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc :{}load=flash、run=SRAM、table (BINIT)
#endif
#endif
.data :> SRAM
.bss :> SRAM
sysmem :> SRAM
堆栈 :> SRAM (高)
.nonretenvar:> SRAM
暂存区:> AUX_SRAM
}

然后、在应用程序代码中、我现在可以定义缓冲区并使用这一公认的非连续暂存区:

//在(AUX_RAM)暂存区
中分配一些缓冲区#pragma DATA_SECTION (bufferA、".scratchpad)
char bufferA[512];
#pragma DATA_SECTION (bufferB、".scratchpad)
char bufferB[512];

我可以看到链接器将 AUX_RAM 区域正确分配给.map 文件中的缓冲区

存储器配置

名称 原点长度 已使用 未使用的属性填充
--- ---- ------ ---- ---- --------
闪存 00000000 00020000 00003420 0001cbe0 R X
SRAM 20000000 00005000 0000124b 00003db5 RW X
AUX_SRAM 400e0000 00000800 00000400 00000400 RW X

在基于 TI-RTOS 的示例应用(空闲任务和标准电源管理框架)中、这一切似乎都可以正常使用默认配置。

我还需要做什么才能安全地使用它吗? 是否需要任何其他配置要求来安全执行此操作、例如启用 AUX 时钟和电源域、确保 SCE 内核停止(在 AON_WuC_AUXCTL_SCE_EN_RUN_EN_M 中清零、在 AON_WuC_O_AUXCTL 中清零) 或显式启用 AUX RAM 保持(在 ACFG_WuC_AUXUC_RAM_RET_EN 设置)?

感谢您的建议。

此致、

Garry

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Garry、
    我将与我们的一位专家进行交流、以供审核并与您联系。
    BTW:对 AUX RAM 的访问比对系统 RAM 的访问要慢得多。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Erik 您好!

    感谢您的回答、我期待收到更多反馈。 您还能量化 AUX RAM 访问速度差异、以便让我了解整个情况。 对于此特定客户应用程序、这可能不是问题。

    此致、
    Garry

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Garry、
    AUX 时钟和电源域在启动后默认启用并保持。 SCE 内核停止。 当器件进入待机状态(传感器控制器具有与器件电源模式类似的电源模式)时、TI-RTOS 电源管理器将传感器控制器域(AUX)设置为待机状态(AUX_RAM 保持)。

    我们在办公桌上进行了一些测试、以确定从 AUX_RAM 进出的 memcpy()为2kB (512 x 32位字)的读/写访问时间:
    1个周期= 1/48us。
    AUX RAM 到 MCU RAM = 200us = 9600周期= 18.75周期/ 32位字
    MCU RAM 到 MCU RAM = 36.5us = 1752个周期=每32位字3.42个周期
    MCU RAM 到 AUX RAM = 109us = 5232个周期=每32位字10.21个周期

    应用处理器(AP-cm3)可以在数据传输到 AUX_RAM 时执行其他任务、但如果总线缓冲区在回退写入期间变满、它将使 AP 挂起、直到缓冲区中有可用空间。 将一系列数据写入 AUX_RAM 后、您应该实现一个单一读取访问以确保所有数据都已被写入。 在所有数据都传输到 AUX_RAM 之前、读取访问将使 AP 停止。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Erik、

    这是非常有用的信息。 我们将对此进行测试。

    此致、

    Garry