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:如何扩展闪存中的引导加载程序空间?

Guru**** 2391415 points
Other Parts Discussed in Thread: TM4C129XNCZAD, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1111514/tm4c129xnczad-how-to-extend-the-bootloader-space-in-flash-memory

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

大家好、

我按照本文档“USB 串行设备固件升级(DFU)”修改引导加载程序占用的闪存空间,

如果修改后的空间大于32KB、则原始引导加载程序默认值为16KB (0x4000)、

使用引导加载程序下载应用程序、器件将重新加电、

它不会跳转到应用端、我不知道原因是什么。


修改以红色标记的以下和修改区域

引导加载程序

bl_config.h

#define APP_START_ADDRESS        0x00004000 -> 0x0000C000

#define VTABLE vstart_address   0x00004000 -> 0x0000C000

bl_link_ccs.cmd

存储器

 // 闪存(RX):origin = 0x00000000,length = 0x00004000

  闪存(RX):origin = 0x00000000、length = 0x0000C000
   SRAM (rwx):origin = 0x20000000,length = 0x00040000

应用

tm4c129xnczad.cmd

存储器

 // 闪存(RX):origin = 0x00000000,length = 0x00100000
   闪存(RX):origin = 0x0000C000,length = 0x000F4000
   SRAM (rwx):origin = 0x20000000,length = 0x00040000

application.cfg

/*将矢量表放置在应用程序起始地址*/
var ti_sysbios_family_arm_m3/hwi = xdc.useModule('ti.sysbios.family.arm.m3.Hwi');


TI_SYSBIOS_family_ARM_m3/Hwi.resetVectorAddress = 0x0000C000

RAY YANG

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

    尊敬的 Ray:

    [引用 userid="521643" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm-based microcontrollers/f/arm based microcontrollers-forum/1111514/tm4c129xnczad-how-to-extee-bootloader-space-in-flash-memory"]

    使用引导加载程序下载应用程序、器件将重新加电、

    它不会跳转到应用端、我不知道原因是什么。

    [/报价]

    我真的看不到您对0xC000的配置有什么问题。 您的意思是器件重新加电? 您是指器件复位?

    您能检查一下几件事情。

     1.加载应用程序后,是否仍可以连接到设备?

     2.如果可以连接到设备,可以查看0x0的内容。 您在那里看到引导加载程序代码了吗?

     3.您是否在0xC000处看到应用程序代码。 您可以通过打开"Memory Browser"窗口来查看存储器的内容。

     4.您是否使用 dfuprog.exe 对应用程序进行了编程?  

     5.您能否使用自定义引导加载程序在0xC000加载简单的非 TI-RTOS 程序。 尝试一个像 blinky 这样的简单程序。 引导加载程序是否会跳转至闪烁(从0xC000开始)并开始闪烁?

     6.更改为0xC000之前,默认值为0x4000。 引导加载程序在低于0x4000时是否正常工作?

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

    e2e.ti.com/.../bootloaderusb_5F00_23Jun2022.zip

    e2e.ti.com/.../hello_5F00_world_5F00_23Jun2022.zip

    您好、Charles、

    实际上、我希望引导加载程序占用128Kbtes 的闪存存储空间。

    我重新创建了一个引导加载程序和一个无操作系统应用程序、
    应用程序极其简单、可连续触发 GPIO。

    引导加载程序空间分为128KB (0x20000)、LM 闪存编程器实用程序(内部版本1613)用于烧录到 BIN 文件中、因此即使我关闭电源并再次打开电路板电源、应用程序也无法正常工作。

    RAY YANG

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

    尊敬的 Ray:

     请检查 CheckForceUpdate 的返回值。 您似乎已经设置了 PP4引脚以强制更新。 如果  CheckForceUpdate 返回1、则它将跳转到 UpdateerUSB 而不是应用程序。

    ResetISR:.asmfunc

    ;启用浮点单元。 如果有任何情况、必须在此处执行此操作
    ;;后面的 C 函数使用浮点。 请注意、有些工具链会
    ;;即使没有显式浮点、也可将 FPU 寄存器用于通用工作区
    ;点数据类型正在使用中。

    movw r0、#0xED88
    movt r0、#0xE000
    LDR R1、[r0]
    ORR R1、R1、#0x00F00000
    STR R1、[r0]


    ;初始化处理器。

    BL 处理器初始化


    ;;调用用户提供的低级硬件初始化函数
    ;如果提供。

    .if $defined (BL_HW_INIT_FN_Hook)
    .ref BL_HW_INIT_FN_HOOK
    BL BL_HW_INIT_FN_HOOK
    .endif


    ;查看是否应执行更新。

    .ref CheckForceUpdate
    BL CheckForceUpdate
    CBZ r0、CallApplication


    ;;配置微控制器。

    thumbfunc EnterBootLoader
    EnterBootLoader:
    .if $$defined (ENET_ENABLE_UPDATE)
    .ref 配置环境
    BL 配置 Enet
    .elseif $$defined (CAN_ENABLE_UPDATE)
    .ref 配置 CAN
    BL 配置 CAN
    .elseif $$defined (USB_ENABLE_UPDATE)
    .ref 配置 USB
    BL 配置 USB
    其他
    .ref 配置设备
    BL 配置设备
    .endif

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

    e2e.ti.com/.../boot_5F00_usb_5F00_with_5F00_app_5F00_at_5F00_0x20000.zip

    尊敬的 Ray:

     我刚刚尝试了 BOOST_USB 示例、将 APP_BASE 设置为0x20000、一个简单的闪烁应用也链接到0x20000。 在 DFU 模式下通过 USB 接口加载应用程序时没有任何问题、引导加载程序将跳转到0x20000处的应用程序。 我看到 LaunchPad 板上的 LED 闪烁。 为什么要将我的项目与您的项目进行比较。  

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

    您好、Charles、

    我不明白为什么,整个事情对我来说似乎令人难以置信。

    首先、根据您的回复、我关闭了 GPIO 状态检测(禁用 PP4引脚以强制更新)、
    我将引导加载程序空间调整为128KB、并且应用程序也相应地进行了调整、
    通过引导加载程序更新程序后、它可以跳转到应用程序端。

    接下来、我打开 GPIO 检测状态(启用 PP4引脚以强制更新)、在通过引导加载程序更新程序后(空间仍然为128KB)、它还可以跳转到应用端。

    感谢您的反馈、这是我必须再次调查的真正原因。

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

    到目前为止、它似乎运行良好、整个过程似乎是循环的。

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

    尊敬的 Ray:

     很高興聽到你的問題得到解決。μ A

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

    您好、Charles、

    原來在這裡講中文也會通、真是太神奇了。

    RAY YANG