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/TMS320F28069:TMS320F28069U 作为自供电 USB 器件

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/661743/ccs-tms320f28069-tms320f28069u-as-self-powered-usb-device

器件型号:TMS320F28069

工具/软件:Code Composer Studio

我们使用 TMS320F28069Uxx 作为自供电 USB 器件的主控制器。

GPIO 26和 GPIO 27配置为 USB_SP 和 USB_DM。

 

当 MCU 上电或重新设置时、两个 GPIO 被上拉、直到引导加载程序/固件禁用上拉或 将其启用为 USB PHY。


----------------------------------------------------------------------  

C2000闪存常见问题/常见问题解答

processors.wiki.ti.com/.../FAQs

 

3.4.2 Q:是否可以通过软件禁用上拉和下拉电阻器?

'如果 GPIO 引脚不常用作 ePWM、则在复位时启用上拉电阻。 然后可通过软件禁用它。"
----------------------------------------------------------------------  

 

我们的问题是: 当使用已与 PC 主机连接的 USB 电缆打开自供电设备时、PC 主机在 USB_DM 和 USB_DP 上都将看到大约2.0V (140uA * 15k 欧姆)的电压、这应该是 SE1错误、但 PC 主机似乎忽略此错误并开始枚举。

 

在220ms 左右、GPIO 26和 GPIO 27在引导加载程序/固件开始运行并禁用上拉时被下拉。

PC 主机的枚举中断并弹出"USB Device not recognized (USB 设备未识别)"。

 

TMS320F28069Uxx 引导模式为 Getmode (默认:引导至闪存)。

用于禁用上拉电阻的 Main()中的代码恰好在时钟和 PLL 启用之后、但是 GPIO26和27上的2.0V 一直持续至少220ms。

 

那么、问题是如何在 MCU 上电或复位后尽快禁用 GPIO 26和 GPIO 27上拉电阻、预计时间不到100ms。 然后、在 引导加载程序/固件 将 SOFT_CONN 设置 为上拉 USB_DP 之前、PC 主机将不会启动枚举。

 

在引导过程运行到 Main()之前,我可以在 F2806x_CodeStartBranch.asm 中执行一些操作来禁用上拉电阻吗?

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

    Yeshan、

    下面是启动时唯一可以执行某些操作的事情。 是的,您应该能够添加代码来禁用 F2806x_CodeStartBranch.asm 的上拉电阻。

    [引用 user="Yeshan ma"]在启动过程运行到 Main ()之前,我是否可以在 F2806x_CodeStartBranch.asm 中执行某项操作来禁用上拉?

    只需在 GPIO26和 GPIO27上定义一个禁用 PU 的函数、并在 wd_disable 函数中调用该函数、或者如果您在下面的其他情况下使用该函数、则定义一个函数(如 wd_disable)、然后在该函数分支中将其更改为_c_int00、 在这种情况下、code_start 在其他情况下分支到您的函数、就像在 if 情况下转移到 wd_disable 一样。

    事实上、以下函数显示了如何在分支到_c_int00之前禁用看门狗、例如、您必须为 GPIO26和 GPIO27附加/添加 pu_disable。

    来自 F2806x_CodeStartBranch.asm 的代码片段---

    .sect "codestart"

    code_start:
    如果 WD_DISABLE = 1
    LB WD_DISABLE;分支到看门狗禁用代码
    其他
    LB _c_int00;分支到 RTS 库中的 boot.asm 的启动
    .endif

    希望这对您有所帮助。

    此致
    Santosh Athuru

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

    非常感谢您的建议。
    但是、我不是一名经验丰富的固件工程师、在阅读"TMS320C28x CPU 和指令集参考指南"后、仍然不知道如何禁用 ASM 中的上拉电阻。

    "创建 C 语言可调用汇编语言"是否起作用?

    或任何其他提示?

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

    请参阅 ASM 文件中的 wd_disable 函数、我添加了两行以内联禁用 GPIO26/27上的 PU。  这里唯一的限制是、如果从生产代码中删除 wd_disable=1、则需要为此创建一个附加函数。  这应尽快禁用上拉电阻。

    (三
    *函数:WD_DISABLE
    *
    说明:禁用看门狗计时器
    
    如果 WD_DISABLE = 1
    
    .text
    wd_disable:
    SETC OBJMODE ;为28x 目标代码设置 OBJMODE
    EALLOW ;启用 EALLOW 受保护寄存器访问
    MOVZ DP,#7029h>>>6;设置 WDCR 寄存器的数据页
    MOV @7029h、#0068h;将 WDCR 中的 WDDIS 位置位以禁用 WD
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NEWCODE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    MOVZ DP,#6F8C>6;为 GPAPUD (32位)寄存器设置数据页
    MOV @6F8Dh、#0C00h 将 GPIO26/27 (寄存器上半部分)上的 PU 置位
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    EDIS ;禁用 EALLOW 受保护的寄存器访问
    
    LB _c_int00 ;分支到 RTS 库中 boot.asm 的启动 endif ;end wd_disable

    最棒的
    Matthew