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.

[参考译文] CCS/EK-TM4C1294XL:使用 boot_demo1对器件进行编程后、上载 blink bin 文件 isn#39;t working

Guru**** 2481875 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/705950/ccs-ek-tm4c1294xl-uploading-a-blink-bin-file-after-programming-the-device-with-boot_demo1-isn-t-working

器件型号:EK-TM4C1294XL

工具/软件:Code Composer Studio

这是我之前在 e2e.ti.com/.../2601348上的主题的后续内容

我现在处于一个阶段、希望使"boot_demo"示例起作用-能够使用 LM Flasher 应用程序通过 UART 连接将映像上载到器件。 如果我在对"boot_serial"示例进行编程后尝试上载、则它可以正常工作、但在"boot_demo"之后、它不能(在两种情况下都尝试上载相同的 bin 文件)。 我修改了 main 函数、在不需要按 SW1的情况下包含到引导加载程序代码的直接跳转(请参阅下面的代码)。

由于某种原因、在使用 LM 闪存器或调试器刷写 bin 后、我无法上载该 bin。 CCS。 原因可能是什么?

main (空)


   //
   //为中断处理程序启用怠惰堆栈。  这允许使用浮点
   //在中断处理程序中使用的指令,但代价是
   //额外的堆栈用法。
   //
   ROM_FPULazyStackingEnable();

   //
   //将系统时钟设置为从 PLL 以120MHz 运行
   //
   G_ui32SysClockFreq = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
                                            SYSCTL_OSC_MAIN |
                                            SYSCTL_USE_PLL |
                                            SYSCTL_CFG_VCO_480)、120000000);

   //
   //初始化每个引导加载程序类型的外设
   //支持。  因为该示例旨在与任何一起使用
   //启动加载程序,我们不知道实际使用的是什么,我们涵盖了所有内容
   //此处为串行、以太网和 USB 使用进行基址和初始化。
   //
   SetupForUART();
