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.

[参考译文] TMDSCNCD28035ISO:代码在闪存上不起作用

Guru**** 2512055 points
Other Parts Discussed in Thread: TMDSDOCK28035

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/877605/tmdscncd28035iso-code-does-not-work-on-flash

器件型号:TMDSCNCD28035ISO
主题中讨论的其他器件:TMDSDOCK28035

尊敬的专家、您好。

我正在尝试在闪存上使用此控制卡。 但我的代码在复位 MCU 后无法正常工作。 相同的代码在 TMDSDOCK28035上工作。 有什么提示吗?


我的链接器文件

内存
{
PAGE 0:/*程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
RAML0 :origin = 0x008000、length = 0x000800 /*片上 RAM 块 L0 */
RAML1 :origin = 0x008800,length = 0x000400 /*片上 RAM 块 L1 */
OTP :origin = 0x3D7800,length = 0x000400 /*片上 OTP */
FLASHH :origin = 0x3E8000、length = 0x002000 /*片上闪存*/
FLASHG :origin = 0x3EA000、length = 0x002000 /*片上闪存*/
FLASHF :origin = 0x3EC000、length = 0x002000 /*片上闪存*/
FLASHE :origin = 0x3EE000、length = 0x002000 /*片上闪存*/
FLASHD :origin = 0x3F0000、length = 0x002000 /*片上闪存*/
FLASHC :origin = 0x3F2000、length = 0x002000 /*片上闪存*/
FLASHA :origin = 0x3F6000,length = 0x001F80 //片上闪存*/
csm_RSVD:origin = 0x3F7F80,length = 0x000076 /* FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 */
开始 :origin = 0x3F7FF6,length = 0x000002 /* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 //
csm_PWL_P0:origin = 0x3F7FF8,length = 0x000008 /* FLASHA 的一部分。 FLASHA */

IQTABLES 中的 CSM 密码位置:origin = 0x3FE000,length = 0x000B50 /*引导 ROM 中的 IQMath 表*/
IQTABLES2:origin = 0x3FEB50,length = 0x00008C /*引导 ROM 中的 IQMath 表*/
IQTABLES3:origin = 0x3FEBDC,length = 0x0000AA/*引导 ROM 中的 IQMath 表*/

ROM :origin = 0x3FF27C、length = 0x000D44 /*引导 ROM */
重置 :origin = 0x3FFFC0,length = 0x000002 引导 ROM 的/*部分*/
向量 :origin = 0x3FFFC2,length = 0x00003E /*部分引导 ROM */

第1页:/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页上 //
boot_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
RAMM0 :origin = 0x000050、length = 0x0003B0 /*片上 RAM 块 M0 */
RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
RAML2 :origin = 0x008C00,length = 0x000400 /*片上 RAM 块 L2 */
RAML3 :origin = 0x009000,length = 0x001000 /*片上 RAM 块 L3 */
FLASHB :origin = 0x3F4000,length = 0x002000 /*片上闪存*/

}/*

将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*/

段
{

//分配程序区域:*/
.cinit :> FLASHA PAGE = 0.Pinit
:> FLASHA、 PAGE = 0.text
:> FLASHA PAGE = 0
codestart :>开始 PAGE = 0
ramfuncs :LOAD = FLASHD,
运行= RAML0、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)

load_size (_RamfuncsLoadSize)、
run_start (_RamfuncsRunStart)、
PAGE = 0

csmpasswds :>csm_PWL_P0 page = 0
csm_rsvd :>csm_RSVD page = 0

//分配未初始化的数据段:*/
.stack :> RAMM0 PAGE = 1.ebss
:> RAML2 PAGE = 1
.esysmem :> RAML2 PAGE = 1

/*初始化段进入闪存*/
//*要使 SDFlash 对这些段进行编程、必须将它们分配到 PAGE 0 */
.econst :> FLASHA PAGE = 0.switch
:> FLASHA PAGE = 0

