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.

[参考译文] TM4C129DNCPDT:用于通过 BeagleBone Black 进行 TM4C 编程的引导加载程序

Guru**** 2522770 points
Other Parts Discussed in Thread: TM4C129DNCPDT, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1300762/tm4c129dncpdt-bootloader-for-tm4c-programming-via-beaglebone-black

器件型号:TM4C129DNCPDT
Thread 中讨论的其他器件: SYSBIOS

您好!  

  我需要使用 BeagleBone Black 对 TM4C129进行编程。 我正在使用 Tivaware 驱动程序库和 TI- RTOS。 规划情况如下。

 

我需要遵循哪个示例。 我计划使用闪存类型的引导加载程序。 如果有任何人有其他容易和良好的选项,请建议。

此致、

Sumit Chaulya

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

    您好!

     boot_serial 是基于闪存的引导加载程序、用于对 TM4C129 MCU 上的应用程序固件进行编程/升级。 boot_deme1是一个示例应用、由引导加载程序通过 UART 端口进行编程。 您可以使用在主机 PC 上运行的 LM Flash Programmer 下载应用程序映像。 由于您使用的是 Beagle Bone、因此请参阅本应用手册 以了解如何在主机端实施编程器以进行串行引导加载。  

    https://www.ti.com/lit/pdf/spma074

    TivaWare 还具有用于 sflash 命令行实用程序的源代码、位于 C:\ti\TivaWare_C_Series-2.2.0.295\toolsflash。 您可以参考 sflash、构建在 Beagle Bone 上运行的实用程序。   

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

    尊敬的 Charles:

    感谢您的建议。

    它与 UART0协同工作。 我已经测试了示例代码 boot_serial 和 boot_deme1。

    在本例中、我有通过 UART1的程序。

    那么、如何将 UART0更改为 UART1?

    我必须遵循的流程是什么?

    我当时尝试打开引导串行示例代码来修改 UART 端口、但无法打开。

    我收到此类消息。

    我复制并粘贴到另一个文件夹、但收到了相同的消息。

    此致、

    苏米特

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

    您好!

     请参阅 bl_config.h 文件、您可以在其中配置要用于串行引导加载的 UART 端口。 下面是当前为串行引导加载配置 UART0的代码片段。 您可以将其更改为项目的 UART1。  

      

    //*****************************************************************************
    //
    // Selects the baud rate to be used for the UART.
    //
    // Depends on: UART_ENABLE_UPDATE, CRYSTAL_FREQ
    // Exclusive of: UART_AUTOBAUD
    // Requires: None
    //
    //*****************************************************************************
    #define UART_FIXED_BAUDRATE     115200
    
    //*****************************************************************************
    //
    // Selects the clock enable for the UART peripheral module
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UARTx_BASE
    //
    //*****************************************************************************
    #define UART_CLOCK_ENABLE     SYSCTL_RCGCUART_R0
    
    //*****************************************************************************
    //
    // Selects the base address of the UART peripheral module
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_CLOCK_ENABLE
    //
    //*****************************************************************************
    #define UARTx_BASE     UART0_BASE
    
    //*****************************************************************************
    //
    // Selects the clock enable for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_BASE, UART_RXPIN_PCTL and UART_RXPIN_POS
    //
    //*****************************************************************************
    #define UART_RXPIN_CLOCK_ENABLE     SYSCTL_RCGCGPIO_R0
    
    //*****************************************************************************
    //
    // Selects the base address for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_PCTL and UART_RXPIN_POS
    //
    //*****************************************************************************
    #define UART_RXPIN_BASE     GPIO_PORTA_BASE
    
    //*****************************************************************************
    //
    // Selects the port control value for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_BASE and UART_RXPIN_POS
    //
    //*****************************************************************************
    #define UART_RXPIN_PCTL     0x1
    
    //*****************************************************************************
    //
    // Selects the pin number for the GPIO corresponding to UART RX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_BASE and UART_RXPIN_PCTL
    //
    //*****************************************************************************
    #define UART_RXPIN_POS     0
    
    //*****************************************************************************
    //
    // Selects the clock enable for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_BASE, UART_TXPIN_PCTL and UART_TXPIN_POS
    //
    //*****************************************************************************
    #define UART_TXPIN_CLOCK_ENABLE     SYSCTL_RCGCGPIO_R0
    
    //*****************************************************************************
    //
    // Selects the base address for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_CLOCK_ENABLE, UART_TXPIN_PCTL and UART_TXPIN_POS
    //
    //*****************************************************************************
    #define UART_TXPIN_BASE     GPIO_PORTA_BASE
    
    //*****************************************************************************
    //
    // Selects the port control value for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_CLOCK_ENABLE, UART_TXPIN_BASE and UART_TXPIN_POS
    //
    //*****************************************************************************
    #define UART_TXPIN_PCTL     0x1
    
    //*****************************************************************************
    //
    // Selects the pin number for the GPIO corresponding to UART TX pin
    //
    // Depends on: UART_ENABLE_UPDATE
    // Exclusive of: None
    // Requires: UART_TXPIN_CLOCK_ENABLE, UART_TXPIN_BASE and UART_TXPIN_PCTL
    //
    //*****************************************************************************
    #define UART_TXPIN_POS     1

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

    您好、Charles、

    更改后、我必须构建 引导串行示例 代码?

     

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

    是的、您需要将 boot_demo1示例从 UART0更改为 UART1、然后再次重建 boot_demo1。  

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

    尊敬的 Charles:

    感谢您的快速回复。

    我必须更改示例代码中的该文件。

    然后需要构建项目源代码(boot_deme1)。

    我是谁?  

    此致、

    苏米特

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

    可以。 您需要修改屏幕截图中显示的 bl_config.h 文件并重新编译 boot_serial 示例。 您还需要修改 boot_deme1、以便从 UART0更改为 UART1、正如我在上次回复中提到的。  

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

    尊敬的 Charles:

    非常感谢您的指导。 我遵照你的指示,工作很好。  

    但现在我遇到了一些新问题。

    现在、我尝试将引导加载程序与我的实际源代码集成、但收到一些错误。

    我想我必须要改变的东西,但我不知道这是什么。

    工作环境:TM4C129DNCPDT、TI-RTOS、TIVAWARE 驱动程序库。

    更改引导加载程序的 cmd 文件之前

    更改引导加载程序的 cmd 文件后

    编译日志:


    ****项目 MPU_E 的配置版本****构建

    "C:\\ti\\ccs1120\\ccs\\utils\\bin\\gmake"-k -j 8 all -O

    生成文件:"../MPU_E.cfg"
    调用:XDCtools
    "C:/ti/xdctools_3_32_00_06_core/xs "--xdcpath="C:/ti/tirtos_tivac_2_16_00_08/packages;C:/ti/tirtos_tivac_2_16_00_08/products/tidrivers_tivac_2_16_00_08/packages;C:/ti/tirtos_tivac_2_16_00_08/products/bios_6_45_01_29/packages;C:/ti/tirtos_tivac_2_16_00_08/products/ndk_2_25_00_09/packages;C:/ti/tirtos_tivac_2_16_00_08/products/uia_2_00_05_50/packages;C:/ti/tirtos_tivac_2_16_00_08/products/ns_1_11_00_10/packages;" xdc.tools.configPkg -o configPkg -t ti.targets.arm.elf.m4F -p ti.platforms.tiva:TM4C129DNCPDT -r release -c "C:/ti/ccs1120/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS "../MPU_E.cfg"
    正在制作 package.mak (由于 package.bld)...
    正在从 package/cfg/ MPU_E_pem4f.cfg 配置 MPU_E.xem4f ...
    正在生成自定义 ti.sysbios 库 makefile ...
    开始生成库源代码...
    Making D:/HBIO/FW_Developments/HBIO_PLURALIS_CONTROL_BOARD/dev/MPU_E src sysbios/sysbios.aem4f ...
    gmake[1]:`D directory :/HBIO/FW_Developments/HBIO_PLURALIS_CONTROL_BOARD/dev/MPU_E /sysbios' src
    gmake[1]:没有什么可以做的`所有'。
    gmake[1]:正在离开目录`D /HBIO/FW_Developments/HBIO_PLURALIS_CONTROL_BOARD/dev/MPU_E src / SYSBIOS'
    完成库构建。
    clem4f package/cfg/mpu_E_pem4f.c ...
    "package/cfg/mpu_e_pem4f.c"、第22126行:警告:无法访问语句
    "package/cfg/mpu_e_pem4f.c"、第22780行:警告:无法访问语句
    "package/cfg/mpu_e_pem4f.c"、第22961行:警告:无法访问语句
    "package/cfg/mpu_e_pem4f.c"、第23893行:警告:无法访问语句
    已完成构建:"../MPU_E.cfg"

    构建目标:"MPU_E.OUT"
    调用:ARM 链接器
    "c:/ti/ccs1120/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/bin/armcl -mv7M4 --code_state=16 --float_support=FPv4SPD16 -me -O2 - define=ccs"--define=part_TM4C129DNCPDT /ti/ccs1120/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/lib --gcc --obj_warning=225 /ti/ccs1120/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/include --obj_off-display_error_number Analog_Monitor Fault_Monitor /ti/TivaWare_C_Series-2.2.0.295/driverlib/ccs/Debug/driverlib.lib -

    "configPkg/linker.cmd"、第151行:警告#10096-D:指定的地址位于存储器映射之外
    错误#10264:默认内存范围与现有内存范围闪存重叠
    错误#10264:默认内存范围与现有内存范围 SRAM 重叠
    错误#10010:链接过程中遇到错误;未生成"mpu_e.out"

    >>编译失败
    Makefile:159:目标"Mpu_E.out"的配方失败
    gmake[1]:***[MPU_E.Out]错误1
    Makefile:155:目标"全部"的食谱失败
    gmake:***[全部]错误2

    ****构建完成****

    如果我单击此行  "configPkg/linker.cmd"、第151行:警告#10096-D:指定的地址位于存储器映射之外"

    我将在 linker.cmd 中获取该代码。

      

    请建议更改。

    谢谢。此

     

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

    您好!

     请参考这篇文章,特别是切斯特的答案。  https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1024278/tm4c1294ncpdt-rtos-bios-not-working/3786291?tisearch=e2e-sitesearch&keymatch=vtable%20relocate#3786291

     您需要相应地映射矢量表。  

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

    尊敬的 Charles:

    感谢您的指导。

    问题解决了、一切正常。

    现在我有另一点。

    如果由于某些问题(通信失败、电源故障等)而无法加载新应用程序  

    复位后应使用旧应用程序启动控制器。

    那么、我必须遵循哪些步骤?

    谢谢。此致、

    苏米特  

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

    您好!

    如果由于某些问题(通信失败、电源故障等)而无法加载新应用程序  

    [/报价]

     您可以使用 CHECK_CRC 来验证是否成功对新应用程序进行编程。 有关详细信息、请参阅引导加载程序用户指南中的 CHECK_CRC。  

    复位后应使用旧应用程序启动控制器。

    [/报价]

    当前的引导加载程序将使用新固件覆盖现有的旧固件。 它不会保留旧的应用程序。 您可以自定义引导加载程序并将闪存分为两个不同的部分、在这两个部分中、引导加载程序将更新其中一个程序映像并决定上电后跳转到哪个程序映像。  

    [/quote]