/*
   //
   //使能端口 J 引脚0,以便在按下“低电平”时退出到 UART 引导加载程序。
   //在 EK-TM4C1294上启用弱上拉以检测按钮
   //按。
   //
   SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
   while (!(SysCtlPeripheralReady (SYSCTL_Periph_GPIOJ)));
   GPIOPinTypeGPIOInput (GPIO_PORTJ_BASE、GPIO_PIN_0);
   HWREG (GPIO_PORTJ_BASE + GPIO_PUR)= GPIO_PIN_0;

   //
   //将端口 N 引脚1配置为输出。
   //
   SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
   while (!(SysCtlPeripheralReady (SYSCTL_Periph_GPION)));
   GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_1);

   //
   //如果未按下开关 SW1,则 LED D1以1Hz 的速率闪烁
   //在开关 SW 上按探测退出闪烁程序并跳转到
   //闪存引导加载程序。
   //
   while ((GPIOPinRead (GPIO_PORTJ_BASE、GPIO_PIN_0)& GPIO_PIN_0)!= 0x0)
   {
       GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0x0);
       SysCtlDelay (g_ui32SysClockFreq / 6);
       GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、GPIO_PIN_1);
       SysCtlDelay (g_ui32SysClockFreq / 6);
   }

   //
   //在通过控件之前,确保 LED 已关闭。
   //
   GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0x0);
   
   //
   //将控制权传递给配置了电路板的引导加载程序的任何类型
   //带有。
   //
    *
    *
   JumpToBootLoader();

   //
   //以前的函数永远不会返回,但我们需要在返回中继续
   //此处的代码可防止编译器生成警告。
   //
   返回(0);

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

    您好、Liran、

    [引用 user="Liran Sorani"]如果我在对"boot_serial"示例进行编程后尝试上载、则该示例有效、但在"boot_demo"之后不起作用(在两种情况下都尝试上载相同的 bin 文件)。

    我想您会误解 boot_demo1项目是什么。

    boot_demo1示例项目是*不*引导加载程序! 相反、它是一个与 boot_serial 一同使用的示例工程、用于了解引导加载程序功能的工作原理。

    如果您尝试使用 boot_demo1示例加载 blinky.bin、大多数情况下不会起作用、因为 boot_demo1不是该示例的目标。

    您应该查看 docs 文件夹中的 SW-EK-TM4C1294XL-UG-2.1.4.178.pdf 文档以了解每个示例的用途。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、谢谢我读了它、但我不确定它是否正确-因此基本上应该将映像 boot_dem1和 boot_serial 上传到器件中? 使用 sflash -如下所示的命令:

    sflash.exe c:\Users\Developer\workspace_v7\boot_demo1\Debug\boot_demo1.bin -p 0x4000 -c 7 -b 115200 -d -s 8 -l C:\Users\Developer\workspace_v7\boot_serial\Debug\boot_serial.bin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Liran、

    取决于您要执行的操作。 如果您希望 boot_demo1作为您运行的应用程序代码、则可以通过引导加载程序上载 boot_demo1映像器。

    boot_demo1只是一个非常简单的实例、它允许您试验引导加载程序功能、并具有与 boot_serial 一起使用的正确起始地址。

    如果您的最终目标是使用其他应用程序(如 blinky 或其他示例)、那么只要您了解了如何调整.cmd 文件存储器映射、我相信我们在您之前的线程中已经介绍了该映射的起始地址、就不需要担心 boot_dem1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯、我仍然不理解它应该如何工作的概念。
    我现在的目标是拥有任何程序-我认为 boot_demo1是一个很好的程序、因为它只是闪烁、直到您按下按钮。 但是、如何将其与引导加载程序结合使用是我在您的任何示例中都没有看到的。

    使 boot_demo1正常工作的步骤是什么? 我认为、如果我有一个引导加载程序和一个程序的工作示例、我将会更清楚地知道如何在其他地方实现它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //
    //
    //! \addtogroup example_list
    //! 

    引导加载程序演示1 (BOOT_DEMO1)

    //! //! 演示基于闪存的引导加载程序用法的示例。 启动时、 //! 应用程序将配置 UART 外设、等待 SW1为 //! 按下并闪烁 LED D1。 按下 SW1时、LED D1关闭、 //! 然后应用程序分支到引导加载程序以等待 //开始! 更新。 UART 将始终配置为115、200波特、且不 会//! 需要使用自动波特率。 //! //! 此应用旨在与基于 boot_serial 闪存的引导 //! 软件版本中包含的加载程序。 由于扇区大小为16KB、 因此//! 链接地址设置为0x4000。 如果您使用的是 USB 或以太网引导 //! 加载程序中、您可以将此地址更改为比最后 一个地址高16KB 的边界//! 引导加载程序二进制文件占用的地址、只要您还重建 //! 修改 bl_config.h 文件以设置 //! 将 APP_START_ADDRESS 设置为相同的值。 //! //! boot_demo2应用程序可与此应用程序一同使用、以 //! 轻松演示引导加载程序实际上正在更新片上 //! 闪存。 //! //! 请注意、TM4C129x 类器件还支持串行、以太网和 USB //! ROM 中的引导加载程序。 要使用此功能、请将您的应用程序连接 //! 要在闪存中的地址0x0000处运行、并使用 //! ROM_UpdateSerial、ROM_UpdateEMAC 或 ROM_UpdateUSB 函数(在 //! ROM.h)。 构建 时、此机制在 utils/swupdate.c 模块中使用//! 专门针对合适的 TM4C129x 类器件。 //// *****************

    '启动时、应用程序将配置 UART 外设、等待 SW1被按下并使 LED D1闪烁。'

    '按下 SW1时、LED D1关闭、然后应用程序分支到引导加载程序以等待更新开始。'

    这两条线也描述了我所希望的操作。 它会使 LED 闪烁、直到您使用按钮开关触发引导加载程序。 创建这样一个示例的原因是许多应用需要 GPIO 开关触发引导加载程序功能。 此示例简明地演示了这一点。

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

    Ralph -谢谢、但我已经知道-问题是当我按下按钮并且 LED 停止闪烁时、我无法使用 LM Flasher 上传任何 bin 文件-我收到错误。
    您说我不理解它的工作原理、并给了我一个指向 pdf 的链接、以查看它应该做什么、我这么做了-其中说明了以下内容:
    "此应用程序旨在与软件版本中包含的基于 boot_serial flash 的引导加载程序配合使用"。

    这对我来说似乎是一个模糊的解释,为什么不只清楚地解释如何使它们相互配合?

    如果您对此有清楚的解释、您能告诉我需要执行哪些步骤才能使其正常工作吗? 我们不胜感激。

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

    您好、Liran、

    [报价用户="Liran Sorani"]问题是当我按下按钮并且 LED 停止闪烁时,我无法使用 LM Flasher 上载任何 bin 文件-我收到错误。

    您之前的帖子中对此不清楚。

    是否在不进行任何修改的情况下使用 boot_demo1?

    我刚刚使用为您之前的线程创建的 FTDI 设置进行了测试、并使用 LMFlash:

    1) 1)通过 ICDI 对 boot_serial 进行编程(前进所需的下电上电)

    2) 2)通过 UART 引导加载程序对 boot_demo1进行编程

    3) 3)按 SW1并进入引导加载程序

    4) 4)对 boot_demo1.bin 重新编程

    5) 5)按 SW1并进入引导加载程序

    6)计划 blinky.bin

    在所有这些步骤中都没有问题。

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

    谢谢-终于成功了! )

    那么、基本上-通过将 boot_serial 上传到地址0x0、将 boot_dem1上传到0x4000、当 按下 SW1时、引导_dem1跳转到0x2C -我是否正确?

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

    正确。