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.

[参考译文] DRA821U:关于 WKUP_GPIO0_6

Guru**** 2466550 points
Other Parts Discussed in Thread: J7200XSOMXEVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1469611/dra821u-about-wkup_gpio0_6

器件型号:DRA821U
Thread 中讨论的其他器件:J7200XSOMXEVM

工具与软件:

大家好、团队成员:

我们 已根据 J7200XSOMXEVM 参考设计设计设计了定制电路板。

我们正在使用 PROCESSOR-SDK-LINUX-RT J7200(10.00.07.03)为定制电路板开发软件。

定制电路板配备了7段 LED 显示屏。 引脚配置如下:

	sseg_led_pins_default: sseg-led-pins-default {
		pinctrl-single,pins = <
			J721E_WKUP_IOPAD(0x64, PIN_OUTPUT, 7) /* (B21) WKUP_GPIO0_3 */
			J721E_WKUP_IOPAD(0x68, PIN_OUTPUT, 7) /* (D13) WKUP_GPIO0_4 */
			J721E_WKUP_IOPAD(0x6c, PIN_OUTPUT, 7) /* (B16) WKUP_GPIO0_5 */
			J721E_WKUP_IOPAD(0x70, PIN_OUTPUT, 7) /* (C14) WKUP_GPIO0_6 */
			J721E_WKUP_IOPAD(0x74, PIN_OUTPUT, 7) /* (C18) WKUP_GPIO0_7 */
			J721E_WKUP_IOPAD(0x78, PIN_OUTPUT, 7) /* (C21) WKUP_GPIO0_8 */
			J721E_WKUP_IOPAD(0x7c, PIN_OUTPUT, 7) /* (C19) WKUP_GPIO0_9 */
			J721E_WKUP_IOPAD(0x80, PIN_OUTPUT, 7) /* (C20) WKUP_GPIO0_10 */
		>;
	};

在引导加载程序(u-boot)期间、"GPIO 方向寄存器"设置为输出。

=> gpio status -a
Bank gpio@42110000_:
gpio@42110000_0: input: 0 [ ]
gpio@42110000_1: input: 0 [ ]
gpio@42110000_2: input: 0 [ ]
gpio@42110000_3: output: 0 [ ]
gpio@42110000_4: output: 0 [ ]
gpio@42110000_5: output: 0 [ ]
gpio@42110000_6: output: 0 [ ]
gpio@42110000_7: output: 0 [ ]
gpio@42110000_8: output: 0 [ ]
gpio@42110000_9: output: 0 [ ]
gpio@42110000_10: output: 0 [ ]
...

但是、在内核启动期间、某些 LED 会意外亮起。 检查寄存器后发现"GPIO 方向寄存器"已被重写。

~# devmem2 0x42110010
/dev/mem opened.
Memory mapped at address 0xffffa0f82000.
Read at address  0x42110010 (0xffffa0f82010): 0xFFFFF847

我检查了器件树、没有引脚冲突。

除了设备树之外、我还应该检查什么其他内容吗?

此外、参考设计 J7200XSOMXEVM 使用 WKUP_GPIO0_6作为输入。 这是否有任何影响?

此致、

