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.

[参考译文] TMS320C6672:tms320c6672

Guru**** 2538960 points
Other Parts Discussed in Thread: TMS320C6672, TMS320C6678

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1037717/tms320c6672-tms320c6672

器件型号:TMS320C6672
Thread 中讨论的其他器件: TMS320C6678

您好!  

现在、我无法将 tms320c6672中的数据写入 SDRAM DDR3 MT41K256M16 (使用4个 SDRAM 和1个 ECC)。

写入数据时、我们#引脚状态如何?

2.您能不能让我按顺序将数据从 tms320c6672写入 SDRAM?

非常感谢!

Tuyendn1.

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

    表2.1 中的"TMS320C6678内存映射"。 地址 DDR3格式0x80000000至0xFFFFFFFF (总和2048MB)。 我使用了4个 SDRAM MT41K256M16、这是否影响将数据写入 SDRAM?

    Microsoft Word - TMDSEVM6678L_Technical_Reference_Manual_2V01_0320_adv_Emily_thj.docx (advantech.com)

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

    尊敬的客户:

    美好的一天!

    Tuyendn1表示>> 2. 您能给我一个订单来将 tms320c6672中的数据写入 SDRAM 吗?

    我建议您查看从  tms320c6678到 SDRAM 中写入和读取数据的代码序列、该代码可从"pdk_c667x_2_0_15"获取。

    pdk_c667x_2_0_15\packages/ti\platform\evmc6678l\platform_lib\src\platform.c

    C:\ti\pdk_c667x_2_0_15\packages/ti\platform\evmc6678l\platform_test\src\platforms_utils_test.c

    --

    请下载适用于 C6678的处理器 SDK。 参照该序列、您可以按照 tms320c6672的序列进行操作。  

    PROCESSOR-SDK-RTOS-C667x 06_03_00_106
    https://software-dl.ti.com/processor-sdk-rtos/esd/C667x/latest/index_FDS.html

    ----

    代码参考:

    /******************************************************************************
     * platform_external_memory_test
     ******************************************************************************/
    #if (PLATFORM_EXTMEMTEST_IN)
    Platform_STATUS platform_external_memory_test(uint32_t start_address, uint32_t end_address)
    {
    	IFPRINT(platform_write("platform_external_memory_test(start=0x%x,end=0x%x) called \n", start_address, end_address));
    
        if((start_address == 0) && (end_address == 0)) {
            start_address = PLATFORM_DDR3_SDRAM_START;
            end_address   = PLATFORM_DDR3_SDRAM_END - 1;
        }
    
        if ((start_address < PLATFORM_DDR3_SDRAM_START) ||
            (end_address >  PLATFORM_DDR3_SDRAM_END) ||
            (start_address >= end_address)){
            IFPRINT(platform_write("platform_external_memory_test: Start address (0x%08x) or end address (0x%08x)\n",
                start_address, end_address));
            platform_errno = PLATFORM_ERRNO_INVALID_ARGUMENT;
            return ((Platform_STATUS) Platform_EINVALID);
        }
    
        return platform_memory_test(start_address, end_address);
    }
    #endif
    
    /******************************************************************************
     * platform_internal_memory_test
     ******************************************************************************/
    #if (PLATFORM_INTMEMTEST_IN)
    Platform_STATUS platform_internal_memory_test(uint32_t id)
    {
        uint32_t start_address, end_address;
        CSL_PSC_MODSTATE state_prev, state_val;
        CSL_PSC_MDLRST   loc_rst_prev, loc_rst_val;
        uint32_t rstiso_prev_flag;    
        uint32_t module_number = 15;
        int32_t status = Platform_EOK;
    
    	IFPRINT(platform_write("platform_internal_memory_test(core=%d) called \n", id));
    
        if (platform_get_coreid() == id) {
            IFPRINT(platform_write("platform_internal_memory_test: Can't run the test own core(%d)\n",
                id));
            platform_errno = PLATFORM_ERRNO_INVALID_ARGUMENT;
            return ((Platform_STATUS) Platform_EUNSUPPORTED);
        }
    
        if (id >= PLATFORM_CORE_COUNT) {
            IFPRINT(platform_write("platform_internal_memory_test: core id should be in range [0..%d]\n",
                PLATFORM_CORE_COUNT - 1));
            platform_errno = PLATFORM_ERRNO_INVALID_ARGUMENT;
            return ((Platform_STATUS) Platform_EINVALID);
        }
    
        /* For the 6678L */
        switch (id) {
            case 0:
                module_number = 15; //(C66x Core 0 and Timer 0)
                break;
            case 1:
                module_number = 16; //(C66x Core 1 and Timer 1)
                break;
            case 2:
                module_number = 17; //(C66x Core 2 and Timer 2)
                break;
            case 3:
                module_number = 18; //(C66x Core 3 and Timer 3)
                break;
            case 4:
                module_number = 19; //(C66x Core 4 and Timer 4)
                break;
            case 5:
                module_number = 20; //(C66x Core 5 and Timer 5)
                break;
            case 6:
                module_number = 21; //(C66x Core 6 and Timer 6)
                break;
            case 7:
                module_number = 22; //(C66x Core 7 and Timer 7)
                break;
        }
        
        /* Preserve the state, local reset and resetiso values */
        state_prev          = CSL_PSC_getModuleNextState(module_number);
        loc_rst_prev        = CSL_PSC_getModuleLocalReset(module_number);
        rstiso_prev_flag    = CSL_PSC_isModuleResetIsolationEnabled(module_number);
    
        /* Clear the state, local reset and resetiso values */
        state_val           = PSC_MODSTATE_SWRSTDISABLE;
        loc_rst_val         = PSC_MDLRST_ASSERTED;
    
        CSL_PSC_setModuleNextState(module_number, state_val);
        CSL_PSC_setModuleLocalReset(module_number, loc_rst_val);
        CSL_PSC_disableModuleResetIsolation(module_number);
    
        /* Test L1P memory region*/
        start_address = PLATFORM_L1P_BASE_ADDRESS | (id << 24);
        end_address   = start_address + PLATFORM_L1P_SIZE;
        if (platform_memory_test(start_address, end_address) != Platform_EOK) {
            status = Platform_EFAIL;
        }
    
        /* Test L1D memory region*/
        start_address = PLATFORM_L1D_BASE_ADDRESS | (id << 24);
        end_address   = start_address + PLATFORM_L1D_SIZE;
        if (platform_memory_test(start_address, end_address) != Platform_EOK) {
            status = Platform_EFAIL;
        }
    
        /* Restore the previous state, local reset and resetiso values */
        CSL_PSC_setModuleNextState(module_number, state_prev);
        CSL_PSC_setModuleLocalReset(module_number, loc_rst_prev);
        if (rstiso_prev_flag) {
             CSL_PSC_enableModuleResetIsolation(module_number);
        } else {
             CSL_PSC_disableModuleResetIsolation(module_number);
        }
        
        return status;
    }
    
    
    /******************************************************************************
     * platform_memory_test
     ******************************************************************************/
    #if (PLATFORM_EXTMEMTEST_IN || PLATFORM_INTMEMTEST_IN)
    static inline int32_t platform_memory_test (uint32_t start_address, uint32_t end_address)
    {
        uint32_t index, value;
    
        /* Write a pattern */
        for (index = start_address; index < end_address; index += 4) {
            *(volatile uint32_t *) index = (uint32_t)index;
        }
    
        /* Read and check the pattern */
        for (index = start_address; index < end_address; index += 4) {
            	
        	value = *(uint32_t *) index;
        	
            if (value  != index) {
                IFPRINT(platform_write("platform_memory_test: Failed at address index = 0x%x value = 0x%x *(index) = 0x%x\n",
                    index, value, *(volatile uint32_t *) index));
                platform_errno = index;
                return (Platform_EFAIL);
            }
        }
    
        /* Write a pattern for complementary values */
        for (index = start_address; index < end_address; index += 4) {
            *(volatile uint32_t *) index = (uint32_t)~index;
        }
    
        /* Read and check the pattern */
        for (index = start_address; index < end_address; index += 4) {
    
        	value = *(uint32_t *) index;
    
            if (value  != ~index) {
                IFPRINT(platform_write("platform_memory_test: Failed at address index = 0x%x value = 0x%x *(index) = 0x%x\n",
                    index, value, *(volatile uint32_t *) index));
                platform_errno = index;
                return (Platform_EFAIL);
            }
        }
    
        return Platform_EOK;
    }
    #endif
    
    
    

    此致

    Shankari

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

    您好、Shankari、  

    请告诉我、如果数据组和地址中存在 mismath、DDR3能否以最低的速度运行? 当写入电平可帮助信号 DDR3的补偿延迟时。 您能否检查并确认"帮助我"!

    对此,

    Tuyendn1.

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

    您好!

    根据我给出的代码序列、您是否能够从  tms320c6672写入 SDRAM?

    此致

    Shankari

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

    您好、Shankari、  

    使用代码序列、我无法从 tms320c6672写入 SDRAM。

    如何检查?

    此致、  

    Tuyendn1.

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

    尊敬的客户:

    Tuyendn1说"写入数据时、我们#的引脚状态如何?"

    Shankari: 我们指的是写入使能引脚。 写入时、此引脚状态将为高电平/打开。

    Tuyendn1说" 使用代码序列、我无法从 tms320c6672写入 SDRAM。"

    Shankari:我知道为什么吗?  

    另一种方法是... 您可以使用 GEL 文件并检查 SDRAM 的初始化序列、读取/写入。

    GEL 文件将在 CCS 中运行,您可以在目标 EVM 上加载并运行该文件。

    请访问此链接、了解如何通过 CCS 在硬件板上运行 GEL 文件:

    https://software-dl.ti.com/ccs/esd/documents/ccs_custom_target_config.html

    已附加 C6670的 GEL 文件。 参考 tms320c6672 数据表/TRM、更改 GEL 并在 target.e2e.ti.com/.../3225.evmc6670l.gel 上运行

    此致

    Shankari

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

    您好、Shankari、  

    请确认此问题。  请告诉我、如果数据组和地址中存在 mismath、DDR3能否以最低的速度运行? 当写入电平可帮助信号 DDR3的补偿延迟时。 您能否检查并确认"帮助我"!

    非常感谢!

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

    尊敬的客户:

    理解您的问题非常困难。 我不明白数据组是什么意思? 哪个地址? 等等...

    您提供的信息不足以指导您。

    此致

    Shankari

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

    尊敬的 Shankari:

    数据组为 DQ0至 DQ7、地址组为 A0至 A15包含命令和控制。 由于某些个人原因、从 C6672到 SDRAM 的数据和地址组路由的长度不相等(例如、从 DQ0到 C6672的路由长度不等于 DQ1到 C6672的路由长度)

    可以给我建议吗?

    非常感谢!

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

    Tuyen、

    如果您的问题是关于连接处理器和 DDR3之间的数据线和地址线、 我建议您查看 C6678 EVM 的原理图并参考您的 C6672。

    http://wfcache.advantech.com/www/support/TI-EVM/download/TMDXEVM6678L_EVM_A101-1_DSN.pdf

    https://www2.advantech.com/Support/TI-EVM/6678le_sd.aspx

    此致

    Shankari