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.

[参考译文] AM3351:GPIO 引脚在引导序列中与 XIP 一同失败

Guru**** 2553260 points
Other Parts Discussed in Thread: AM3351

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/606707/am3351-gpio-pins-fail-with-xip-in-boot-sequence

器件型号:AM3351

下午好!

我使用的是具有 MMC0 SD 卡引导功能的定制 AM3351板、最初使用的是引导序列

MMC0 -> SPI0 -> UART0 -> USB0

我看到我的引导顺序发生了变化、因为它有时无法从 MMC0引导、并且会在 USB0上挂起。 我的新引导顺序是 XIP [MUX mode2]-> UART0 -> EMAC1 -> MMC0。 但是、使用新的引导序列时、我无法使用 GPIO2[22]和 GPIO2[23]。 XIP 引导程序可能会重新分配这些引脚、这样我就不能再将它们切换为 GPIO-LED 了。 我知道这些 GPIO 和 XIP 引脚之间有一些重叠。 我非常困惑、因为在我的器件树中、我要将它们设置为输出、高电平有效并启用、但它们在启动后输出低电平。 如果我更改引导顺序以删除 XIP 引导、则它将工作正常。

如果您有任何建议、请告诉我。

设备树中

LED{
兼容="GPIO-LED";
pinctrl-names ="default";
pinctrl-0 =<&USB_HUD_PINs>;
RESET_LEed{
标签="HUD_RESET";
GPIO =<&GPIO2 24 GPIO_ACTIVE_HIGH_>;
默认状态="on";
};
心跳 LED{
标签="心跳";
GPIO =<&GPIO2 0 GPIO_ACTIVE_LOW>;
默认状态="on";
};
audio_codec_enable{
标签="Audio 编解码器启用";
GPIO =<&GPIO2 16 GPIO_ACTIVE_HIGH_>;
默认状态="on";
};
audio_amp_enable{
标签="Audio Amp_enable";
GPIO =<&GPIO2 5 GPIO_ACTIVE_LOW>;
默认状态="off";
};
AUDIO_GAIN_0{
标签="音频_增益_0";
GPIO =<&GPIO2 GPIO_ACTIVE_HIGH_>;
默认状态="off";
};
AUDIO_GAIN_1{
标签="音频_增益_1";
GPIO =<&GPIO2 3 GPIO_ACTIVE_HIGH_>;
默认状态="off";
};
FAN_ENABLE{
标签="FAN_ENABLE";
GPIO =<&GPIO2 20 GPIO_ACTIVE_HIGH_>;
默认状态="off";
};
battery_charge 启用{
标签="battery_charge _enable";
GPIO =<&GPIO2 22 GPIO_ACTIVE_HIGH_>;
默认状态="on";
};
battery_backup_enable{
标签="battery_backup_enable";
GPIO =<&GPIO2 23 GPIO_ACTIVE_HIGH_>;
默认状态="off";
};

};

