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万D:从闪存引导而不使用GPIO?

Guru**** 2338080 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/581581/tms320f28377d-boot-from-flash-without-gpio

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

团队,

我一直在阅读有关启动的TRM部分以及SPRA958L (从内部闪存运行应用程序),但我似乎找不到答案。  

我的问题是:我目前没有任何免费的GPIOs涉及我们构建的参考设计。

我的问题是,是否有一种无需依赖GPIO即可从闪存启动的方法? 即ROM bootloader始终直接指向闪存

如果这不可行,我是否可以公平地假设我可以使用分配给I2C (因此,上拉)的引脚在重置期间使设备处于获取模式/闪存状态,然后它们可以恢复为I2C引脚初始化? 是否有更好的选择? 乐于接受建议。

最佳,

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

    您好,

    [引述]我的问题是,是否有办法从闪存启动而不依赖GPIO? 即ROM bootloader始终直接指向闪存。 [/引述]

    您需要从1/1驱动引导模式引脚以选择GetMode/Flash Boot。

    [引述]如果这不可能,我是否可以公平地假设我可以使用分配给I2C (因此,上拉)的引脚来使设备在重置期间处于GET模式/闪存状态,然后它们可以返回到作为I2C引脚进行初始化? 是否有更好的选择? 乐于接受建议。 [/引述]

    您可以这样做,但我建议您选择 在应用程序中用作输出的设备引脚作为BOOTPIN,这样在任何情况下都不会由外部设备驱动这些引脚。   

    此致,

    Vivek Singh

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

    那么选择SCL引脚作为两者是否公平?因此,它由主控(C2000)驱动,并在复位时被拉高?

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

    Lina,
    除非用户通过用户OTP (设备TRM的3.4 部分)编程了备用引导模式选择引脚配置,否则设备引导ROM将在出厂默认引导模式选择GPIO (GPIO72和GPIO84)上查找状态。

    例如:-如果您不想使用GPIO72和GPIO84,但想使用GPIO33 (例如), 然后将BOOTCTRL.BMSP0编程为34 (对于GPIO33)和BOOTCTRL.BMSP1编程为34 (对于GPIO33),您可以在CPU1上将BOOTCTRL.BMODE保留为未编程(=0xFF)(或将其设置为0x0B进行闪存引导),并将BOOTCTRL.key编程为0x5A。

    在上面的示例中,如果GPIO33为高电平,则NOW设备将引导至闪存;如果GPIO33为低电平,则将启动并行启动。

    请参阅3.4 部分,但该部件需要为上述程序编程OTP寄存器,除非相应OTP寄存器已编程设备启动ROM会检查出厂默认启动模式配置。

    编辑/更新:-用于F2837xD的设备TRM可在www.ti.com/.../spruhm8f.pdf上找到



    希望这有所帮助。

    此致
    Santosh Athuru

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

    感谢您的回答。 我计划使用一个当前用于上拉跳闸区域的GPIO (GPIO 90),这意味着BOOTCTRL = 0x8989xx5A

    我还计划有外部SPI闪存,这意味着上面的BMODE (xx)对于SPI1应为0x84。

    关于OTP编程,我已经查看并找到了一些有关SPI启动等的资源,如下所述:
    www.ti.com/.../spraaq3.pdf

    由于我们有一个外部SPI闪存,我计划使用上面文档中提到的SPI引导加载程序,但它是为F280x系列创建的。 您能否提供有关此功能是否可用于F2.8377万D以及需要进行哪些更改(如果有)的指导?

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

    Lina,

    对于GPIO90,您必须对十进制91进行编程,这意味着十六进制5B。 因此,您的BOOTCTRL将为0x5B5B845A。

    一旦进行此类编程,当引导模式选择引脚高时,设备将始终引导至SPI;当它们低时,将引导至并行引导。 在您的情况下,当GPIO90为高电平时,设备引导到SPI;当GPIO90为低电平时,设备并行引导。 请注意,在SPI引导模式中,设备充当SPI主节点,如果没有SPI从属节点响应SPI读取,或者如果读取了坏密钥,则设备默认引导至闪存。 请检查是否满足您的要求。

    您所参考的应用手册用于将加载器编程到用户OTP。 F2837x设备上没有该选项。 此外,应用手册还介绍了为客户修改的SPI闪存加载程序,我认为您不是在寻找它。

    ROM中的SPI引导加载程序将应用程序从外部SPI EEPROM加载到设备RAM。 设备的设备引导ROM源可以在controlSUITE (C:\ti\controlSUITE\libs\utilities\boot_ROM\F2837x_RevB\RevB_ROM_Sources)中找到。

    设备TRM的3.13 部分说明了从ROM加载器完成外设读取时ROM加载器所需的引导数据流结构。

    希望这有所帮助。

    此致
    Santosh Athuru

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

    再次感谢您的帮助。 我们决定使用内部闪存启动,而不是SPI启动。 我只想在对OTP编程之前确认几件事。 我们是否有描述如何对OTP进行编程的文档,包括编程ECC等细微差别? 我在阅读几个论坛帖子以及DCSM示例中的源代码说明时,表现得非常模糊,但我更是感到困惑。

    为了说明这一点,我使用的是自定义板,尝试使用与默认值不同的GPIO,以便在仿真器未连接时每次从闪存启动设备。 我计划使用GPIO90 (仅一个GPIO)作为两个启动引脚。

    也就是说,使用Blinky_and_DSCM示例,我是否正确理解了该过程? :
    1.只从DCSM_OTP_Z1_bootctrl部分删除type=DSECT来更改2837xD_DCSM_lnk_CPU1.cmd (是否还有其他部分应删除? 这到底有什么作用?)
    2.在DCSM_Z1_ZoneSelectBlock.ASM中,取消注释.sect“DCSM_OTP_Z1_bootctrl”下的两行代码,以将.long 0x5B5B0B5A设置为getmode (问题,是保留注释的部分,还是将其设置为0xFFFFFFFF?)
    3.建造和装载
    4.电源设备,GPIO90上拉,观察盲程?

    问题:
    1.是否有任何关于检察官办公室编程步骤的明确文件?
    2.在这样做时,是否有其他考虑? (ECC,链接指针等)
    3.在对OTP编程之前,是否有办法测试此功能?
    最佳,
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Lina,

    OTP与闪存类似,但只能一次性编程。 是,OTP存储器具有ECC。 上面的步骤看起来不错。 除了提供的示例之外,我们没有其他有关如何编程OTP的文档。

    正如我提到的,OTP就像闪存,但只能一次性编程。 客户可以像对闪存扇区/内存一样对OTP存储器进行编程。 但是,大多数用户OTP都是为引导和安全模块定义的寄存器,因此,我们在如何对这些寄存器进行编程时提供了示例和源代码级别的注释。 我们没有在所有其他示例中包括这些内容,因为我们不希望客户意外地对OTP存储器进行编程。 我们努力确保客户有意识地对OTP进行编程。

    在对OTP进行编程之前,可以使用EMUBOOTCTRL中的相同值并执行EMUBOOT序列(在连接仿真器的情况下运行引导ROM)来测试OTPBOOTCTRL寄存器值。 请参阅设备TRM的图3.3 第498页。

    器件的ROM源代码在controlSUITE C:\ti\controlSUITE\libs\utilities\boot_ROM\F2837x_RevB\RevB_ROM_Sources中提供;您可以加载ROM符号,而无需重建ROM项目并对ROM代码进行源代码级调试。

    希望这有所帮助。

    此致

    Santosh Athuru

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

    您好,Santosh:

    感谢你的帮助。 我有几个澄清问题,以确保我理解:

    1. 当我导入“blinky_with _DCSM”项目时,似乎2837xD-DCSM_lnk_CPU1.cmd文件未包含在内部版本中。 我最后包括了它(属性-> C2000连接器->文件搜索路径->添加),但这是否是必需的步骤? 或者它是在其他地方被称为?
    2. 上面提到的链接程序文件错误地定义了Z1和Z2 OTP,它似乎...  

      DCSM_OTP_Z2_BOOTCTRL  :原点= 0x7821C,长度= 0x0.0004万

    这不是0x7821E吗? 这导致我对1C进行了错误的编程,但看起来该区域仍然被保留了吗?

    3.您在controlSUITE中提到的RevB_ROM_SOURCE没有任何用于加载符号的发行文件。 Rev0文件夹有一个Release文件夹,但它内部只有一个.xml文件。 该.xml文件的用途是什么? 我是否在错误的位置查找.out文件?

    感谢您的帮助!

    最佳,

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

    您好,Lina:

    [QUOTE USER="_LINA"当我导入“blinky_with _DCSM”项目时,似乎2837xD-DCSM_lnk_CPU1.cmd文件未包含在内部版本中。 我最后包括了它(属性-> C2000连接器->文件搜索路径->添加),但这是否是必需的步骤? 或者它是在其他地方被称为?[/QUOT]

    当我导入项目并执行RAM构建时,我看到 包括2837xD_DCSM_Lnk_CPU1.cmd。  如果执行闪存构建,则不包括DCSM链接程序命令文件。 因此,此示例仅支持RAM版本。 我们应该已删除闪存构建配置。

    [报价用户="_Lina"]

    1. 上面提到的链接程序文件错误地定义了Z1和Z2 OTP,它似乎...  

      DCSM_OTP_Z2_BOOTCTRL  :原点= 0x7821C,长度= 0x0.0004万

    这不是0x7821E吗? 这导致我对1C进行了错误的编程,但看起来该区域仍然被保留了吗?

    [/引述]

    对于上面的,如果您查看定义DCSM_OTP_ZX_BOOTCTRL数据的代码,您将看到下面的内容。 前32位被保留并编程为0xFFFFFFFF,BOOTCTRL值为后32位。 这两个32位字共享ECC,因此它们被组合在一起。

    因此,BOOTCTRL对于Z1和Z2分别为0x7801E和0x7821E,但链接这些字段实际上是四个16位字,因为Reserved接受两个地址,BOOTCTRL接受接下来的两个地址。  

    .sect "DCSM_OTP_Z1_bootctrl"
    ;;.long 0xFFFFFFFF ;保留
    ;.long 0xFFFFFFFF ;Z1-BOOTCTRL

    .sect "DCSM_OTP_Z2_bootctrl"
    ;;.long 0xFFFFFFFF ;保留
    ;.long 0xFFFFFFFF ;Z2-BOOTCTRL

    [QUOTE USER="_LINA"您在 controlSUITE中提到的RevB_ROM_SOURCE 没有任何用于加载符号的发行文件。 Rev0文件夹有一个Release文件夹,但它内部只有一个.xml文件。 该.xml文件的用途是什么? 我是否在错误的位置查找.out文件?[/QUOT]

    对于以上内容,我确实看到了RevB在以下位置的输出文件。

    "C:\ti\controlSUITE\libs\utilities\boot_ROM\F2837x_RevB\RevB_ROM_sources\CCS_files\cpu01\Release\F2837x_cpu01_bootROM_RevB_Golden_020314.out</s>2837 2.0314万

    当您从CCS DEBUG角度单击LOAD符号时,只需指向上面的COFF文件,当CCS要求找不到源代码级别调试的源代码时,只需将其指向C:\ti\controlSUITE\libs\utilities\boot_ROM\F2837x_RevB\RevB_ROM_sources\F2837x_bootROM\cpu01-bootROM\source。2837。 这应允许您对ROM代码进行源代码级调试。

    希望这有所帮助。

    此致

    Santosh Athuru  

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

    您好,Santosh:

    感谢您的快速回复。 我终于有了闪存OTP的信心,这是成功的! 根据您的上述回答,我正在编辑我之前提到的过程,以便其他人可以找到它。

    在F2837xD上通过闪存OTP更改启动引脚的步骤:

    目标:将自定义板上的默认启动引脚从GPIO84,GPIO72更改为GPIO91 (在设计中被拉)。

    注:BOOTCTRL中的值如下所示(有关更多信息,请参见TRM的3.4 部分):

    BMSP1/0 =十六进制(GPIO编号+ 1),例如:对于GPIO91,BMSP1 = 91+1 = 92 = 0x5C

    BMODE =闪存= 0x0B

    键=有效= 0x5A

    要写入“DCSM_OTP_Z2_bootctrl”的值= 0x5C5C0B5A

    1.打开CCS,下载C2000ware,将“linky_with _DCSM_CPU1”导入工作空间。

    2.只从DCSM_OTP_Z2_bootctrl部分(使其成为有效部分)中删除type=DSECT,以更改2837xD_DCSM_lnk_CPU1.cmd。

    3. 在DCSM_Z1_ZoneSelectBlock.ASM中,取消注释.sect "DCSM_OTP_Z2_bootctrl"下的两行代码,将.long 0x5C5C0B5A设置为getmode  
    4.建造和装载

    5.查看->内存浏览器(下拉菜单= 32位十六进制TI样式)验证它是否成功,键入BOOTCTRL地址:0x7821E

    现在,当映像闪存时,仿真器断开连接, GPIO91被拉起,C2000将从闪存启动。

    注意:关于controlSUITE中的RevB_ROM_sources和其他ROM文件-出于某种原因,我看不到您在Release文件夹中提到的相同文件...也许我的controlSUITE下载不正确。 既然我的主要目标有效,我会将此帖子标记为"已回答"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Lina,
    太棒了。谢谢你把这些步骤发回论坛。

    此致
    Santosh Athuru