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.

[参考译文] TMS320F2.8377万S:用户引导加载器

Guru**** 2475865 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1089804/tms320f28377s-bootloader-by-user

部件号:TMS320F2.8377万S
主题中讨论的其他部件:C2000WARE

您好,

尊敬 的TI 工程师, 我 开始  编写   有关用户 引导加载程序的逻辑。

 当芯片 启动时 , 它 将  进入 引导加载 程序主 功能,而不   会从 闪存中擦除。 我从     应用程序复制主函数中的初始化函数。  

但 当芯片 通电 时, 它 将  进入 bootloader 主 功能 , 似乎 有  一个循环。 这 意味着 它 会 多次进入  bootloader main 函数   ,如无限 循环。 此外  ,程序 将 在  syspll 锁中停止 ,如    下图所示。

如果芯片开始 进入 APP主 功能,  则没有出现问题 。

 祝您一切顺利,

焦炭。

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

    您好,  

    您是否有引导加载程序的退出条件? 您的时钟源和时钟速度是多少?

    谢谢

    Anu

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

    您好,

    Anu,很 高兴  收到 您 的回复。

    1.是的。  用户 bootloader 有 退出 条件,  但出现的现象 是  程序      有时可能会运行到codesbranch.asm中。    看来该节目停止  了如    上图所示的那样。   之后  ,它 可能会重置 并  重新启动。

    2. 我 使用 的是外 晶,   大约是 10MHz。   时钟 速度 为200MHz。 此 配置  也  应用于 应用 程序的主要 功能, 当然    ,应用程序的主要功能  不会导致此 问题。

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

    焦炭,  

    抱歉,我在周五发布了回复,但似乎没有通过。 您能否展示预期和实际行为的流程图? 这将有助于确定后续步骤。  

    谢谢

    Anu

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

    您好,

    Anu,这里 是理想的流程 图。

      

    以下 是  实际 行为。

    程序 不  会进入  下 一行 ,而 是 在   循环 中卡住,循环由 红色 电线圈出,如  下图 所示。 如果 单击    CCS中的“RUN”(运行)按钮, 程序 将  从 codegartbranch.asm重新启动。

    但是  ,PLL 程序  是 从 APP 程序复制的 ,可以     在 APP 主 功能中正常运行。  所以 ,我   不知道  发生了什么?  

     祝您一切顺利,

    焦炭。

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

    焦炭,  

    GPIO初始化后,您是否可以尝试初始化闪存? 如果您查看C2000Ware示例,则在其它初始化之后会执行闪存初始化。  

    谢谢

    Anu

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

    您好,

    ANU, 我 在       DSP初始化结束时进行了闪存初始化。 但是 ,问题  尚未  解决。   而且,闪存 初始化  在  DSP 初始化之前具有的逻辑 在    APP 主 功能中正常工作。   这样, 这 也许 不 是 关键 原因。

     祝您一切顺利,

    焦炭。

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

    这 是 我 的计划。

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

    焦炭,  

    我将与团队成员一起审核,并在几天后回复您。  

    谢谢

    Anu

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

    您好,

    Anu, 等待  您 的想法。

     祝您一切顺利,

    焦炭。

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

    您好,Coke,

    Anu让我看看这个帖子。

    当代码卡在PLL锁定位置(然后到达代码启动分支)时,您是否注意到XRSn上的切换(重置)?

    谢谢,此致,
    Vamsi  

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

    您好,

    Vamsi, 您 说 得对。  当代码 卡在    上面的图中的该线(  用 红线圈出)时   ,XRSn 引脚 将 具有  低 电压 电平。  因此  ,该程序 将 到达  codegbranch.

    我   不知道  发生了什么?

    谢谢,此致,
    焦炭。

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

    焦炭,

    感谢您的确认。   我们将要求我们的E2E团队将此职位分配给我们的PLL专家,以检查代码中的时钟/PLL配置。

    谢谢,此致,
    Vamsi

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

    您好,Coke,

    您能否在Flashboot.c文件中提供PLL初始化例程?  此外,当代码挂到您下面指定的位置时:

    在代码执行停止后,是否可以检查SYSPLLSTS的注册内容?

    此致,

    约瑟夫

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

    您好,

    Joseph, 这里 是        主 函数中相同的代码。

    如果 我 在    While 循环中设置断点,SYSPLLSTS 始终为0。 如果 我  不 设置 断 点, SYSPLLSTS 将 在 0和1之间变化。

     祝您一切顺利  ,

    焦炭。

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

    您好,Coke,

    在Flashboot.c文件中设置PLL时,它似乎无法锁定。 我看到您在本地文件中复制了PLL初始化例程。  您是否可以在Flashboor.c文件中直接调用InitSysPll()?  如果没有(因为您可能有一些不需要的特定例程),请确保在设置某些系统寄存器后添加延迟,因为这些延迟对于正确更新值至关重要。  需要延迟的特定部分是代码中的以下部分:

    使用原始代码进行检查,并相应地添加延迟。  请尝试此操作,并告诉我它是否解决了PLL锁定问题。

    此致,

    约瑟夫  

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

    您好,

    Joseph, 很高兴  收到 您 的建议。

    我在   代码中添加延迟。 但是 ,这   是行不通的。

    但是 ,我 替换  了主         函数中写入的PLL初始化功能。  程序 可以  正常初始化。

    我   不知道  发生了什么 ,因为  他们   对  结构 名称的期望是一样的。

     祝你一切顺利,

    焦炭。

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

    您好,Coke,

    在XTALOFF之后也必须添加延迟。  对于PLL初始化例程,您可以检查BL_ClkCfgRegs和ClkCfgRegs结构的clock源,imult,fmult和divsel值是否相同。

    此致,

    约瑟夫

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

    您好,

    Joseph, 我 会 检查   一下您  最近提到的问题。

    回复 将      尽快发送给您 。

    最佳,

    焦炭。

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

    您好,

    Joseph, 很抱歉  回复太晚 。

    我 发现  故障       寄存 器地址导致的问题。  不过 ,我  没有找出  原因。  我用于 初始化的结构 已  在 引导 程序中重新定义 ,该程序 显示 在 Bow pic中。

    但是 ,这些 寄存器的地址  与    真地址不同 ,例如CCS中的地址。

    书写有问题吗?

    最佳,

    焦炭。

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

    您好,Coke,

    您不能在Flashboot.c文件中调用相同的InitSysPLL()函数是有原因的吗?  TI强烈建议将此功能用于PLL设置,因为存在 重要的配置步骤(排序,延迟,WD重置等),并且该功能已考虑到所有这些步骤。  此外,我认为没有必要仅为闪存启动内的PLL锁定复制/重命名WD寄存器结构。  无论如何,功能/结构可能有重复的有效原因。

    我认为您需要以某种方式为*BL_WdRegs指定一个指针,使其位于WD地址0x7000处。  我不是SW专家,但您可能可以尝试这一行代码来分配正确的指针:

    BL_WdRegs =(volatile结构wd_regs *) 0x7000;

    此致,

    约瑟夫

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

    您好,

    Joseph,你  说得对。     PLL  失败的原因 是      上述 图片中显示的所有结构的地址  都错误。  我  使用 了与      您在上面的图片中提到的相同的方式(BL_WdRegs =(volatile struct wd_regs *) 0x7000;)。

    然而 ,它   是行不通的。

    最佳,

    焦炭。

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

    您好,Coke,

    可能还有其他方法可以为BL_WdRegs分配正确的地址指针,但是如果我需要为结构分配正确的指针地址,上面我对您所描述的方法对我来说是有效的。  只需确保在使用新结构之前先使用此陈述。

    无论如何,我认为为看门狗寄存器设置另一个结构BL_WdRegs会使代码变得复杂。  我只建议对您的代码使用WdRegs结构。  不过,我们只有一个看门狗,所以我不觉得有需要复制这个结构。

    此致,

    约瑟夫

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

    您好,

    Joseph, 我将 进一步 研究 我 的守则。

    如果    发生任何其他问题,我会 有 另 一篇文章。

    Thks,

    焦炭。