GPIO_Pins:GPIO_Pins{
pinctrl-single、pins =<
0x88 (PIN_INPUT | MUX_MODE7)/*(U17) GPMC_csn3.GPIO2[0]*/
0x8c (PIN_INPUT | MUX_MODE7)/*(V16) GPMC_clk.GPIO2[1]*/
0x90 (PIN_INPUT | MUX_MODE7)/*(V10) GPMC_advn_ALe.GPIO2[2]*/
0x94 (PIN_INPUT | MUX_MODE7)/*(W9) GPMC_oen_ren。GPIO2[3]*/
0x98 (PIN_INPUT | MUX_MODE7)/*(U8) GPMC_WN.GPIO2[4]*/
0x9C (PIN_INPUT | MUX_MODE7)/*(V8) GPMC_be0n_cle。GPIO2[5]*/
0xA0 (PIN_INPUT | MUX_MODE7)/*(U1) LCD_Data0.GPIO2[6]*/
0xa4 (PIN_INPUT | MUX_MODE7)/*(U2) LCD_data1.GPIO2[7]*/
0xa8 (PIN_INPUT | MUX_MODE7)/*(V1) LCD_data2.GPIO2[8]*/
0xac (PIN_INPUT | MUX_MODE7)/*(V2) LCD_data3.GPIO2[9]*/
0xb0 (PIN_INPUT | MUX_MODE7)/*(W2) LCD_data4.GPIO2[10]*/
0xb4 (PIN_INPUT | MUX_MODE7)/*(W3) LCD_data5.GPIO2[11]*/
0xb8 (PIN_INPUT | MUX_MODE7)/*(V3) LCD_data6.GPIO2[12]*/
0xbc (PIN_INPUT | MUX_MODE7)/*(U3) LCD_data7.GPIO2[13]*/
0xc0 (PIN_INPUT | MUX_MODE7)/*(V4) LCD_data8.GPIO2[14]*/
0xc4 (PIN_INPUT | MUX_MODE7)/*(W4) LCD_data9.GPIO2[15]*/
0xc8 (PIN_INPUT | MUX_MODE7)/*(U5) LCD_data10.GPIO2[16]*/
0xcc (PIN_INPUT | MUX_MODE7)/*(V5) LCD_data11.GPIO2[17]*/
0x138 (PIN_INPUT | MUX_MODE7)/*(N16) gmii1_rxd2.gpio2[19]*/
0x13c (PIN_INPUT | MUX_MODE7)/*(P19) gmii1_rxd1.GPIO2[20]*/
0xe0 (PIN_OUTPUT | MUX_MODE7)/*(U7) LCD_vSYNC.GPIO2[22]*/
0xe4 (PIN_OUTPUT | MUX_MODE7)/*(T7) LCD_HSYNC.GPIO2[23]*/
0xEC (PIN_INPUT | MUX_MODE7)/*(W7) LCD_AC_BIAS_EN.GPIO2[25]*/
>;
};

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这些引脚被 ROM 代码重新配置为 XIP 启动。 您可以在 U-boot 的 SPL 级早期为 GPIO 配置它们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速回复。 在我的器件树中将这些定义为输出是否不够?

    我们还可以通过任何方式从 Linux 用户空间进行此更改吗?

    您是否有如何更改 SPL 代码或用户空间的示例?

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

    您好 Chris、

    请检查 此主题。

    此致、
    Kemal

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

    我尝试将多路复用器模式显式设置为7、但它似乎被覆盖。 它显示它更改为0xF、但当我再次读取它时、它返回到0x9。 是否有需要禁用 XIP 的地方? 有什么想法我为什么不能设置这个寄存器?

    root@AM335x-EVM:~# devmem2 0x44E108E0
    /dev/mem 已打开。
    映射到地址 bb6f97000的内存。
    在地址0x44E108E0 (0xb6f978e0):0x00000009处读取

    root@AM335x-EVM:~# devmem2 0x44E108E0 w 0x0000000F
    /dev/mem 已打开。
    映射到地址 bbb6f0b000的内存。
    在地址0x44E108E0 (0xb6f0b8e0):0x00000009处读取
    在地址0x44E108E0 (0xb6f0b8e0)写入:0x0000000F、回读0x0000000F

    root@AM335x-EVM:~# devmem2 0x44E108E0
    /dev/mem 已打开。
    映射到地址 bb6f8a000的内存。
    在地址0x44E108E0 (bb6f8a8e0):0x00000009处读取
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们将从 MMC0上的 DDR 存储器引导。 我们将使用引导序列设置 SYSBOOT[4:0] 11010。 器件序列为 XIP[MUX2](LCD)、UART0、SPI0、MMC0。 我们发现、有几个 I/O 在引导后似乎未被器件树正确设置。 我们怀疑问题可能是由启动设备的设置引起的、明确地说是 XIP。 在 XIP 引导模式下、似乎未针对我们的应用正确配置的引脚是 LCD_VSYNC 和 LCD_HSYNC。 我们怀疑、我们可能需要为这些引脚配置引脚多路复用器、和/或禁用 LCD 模块并重新配置这些引脚、以便它们在我们的系统中正常工作。 是否有人在这类问题上有经验? 感谢你的任何帮助。

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

    我能够成功地在 U-boot 代码中设置 pinmux。 在 Linux 用户空间中使用设备树或 devmem2命令不起作用。 在本例中、有什么想法需要在 U-boot 中设置它?

    谢谢、

    Chris