Mizutani

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

    您好  Mizutani:

    有2个电平可将引脚配置为 GPIO:

    1. 引脚必须配置为 PIN_INPUT 的 PADCONFIG 电平。
      这是在 GPIO 模式下必须执行的操作。 基本而言、PADCONFIG 寄存器的位18必须设置为1。 必须将模式设置为0x7。 这意味着:

      J721E_WKUP_IOPAD (0x64、PIN_ 输入 、7)/*(B21) WKUP_GPIO0_3 */
      J721E_WKUP_IOPAD (0x68、PIN_ 输入 、7)/*(D13) WKUP_GPIO0_4 */
      J721E_WKUP_IOPAD (0x6c、PIN_ 输入 、7)/*(B16) WKUP_GPIO0_5 */
      J721E_WKUP_IOPAD (0x70、PIN_ 输入 、7)/*(C14) WKUP_GPIO0_6 */
      J721E_WKUP_IOPAD (0x74、PIN_ 输入 、7)/*(C18) WKUP_GPIO0_7 */
      J721E_WKUP_IOPAD (0x78、PIN_ 输入 、7)/*(C21) WKUP_GPIO0_8 */
      J721E_WKUP_IOPAD (0x7c、PIN_ 输入 、7)/*(C19) WKUP_GPIO0_9 */
      J721E_WKUP_IOPAD (0x80、PIN_ 输入 、7)/*(C20) WKUP_GPIO0_10 */
    2. 您可以在 GPIO 级别将其配置为输出。

    -基尔西

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

    您好!

    我们已尝试按如下方式修改器件树、但未更改结果:

    	sseg_led_pins_default: sseg-led-pins-default {
    		pinctrl-single,pins = <
    			J721E_WKUP_IOPAD(0x64, PIN_INPUT, 7) /* (B21) WKUP_GPIO0_3 */
    			J721E_WKUP_IOPAD(0x68, PIN_INPUT, 7) /* (D13) WKUP_GPIO0_4 */
    			J721E_WKUP_IOPAD(0x6c, PIN_INPUT, 7) /* (B16) WKUP_GPIO0_5 */
    			J721E_WKUP_IOPAD(0x70, PIN_INPUT, 7) /* (C14) WKUP_GPIO0_6 */
    			J721E_WKUP_IOPAD(0x74, PIN_INPUT, 7) /* (C18) WKUP_GPIO0_7 */
    			J721E_WKUP_IOPAD(0x78, PIN_INPUT, 7) /* (C21) WKUP_GPIO0_8 */
    			J721E_WKUP_IOPAD(0x7c, PIN_INPUT, 7) /* (C19) WKUP_GPIO0_9 */
    			J721E_WKUP_IOPAD(0x80, PIN_INPUT, 7) /* (C20) WKUP_GPIO0_10 */
    		>;
    	};

    在 U-boot 中、"GPIO 方向寄存器"是0xFFFFF807、但内核启动后、它变为0xFFFFF847。

    我们的要求是在 u-boot 执行后将"GPIO 方向寄存器"持续设置为0xFFFFF807。

    但是、出于某种原因、只有 WKUP_GPIO0_6发生变化。

    您能否告诉我如何解决此问题或如何调查原因?

    此致、

    Mizutani

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

    您好!

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts?h=ti-linux-6.6.y#n158

    如果您想删除该代码库、请勾选该代码库。

    -基尔西

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

    您好!  

    有。 R5F 等远程内核可以访问的。 在它们上运行的固件可能会改变方向。  

    您是否可以在 rootfs 中将/lib/firmware 重命名为/lib/firmware-backup

    然后尝试引导。 这将避免默认固件加载到 R5F。

    此致、

    基尔西  

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

    您好!

    我们在根文件系统中将/lib/firmware 重命名为/lib/firmware-backup。

    但是、这种现象仍然存在。

    是否有任何其他可能的因素?

    此致、

    Mizutani

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

    您好 Mizutani:

    请共享完整的引导日志、以仔细检查固件是否未加载。 可以写入寄存器的 Linux 或远程内核固件。

    -基尔西

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

    您好!

    抱歉。 我不确定确切的计时、因为我是在直观地检查 LED。

    可使用哪些方法来准确确定时序?
    是否有可能通过 JTAG (CCS)在内核启动定时设置一个断点?

    此致、

    Mizutani

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

    嗨、Mizutani:

    到目前为止、我已经了解到、在 U-Boot 结束之前是可以的、对吧? 如果您在 U-Boot 中读取寄存器、设置是否正确?  

    此致、  

    基尔西  

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

    您好!

    我已确认、它在 u-boot 之前都能按预期工作。 我还使用 CCS 对其进行了检查、并且寄存器值是正确的。

    此致、

    Mizutani

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

    您好、 Mizutani。

    您是否可以在此处添加一个无限循环:

    git diff drivers/gpio/gpio-davinci.c 
    diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
    index 8c033e8cf3c9..fe947919f326 100644
    --- a/drivers/gpio/gpio-davinci.c
    +++ b/drivers/gpio/gpio-davinci.c
    @@ -158,7 +158,9 @@ static int davinci_gpio_probe(struct platform_device *pdev)
            unsigned int ngpio, nbank, nirq, gpio_unbanked;
            struct davinci_gpio_controller *chips;
            struct device *dev = &pdev->dev;
    +       volatile int vol = 1;
     
    +       while(vol);
            /*
             * The gpio banks conceptually expose a segmented bitmap,
             * and "ngpio" is one more than the largest zero-based
    

    您可以附加 CCS 并读取寄存器值。 在 MMR 上为 WKUP_GPIO 设置一个写入断点。
    你可以尝试,这应该是最简单的方法来确定什么是写作。

    -基尔西

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

    您好!

    通过添加无限循环、我们能够确定重写 LED 的位置。

    通过在 board-support/ti-u-boot-2024.04+git/boot/image-FDT.c 中注释掉"fdt_ret = ft_board_setup (blob、gd->bd);"来防止了该问题

    int image_setup_libfdt(struct bootm_headers *images, void *blob,
    		       struct lmb *lmb)
    {
    	ulong *initrd_start = &images->initrd_start;
    	ulong *initrd_end = &images->initrd_end;
    	int ret, fdt_ret, of_size;
    	
    	...
    	
    	
    #if IS_ENABLED(CONFIG_CMD_PSTORE)
    	/* Append PStore configuration */
    	fdt_fixup_pstore(blob);
    #endif
    	if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {
    		const char *skip_board_fixup;
    
    		skip_board_fixup = env_get("skip_board_fixup");
    		if (skip_board_fixup && ((int)simple_strtol(skip_board_fixup, NULL, 10) == 1)) {
    			printf("skip board fdt fixup\n");
    		} else {
    			fdt_ret = ft_board_setup(blob, gd->bd);    <===
    			if (fdt_ret) {
    				printf("ERROR: board-specific fdt fixup failed: %s\n",
    				       fdt_strerror(fdt_ret));
    				goto err;
    			}
    		}
    	}	
    	if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
    		fdt_ret = ft_system_setup(blob, gd->bd);

    您知道为什么注释掉"ft_board_setup"会阻止这种情况发生吗?

    关于应对措施、哪一个更好:注释掉"ft_board_setup"或设置"config_of_Board_Setup=n"?

    此致、

    Mizutani

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

    嗨、 Mizutani:

    感谢您提供的信息! 这是用于选择 Hyperbus 的 GPIO 用法。

    如果您没有该要求、请注释掉 detect_enable_hyperflash。

    应能应对 GPIO 的意外更改。

    请告诉我。

    此致、
    基尔西