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.

[参考译文] LAUNCHXL2-570LC43:EMIF SDRAM 无 TMS570lc43

Guru**** 2465890 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/664438/launchxl2-570lc43-emif-sdram-acsess-tms570lc43

器件型号:LAUNCHXL2-570LC43
主题中讨论的其他器件:HALCOGEN

我有一个结构。

struct TelemPackStruct{

uint32_t tmMarker;
float32_t wx;
float32_t wy;
float32_t wz;
float32_t M1;
float32_t m2;
float32_t m3;
float32_t q0;
float32_t Q1;
float32_t Q2;
float32_t Q3;
struct BinData
uint32_t 秒 :32;
uint32_t 指示 :8;
uint32_t 模式 :8;
uint32_t modeArea :8;
}binDataTM;

}; 

我需要每秒在 EMIF 中使用不同的值保存这种类型的结构。

我 在 Halcogen 中启用了 EMIF (SDRAM、async1、2、3、pinmux、驱动程序)。

我修改了链接器文件:

内存
{
引导程序(X):origin=0x00000000 length=0x00000020
内核(RX):origin=0x00000020 length=0x00008000
FLASH0 (RX):origin=0x00008020 length=0x001F7FE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
堆栈(RW):origin=0x08000000 length=0x00000800
Kram (RW):origin=0x08000800 length=0x00000800
RAM (RW):origin=(0x08000800+0x00000800) length=(0x0007F800 - 0x00000800)

/*用户代码开始(2)*/
SDRAM (RXW):origin=0x8000000000 length=0x007FFFE0
/*用户代码结束*/
} 

部分
{
.intvecs:{}>向量
闪存受保护区域中的/* FreeRTOS 内核*/
.kernelTEXT align(32):{}>内核
.cinit align(32):{}>内核
.pinit align(32):{}>内核
/*将其余代码转换为用户模式闪存区域*/
.text align (32):{}> FLASH0| FLASH1
.const align (32):{}> FLASH0| FLASH1
/* RAM 受保护区域中的 FreeRTOS 内核数据*/
.kernelbss:{}>Kram
.kernelHEAP:{}> RAM
.bss :{}> RAM
.data :{}>RAM

/*用户代码开始(4)*/
telem:{}>SDRAM
/*用户代码结束*/
} 

我定义了一组结构

#define NUM_OF_PACK1024

struct TelemPackStruct勘 测[NUM_OF_PACK]__attribute__((section (".telem"))); 

我发现的问题如下。

__attribute__(((section(".telem"))) volatile struct TelemPackStructure[NUM_OF_PACK];

void foo (){
volatile struct TelemPackStructtmToRead;
//填充 tmToRead
遥测[0]=tmToRead;

//telemeting[0].q1=tmToRad.q1;解决相同的问题

} 

当我尝试写入存储在 EMIF 中的遥测[0]时,它只写入一个变量(结构中不是单个变量),并将其写入整个 SDRAM (包括)。

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

    您好、Roman、

    我在我的 LC43x 板上进行了测试、无法解决问题。 您的 EMIF 配置和 MPU 设置是什么?

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

    哇哦。 谢谢。它的设置很好,但我不知道问题在哪里。 您可以发送项目吗?

    我的 EMIF 配置等于 Halcogen 的 EMIF 示例。 真的不知道 MPU 配置。。。

    意识到我的 EMIF_SDRAMInit()为空。 在该示例中、对此没有任何意见。 已尝试 EMIF_SDRAM_StartupInit(),未执行任何操作。

    编辑。 MPU 区被使能、其默认设置为0。

    注意到了一件事。 进行定义

    SDRAM (RXW):origin=0x8000000 length=0x007FFFE0 

    它不会向 SDRAM 写入任何内容。

    当它打开时

    SDRAM (RXW):origin=0x80000004 length=0x007FFFE0//或0x80000002
    

    它会导致我的问题。

    再次检查了所有内容、重新生成了代码、正如 EMIF_example 中显示的那样。 没有改变

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

    您好、Roman、

    附件是我的工作项目。 我使用相同的结构"TelemPackStruct"和 link cmd。

    e2e.ti.com/.../5582.TMS570LC4357_5F00_SDRAM.zip

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

    这里对我帮助的是...

    它是 halcogen 中的默认值。 我在下载项目时更改的是类型。 不知道为什么这对改变它很重要,但是…… 我改变了、它起了作用。

    更改为  

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

    ARM TRM 将共享普通存储器描述为"对于在多个处理器之间共享的正常映射"。 它将非共享普通存储器描述为"对于仅单个处理器使用的普通存储器"。

    在锁步架构配置中、第二个内核是一个校验器/诊断通道。 它不会独立运行、其操作仅用于确定是否存在错误。 可共享和不可共享不应影响测试结果。

    我尝试了两种设置:可共享和不可共享、并获得了相同的结果、无法产生您提到的问题。