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.

[参考译文] Linux:DM368 (Linux)平台是否支持 uboot 中的 fastboot?

Guru**** 2589680 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587895/linux-does-dm368-linux-platform-support-fastboot-in-uboot

工具/软件:Linux

TU DM368 (Linux)平台是否支持 uboot 中的快速启动协议?

因为我们希望使用 USB 电缆来升级固件。

谢谢~

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

    默认情况下不支持。 但您可以添加该功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarkesh:
    谢谢~

    我在 DM368 uboot 中启用了快速启动。
    现在可以在窗口7中找到 fastboot 器件。

    但我们无法从 PC 端接收任何数据包。
    fastboot 将始终在 PC 端显示"No such device or address"。

    fastboot.exe 闪存引导 IPNC_dm368.squashfs
    正在发送'boot'(25112 KB)...
    失败(命令写入失败(无此类设备或地址))
    已完成。 总时间:0.004s


    我们已经从下面的这个 git 中集成了它。
    arago-project.org/.../
    ~\u-boot\con\cmd_fastboot.c
    ~\u-boot\drivers\usb\musb\musb_udc.c


    我还为 uboot 添加了这些配置。
    #define PINMUX40x01c40010
    #define PINMUX4_USBDRVBUS_BITCLEAR 0x3000
    #define PINMUX4_USBDRVBUS_BITSET 0x2000

    /* USB 配置*/
    #define CONFIG_USB_DaVinci
    #define DaVinci_DM365EVM
    #define CONFIG_MUSB_UDC 1
    #define CONFIG_MUSB_HCD 1

    #define CONFIG_USB_DEVICE 1
    #define USB_BCD_VERSION0x0110

    //#define CONFIG_SYS_console_is_in_ENV 1.
    #define CONFIG_USBD_VendorID 0x0451
    #define CONFIG_USBD_ProductID 0x5678
    #define CONFIG_USBD_Manufacturer "德州仪器"
    #define CONFIG_USBD_PRODUCT_NAME "DM365VM"

    #defineCONFIG_FASTBOOT_TRANSFORT_BUFFER(PHY_SDRAM_1 + SZ_16M)
    #defineCONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE(SZ_128M - SZ_16M)

    最终结果是我们可以找到 fastboot 器件。
    但我们现在无法发送任何数据。

    日志看起来正常。
    我在 USB 驱动程序中找不到任何错误。

    失败日志:
    Rd ###
    DM36x 初始化通过!
    TI UBL 版本:1.50
    引导目录引导装载程序
    引导模式= NAND
    正在启动 NAND 复制...
    有效的 magicnum、0xA1ACED66、位于块0x00000019中。
    完成
    跳到0x81080000处的入口点。


    U-Boot 1.3.4-脏(2017年4月11日- 18:45:54) DM368-IPNC-3.1.0

    I2C:就绪
    DRAM:128 MB
    NAND:NAND 器件:制造商 ID:0xEC、芯片 ID:0xF1 (Samsung NAND 128Mib3、3V 8位)
    在第65472页、版本0x01中发现错误的块表
    在第65408页、版本0x01中找到错误的块表
    128 MIB
    ***警告-使用默认环境时 CRC 或 NAND 损坏

    IN:串行
    OUT:串行
    ERR:串行
    ARM 时钟:- 432MHz
    DDR 时钟:- 340MHz
    按任意键停止自动引导:1.
    正在启动 fastboot 协议
    FASTBOOT 已初始化
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、侯

    知道您正在尝试启用它。 您可以在 Linux 计算机中尝试同样的操作吗? 调试速度会更快。 我们需要检查是否发生了枚举。 如果是在 Linux 中、我们可以检查 lsusb 和 dmesg。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、侯

    如果您确定在 Windows 中、会检测到快速启动、您可能可以查看 特定于 INF 文件的此链接 e2e.ti.com/.../169037、并查看它是否有用。

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

    您好 Dwarakesh:

    我试过 android_winusb.in

    它无法解决这个问题。

    我已经在 Linux PC 中附加了 lsusb.txt 和 kmsg.txt。

    我仍然找不到任何问题。

    lsusb.txt

    e2e.ti.com/.../3021.lsusb.txt

    kmsg.txt (Linux PC)

    e2e.ti.com/.../2350.kmsg.txt

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

    我怀疑批量端点配置和在 DM3x 端点运行、因为枚举没有问题、只有数据传输存在问题。 您是否在 PC 端检查了 fastboot 设备列表? 从 Linux 计算机尝试 fastboot 命令时,错误间隔会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh:
    当我使用 fastboot flash boot ipnC_dm368.squashfs 时、会出现以下错误。

    正在发送'boot'(25112 KB)...
    失败(命令写入失败(无此类设备或地址))
    已完成。 总时间:-0.000s

    我发现当我在 PC 端调用"fastboot flash boot ipnc_dm368.sqashfs"时、PC 端始终发送 USB_REQ_get_descriptor 以从 DM368获取序列号。

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

    您可以在文件 drivers/usb/musb_hcd.c 中进行调试、因为这是用于接收 USB_REQ_GET_descriptor 的 DM3x 器件最终实现、并查看是否发生任何故障(是否出现在此处)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh:
    musb_hcd.c 用于 USB 主机控制。
    因为 DM368现在是从器件。 (B 外设作为快速引导器件)
    我认为我们不应该查看这个文件。 (musb_hcd.c)
    Darkhou
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、侯

    哎呀、你是对的、文件错误的。 基本上、我想检查 DM3x 端的描述符请求。 drivers/USB/gadget/ep0.c:
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh:
    我发现描述符请求是正常行为。
    因为在我们执行一条命令时 fastboot 将获得序列号。

    问题应该集中在我们无法在批量模式下接收数据包。
    我在 fastboot 客户端中添加了日志。
    USB_write():
    n = ioctl (h->desc、USBDEVFS_BULK、&BULK);

    ioctl 是正常的。
    但 DM368之后无法接收任何事件。
    你有什么想法吗?
    Darkhou
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、侯

    我假设当您意味着没有活动时,它在 UDC_IRQ()函数中发生批量传输。 我们是否可以转储特定于外设模式的 MUSB 寄存器。 对于 EP1和 EP2、例如 peri_rxcsr = readw (&musbr->EP[EP].EPN.rxcsr);对于 EP=1、2和相似的索引寄存器。

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

    您好 Dwarakesh:

    转储寄存器后、我发现我们从 Linux PC 接收数据。

    示例

    FASTBOOT 重新引导

    我在 EP1 Rx 中接收到"重新启动"。

    perI_rxcount1:6
    perI_rxcount1数据:重新启动

    但 DM368未进入 RX 状态。

    它始终保持空闲状态。

    寄存器转储:

    perI_rxcount1:6
    perI_rxcount1数据:重新启动
    faddr:0x24
    电源:0x40
    内部:0x0
    内部:0x0
    intxe:0x1f
    rxintr: 0x1E
    内部:0x8
    内部:0x0
    索引:0x4
    rxmaxp:0x0
    rxcount:0x0
    FIFO 大小:0x33

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh:
    我从 musb_udc.c 跟踪代码
    MUSB PERI_ep0_Rx_DATA_request 将设置 RX 状态。
    但我们不会接收任何控制数据包。
    您是否知道我应该检查哪个部件?
    感谢您的帮助。

    MUSB UDC.c:
    静态空 musb_perI_ep0_idle (空)

    (笑声)
    if (USB_REQ_DEVICE2HOST =(REQType & USB_REQ_DIRECTION _MASK)){
    ERR = ep0_recv_setup (ep0_话 术);
    /*要托管的设备*/
    musb_perI_ep0_TX_DATA_request (err);
    }否则{
    /*
    *主机到设备
    *
    * RX 例程将调用 ep0_recv_setup
    *数据包到达时。
    *
    musb_peri_ep0_rx_data_request ();

    (笑声)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我发现一个寄存器是错误的。
    当我们从 Linux PC 接收数据时、INTRRX 为0。

    内部:0x0
    INRx:0x0 <--它不应该为0
    intxe:0x1f
    rxintr: 0x1E
    内部:0x8
    内部:0x0

    我不确定它是否是此问题的根本原因。
    Darkhou
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Dwarakesh:
    我已经解决了。
    根本原因如下。
    Intmsksetr doens't be set kirm'.(无法正确设置。)

    TI uboot davinci.h 有一个问题。

    DaVinci.h:
    结构 DaVinci_USB_regs{
    u32版本;
    u32ctrlr;
    u32保留[0x20];<--它应该是 u8而不是 u32
    u32intclrr;
    u32intmskr;
    u32intmsksetr;
    };

    从 sprufy9.pdf 注册:
    4h ctrlr 控制寄存器
    8h STATR 状态寄存器
    10h RNDISR RNDIS 寄存器
    14h AUTOREQ 自动均衡寄存器
    20h INTSRCR USB 中断源寄存器
    24h INTSETR USB 中断源设置寄存器
    28h INTCLRR USB 中断源清零寄存器
    2Ch INTMSKR USB 中断屏蔽寄存器
    30h INTMSKSETR USB 中断屏蔽设置寄存器
    34h INTMSKCLRR USB 中断屏蔽清零寄存器
    38h INTMASKEDR USB 中断源屏蔽寄存器<- intmsksetr

    musb_udc.c 应读取 intmskedr 寄存器以获取 TX 和 TX 中断。
    MUSB
    空 UDC_IRQ (空)

    (笑声)
    //My Patch
    dregs =(struct Davinci_USB_regs *) Davinci_USB0_BASE;
    tmp = readl (&dregs->intmskedr);
    writel(Tmp,&dregs->intclrr);

    intrx =(tmp & DaVinci_USB_RXINT_MASK)>> DaVinci_USB_RXINT_SHIFT;
    intx =(tmp & Davinci_USB_TXINT_MASK)>> Davinci_USB_TXINT_SHIFT;
    intrusb =(tmp & DaVinci_USB_USBINT_MASK)>> DaVinci_USB_USBINT_SHIFT;

    if (intrx)

    //从主机读取 Rx 数据包。



    感谢您的帮助。

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

    恭喜、听得不错。