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.

[参考译文] TM4C129XNCZAD:用于 Keil 编译器的基于闪存的引导加载程序

Guru**** 2392095 points
Other Parts Discussed in Thread: EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/982256/tm4c129xnczad-flash-based-bootloader-for-keil-compiler

器件型号:TM4C129XNCZAD
Thread 中讨论的其他器件:EK-TM4C1294XL

尊敬的先生:

我们已使用 TM4C129x 开发板开始新的开发。 AS 引导加载程序指南介绍了基于 ROM 和基于闪存的引导加载程序、但仅给出了基于 ROM 的示例。

我想使用 Keil 编译器实现基于闪存的引导加载程序。 但无法编译工程。

编译器  无法找到  include bl_config.inc。

请共享在 Keil 上编译的代码或 Keil 所需的支持文件。

我们将为 reference.e2e.ti.com/.../bl_5F00_startup_5F00_rvmdk.S 附加 BL_STARTUP_rvmdk.S 文件

 

此致、

Abhijit

 

 

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

    您好!

     对于 CCS、等效的启动文件称为 BL_STARTUP_CCS.s 它包含头文件 bl_config.h。 bl_config.h 是应用程序级的头文件、不是 boot_loader 库的一部分。 我想这就是为什么 在 C:\ti\TivaWare_C_Series-2.2.0.295\boot_loader 中找不到 bl_config.h 或 bl_config.inc 文件的原因。

    如果您转到 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_serial 之类的引导加载程序示例(TivaWare 库中实际上有一些引导加载程序示例)、您将找到 bl_config.h 文件。 我还随函附上供您参考。  

    e2e.ti.com/.../4604.bl_5F00_config.h

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

    尊敬的 Charles:

    感谢您的回复、

    我执行了以下活动

    1.我转储了使用 LMFLAASH 加载程序连接的 boot_serial.bin (启用 UART)、程序地址偏移量为0x0

    应用程序和矢量地址与0x4000相同

    2.编译偏移量为0x4000的应用程序代码、并通过程序地址偏移量为0x4000的 LMFlash 加载程序将项目文件转储到 TM4C129X 开发板。

    以上两个过程是否正确?

    还随附了 c 文件 以供参考。  

    下一步是如何更新新的应用程序代码? (对于 新的 bin 文件、我们应该在 UART 模式下使用 LMFlashloader)

    e2e.ti.com/.../5826.bl_5F00_config.h

    e2e.ti.com/.../TM4C129_5F005F00_PQ6.c

    此致、

    Abhijit

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

    您好!

     是的。

     1.通过 JTAG 将 boot_serial.bin (这是引导加载程序)加载到0x0处的闪存中。

     2.在 LM 闪存编程器中选择串行模式。 您需要选择您的 COM 端口。  

    3.按如下方式加载应用(TM4C129_PQ6.bin)。  我建议您首先从 TivaWare boot_demo1.bin 开始。 如果工作正常、则继续使用您自己的应用程序。

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

    尊敬的 Charles:

    感谢您的回复。

    我的查询

    a.您在第2点和第3点提到的用于新应用程序更新的上述步骤? 我所理解的,是这样吗?

    B.正如您建议 的、首先尝试 boot_demo1。 它与 TM4C129X 兼容?

    c.我们在 Keil 编译器中使用 bootloader 文件夹中给定的文件(BL_startup_rvmdk.S)进行编译时遇到问题,也找不到 bl_config.inc。

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

    您好!

      [引用用户="Abhijit Kumar ]a. 您在第2点和第3点提到的用于新应用程序更新的上述步骤? 我所理解的,是这样吗?[/引述]

    是的。 第2步和第3步用于加载新应用。 第1步、您可以使用 Keil 加载代码、但也可以使用 LM 闪存编程器。  

    [引用用户="Abhijit Kumar "]

    B.正如您建议 的、首先尝试 boot_demo1。 它与 TM4C129X 兼容?

    [/报价]

    是的、boot_demo1也在 TivaWare 中。 您可以在 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_demo1中找到它。 开箱即用。 我希望您首先熟悉 boot_serial 和 boot_dem1。 稍后、您可以通过引用 boot_demo1示例转到您自己的应用程序。  

    [引用用户="Abhijit Kumar "]

    c.我们在 Keil 编译器中使用 bootloader 文件夹中给定的文件(BL_startup_rvmdk.S)进行编译时遇到问题,也找不到 bl_config.inc。

    [/报价]

    如前所述、您是否可以将 bl_config.h 从 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\boot_serial\bl_config.h 复制到 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c1294xl\bl_config.inc? serial_boot

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

    尊敬的 Charles:

    感谢您的评论。

    我们可以先下载 bootloader、boot_demo1、然后再下载程序、反之亦然。

    工作正常。

    我的两个问题

    1.在使用 LM Flashloader 转储我的代码(应用程序)时,我故意断开连接,然后电路板无法启动。

    我再次重复整个过程、即引导加载程序、boot_demo1、然后是我们的应用程序代码。  

    我的问题是 、如果电路板的电源中断、它 将不会保留旧代码?

    2. 我已按照 bl_config.inc 的路径进行操作,但未找到该文件。 只有 bl_config.h 文件可用

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

    [引用用户="Abhijit Kumar "]

    1.在使用 LM Flashloader 转储我的代码(应用程序)时,我故意断开连接,然后电路板无法启动。

    [/报价]

    这可能意味着闪存已部分编程、因为您有意断开连接。 引导加载程序将查看闪存的前两个位置、即0x0处的堆栈指针和0x4处的复位矢量。 如果它们不是0xFFFFFFFF 值、那么它会认为应用程序已编程。 引导加载程序将跳转到应用程序。 除非您首先手动擦除闪存、否则不会再次从串行接口引导加载。 或者您需要实施某种类型的 CRC 校验。 如果 CRC 校验失败、引导加载程序将知道下载未完成、并尝试再次引导加载。  

    有关详细信息、请参阅此帖子。  https://e2e.ti.com/support/microcontrollers/other/f/908/p/953150/3522062?tisearch=e2e-sitesearch&keymatch=check_crc#3522062

    [引用用户="Abhijit Kumar "]

    2. 我已按照 bl_config.inc 的路径进行操作,但未找到该文件。 只有 bl_config.h 文件可用

    [/报价]

    我已经多次提到过这一点。 引导加载程序示例中没有 bl_config.inc。 请参阅我之前的回答。  您能否将 bl_config.h "复制"到 bl_config.inc?

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

    尊敬的 Charles:

    我已经检查了 CRC 并给出了附加的链接。 在他们写的链接 中,您使用了 startvector bin。

    项目 startVectors 是一个简单的汇编语言项目、其栈顶和起始位置硬编码到 CCS 的地址0和4

    1
    2.
    3.
    4.
    5.
            .def Vectors
            .text
    Vectors
            .word 0x20000200
            .word 0x00001301

    在标记为 BL_STARTUP_rvmdk.s 的启动文件中应该执行同样的操作?

    2.我不明白你想说什么  

    您能否将 bl_config.h "复制"到 bl_config.inc?

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

    您好!

     抱歉、我给您一些不正确的信息、因为我想的是基于 ROM 的引导加载程序、而不是基于闪存的引导加载。 我之前说过"引导加载程序将查看闪存的前两个位置、即0x0处的堆栈指针和0x4处的复位矢量。 如果它们不是0xFFFFFFFF 值、那么它会认为应用程序已编程。 引导加载程序将跳转到应用程序。"   请忽略此声明、因为它适用于基于 ROM 的引导加载程序。  

      对于基于闪存的引导加载程序、引导加载程序将检查应用程序矢量表的前两个位置。 例如、如果您的应用程序从0x4000开始、则引导加载程序将检查应用程序的位置0x4000 (堆栈指针)和0x4004 (复位矢量)。 引导加载程序将位于0x0。 有关详细信息、请参阅引导加载程序用户指南。 以下摘录。

    由于闪存引导加载程序位于0x0000.0000、因此应用程序必须位于另一个区域
    闪存存储器。 通常、应用驻留在具有不同地址的不同闪存扇区中。
    有关给定器件的闪存扇区的详细信息、请参阅器件数据表。 与 ROM 相反
    引导加载程序、用于检查地址0x0000.0000处是否存在有效的应用程序
    闪存引导加载程序会检查应用程序固件在不同地址的存在情况
    指定给闪存引导加载程序。 闪存引导加载程序会检查前两个存储器是否处于
    指定地址的位置的值不等于0xFFFF.FFFF。 结果
    确定闪存引导加载程序是执行用户应用程序还是加载新应用程序
    应用固件。 闪存引导加载程序为引导加载器件提供了最大的灵活性。
    TivaWare 库提供了闪存引导加载程序示例、可使用各种闪存对器件进行编程
    通信端口。

    [quote user="Abhijit Kumar ">您能否将 bl_config.h "复制"到 bl_config.inc?

      我的意思是拷贝。 只是复制文件。 如果您有名为 foo.h 的文件,则只需复制名为 foo.in c.的文件的另一个副本 我不知道如何表达它。 如果只想将 bl_config.h 重命名为 bl_config.inc、这是另一种方法。 请尝试。