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.

[参考译文] TM4C129ENCPDT:当前在 USB ROM 引导加载程序模式下对处理器进行编程的方法是什么?

Guru**** 2872520 points

Other Parts Discussed in Thread: TM4C129ENCPDT, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1627603/tm4c129encpdt-what-is-the-current-method-for-programming-the-processor-in-usb-rom-bootloader-mode

器件型号: TM4C129ENCPDT
Thread 中讨论的其他器件: UNIFLASH

您好!

我查阅了许多有关在 ROM 引导加载程序模式下对 TM4C129E 处理器进行编程的 TI 论坛文章(其中大多数都很旧,不再有用)、但找不到可正常工作的东西。

我将在定制电路板上使用 TM4C129ENCPDT 处理器。 BPPTCFG 已配置为在启动时特定 GPIO 生效(正常工作)时进入引导加载程序模式。

我尝试在 Parallels 下同时使用 Mac 和 Windows 11 (Arm)。

在 MacOS 中、我可以在插入 USB 端口时看到该设备...

TIVA 器件固件更新:

 产品 ID:0x00ff
 供应商 ID:0x1cbe (Texas Instruments - Stellaris)
 版本:0.01
 序列号:00000000
 制造商: Texas Instruments Incorporated
 位置 ID:0x02100000

使用“dfu-util -l“、我会获得以下输出:

dfu-util 0.11
...

找到 DFU:[1cbe:00ff] ver=0001、devnum=1、cfg=1、intf=0、path=“2-1",“,</s>、 Alt=0、name=“unknown",“,serial="00000000"、serial="00000000"</s>“ “

但是、如果我通过“dfu-util -v -D 进行编程 “我得到以下输出:

dfu-util 0.11
...

libusb 版本 1.0.27 (11882)
dfu-util:警告:DFU 后缀签名无效
dfu-util:未来的 dfu-util 版本中将需要有效的 DFU 后缀
正在打开支持 DFU 的 USB 设备...
器件 ID 1cbe:00ff
器件 DFU 版本 0110
DFU 属性:(0x07) bitCanDnload 位 CanUpload 位 ManifestationTolerant
分离超时 65535 ms
正在申请 USB DFU 接口...
正在设置备用接口#0...
正在确定设备状态...
DFU state (10)= dfuERROR、status (11)= iString 指示特定于供应商的错误
清除状态
正在确定设备状态...
DFU state (2)= dfuIDLE、status (0)=不存在错误条件
DFU 模式器件 DFU 版本 0110
器件返回的传输大小为 1024
将数据从 PC 复制到 DFU 器件
下载[]              0%       0 字节失败!
DFU state (10)= dfuERROR、status (11)= iString 指示特定于供应商的错误

 

如果我尝试在 Windows 11 平台上安装 WinUSB 作为驱动程序、我会看到设备为:

TIVA 器件固件更新

硬件 ID:
USB\VID_1CBE&PID_00FF&REV_0001
USB\VID_1CBE&PID_00FF

则可以说器件能够正常工作。

如果我在命令框“dfuprog -e“中尝试、我会看到:

版权所有 (c) 2008-2020 Texas Instruments Incorporated。  保留所有权利。

无法找到 USB 设备固件升级设备的驱动程序。
在运行此程序之前、请将 DFU 器件连接到此系统
并在 Windows 提示时安装设备驱动程序。  设备驱动程序
可在评估套件 CD 上找到、也可以在 windows_drivers 中找到
TivaWare 安装的工程目录。

我已经尝试了 LM Flasher Programmer、但不支持 USB。

我已经尝试了 UniFlash、但似乎也没有本机 USB 连接。

 

因此、我不知道如何在此处理器上执行固件更新。

理想情况下、我希望使用 Windows 版本、因为这是我的客户端运行的版本。

您能提供解决方案吗?

友好的酒店
James。

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

    好的。 我已经发现(通过从闪存上传二进制文件并将其与生成的输出进行比较)TI DFU 二进制文件需要一个 8 字节的标头(前 4 个字节= 1、后 4 个字节=二进制文件长度(以字节为单位)。 还有 一些 4 字节扇区对齐调整、我尝试在链接器文件中实现对齐但没有成功。

    CCS 中是否有可以输出 DFU 二进制文件而无需手动创建标头并解决对齐问题的配置? 我可能错过了一些重要的东西在这个地方,但只是似乎找不到它。

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

    嗯,它看起来我已经来到我自己的救援,但我将在这里概述它,以供将来参考。

    从.out 文件转换为.bin 文件时、TI 转换工具“armhex"似乎“似乎无法正确地 4 字节对齐数据(或者至少我找不到任何可行的选项)、因此我下载了一个通用选项(在本例中为我的 Mac)并使用它来正确地生成二进制输出。 我创建了一个简单的 Python 脚本来执行转换、并在 8 字节标头之前添加。  我不使用 Python 太多,所以你可能会想出更好的东西,但这里是什么适合我。 (我尝试在这个对话框中使用格式工具,但这也不起作用,所以很抱歉,它只是简单的,没有缩进的文本:- p 我相信你可以根据需要重新格式化。

    因此、要将“app.out"转换“转换为“app.bin",“,请、请执行以下操作:

    BuildDFU.py app.out app.bin

    然后、一旦处理器处于 USB DFU 模式:

    dfu-util -D app.bin

    ---------------  BuildDFU.py  ------------

    #!/usr/bin/python3

    导入系统
    导入操作系统

    #路径
    objcopy =“/opt/homebrew/Cellar/arm-none-eabi-binutils/2.46.0/bin/arm-none-eabi-objcopy

    #检查参数
    如果 (len(sys.argv)!= 3):
    打印 ('\n 格式:BuildDFU.py \n')
    退出 (1)

    #获取文件名
    input_file = sys.argv[1]
    output_file = sys.argv[2]
    temp_file = output_file +“.tmp"</s>“
    print(“从“+ input_file +“\r"生成“生成“+ output_file +“)

    #将输出 (ELF) 转换为二进制文件
    os.system (objcopy +“-O 二进制--gap-fill 0x00 “+ input_file +“+ temp_file)

    #打开输出文件
    将 open (output_file、'wb') 作为输出文件:

    #获取输入文件
    open (temp_file、'rb') 作为 infile:

    #读取文件内容
    firmware = infile.read()

    #构建标头
    标头= bytearray ([1、0、0、0])
    firmware_len = len (firmware)
    header.append (firmware_len 和 0xFF)
    header.append ((firmware_len >> 8)& 0xFF)
    header.append ((firmware_len >> 16)& 0xFF)
    header.append ((firmware_len >> 24)& 0xFF);

    #写入标头和固件
    OUTFILE.WRITE(标头+固件)
    OUTFILE.CLOSE ()

    infile.close()

    #删除临时文件
    os.remove (temp_file)

    打印(“完成!\r“)