//分配 IQ 数学区域:*/
IQmath :> FLASHA PAGE = 0 /*数学代码*/
IQmathTables :>IQTABLES,page = 0,type = NoLoad

//如果调用 IQNexp()或 IQexp(),取消注释以下段
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
//
/*
IQmathTables2:> IQTABLES2,page = 0,type = NoLoad
{

IQMath.lib (IQmathTablesRam)

}
*/
/*如果调用 IQNasin ()或 IQasin (),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
*
/*
IQmathTables3:> IQTABLES3,PAGE = 0,TYPE = NOLOAD
{

IQMath.lib (IQmathTablesRam)

}
//

/*.reset 是编译器使用的标准段。 它包含
用于 C 代码的_c_int00起始地址的*//*。 /*
/*使用引导 ROM 时
,不需要此部分和 CPU 矢量*//*表。 因此,默认类型设置为*/
/* DSECT */
.reset :>重置, PAGE = 0、TYPE = DSECT
向量 :>引导程序 page = 0、type = DSECT

}

/*/===========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
* 

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

    这两个控制卡上的 MCU 是相同的、因此、如果它在非 ISO 上工作、则在另一个控制卡上工作。  我将确保您的引导引脚在 ISO 卡上配置相同(引导至闪存)。

    http://www.ti.com/document-viewer/TMS320F28035/datasheet/boot-rom-litsprs230-0453#litSPRS230-0453  

    请注意、从出厂时、get_mode 引导模式将引导至闪存。  这可以在 OTP 中更改、因此如果 ISO 卡将这些位置编程为另一个引导模式、这可能是您即使引导引脚相同、也看不到相同行为的原因。  请告诉我、如果是这种情况、我们可能需要有创意才能将其恢复到闪存启动、因为 OTP 仅进行一次编程。

    最棒的
    Matthew

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

    我认为我的配置是可以的。 我不知道如何更改 OTP。 :(

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

    感谢您的介绍、引导模式处于您所提到的正确位置。

    获取模式 OTP 表位于地址0x3D7BFF、引导模式如下图所示:

    这在 第188页的 TRM 中 http://www.ti.com/lit/sprui10 让我知道位置0x3D7BFF 处的存储器中有什么值、我们可以从这里开始。

    最棒的

    Matthew

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

    [引用用户="MatthewPaate"]

    感谢您的介绍、引导模式处于您所提到的正确位置。

    获取模式 OTP 表位于地址0x3D7BFF、引导模式如下图所示:

    这在 第188页的 TRM 中 http://www.ti.com/lit/sprui10 让我知道位置0x3D7BFF 处的存储器中有什么值、我们可以从这里开始。

    最棒的

    Matthew

    [/报价]

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

    您能否通过屏幕截图显示从 ISO 板上的 CCS 获取的错误、或者代码功能不同(外设无法正常工作、ADC 具有不正确的值等)的故障?  有关此故障发生方式(或与非 ISO 电路板不相同)的任何其他信息都将有所帮助。

    我们特别检查了控制卡和 ISO 的所有典型问题、您可以正常工作。

    最棒的

    Matthew

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

    实际上、我得到了0误差。 我正在使用一个简单的闪烁 LED 代码、该代码可在其他卡上闪烁、但在 ISO 1上不起作用。

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

    让我澄清一下、代码加载是否成功、但 LED 不闪烁?  或者、当您尝试加载程序时、CCS 是否会给出错误。

    是否可以附加您的代码、或者至少添加正在打开/关闭 GPIO 的代码片段?

    最棒的
    Matthew

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

    否 在我上传代码后、它开始闪烁。 但是、在我关闭电源并打开电源后、控制器 LED 永远不会再次闪烁。

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

    您是否可以尝试将 SW3置于"Off/UP"位置、以查看这是否有任何效果?  即使该 PD 连接到隔离器、该网络上也应该有2.2kOHm PD、但我想确保仿真器探针不会保持该高电平并影响引导。   

    最棒的
    Matthew