工具/软件:
我需要在电路板上安装两条连接到焊球 U14和 U15的线路、以便在引导过程中尽快主动设置为低电平。
借助一个简单的 SBL 示例(我实际上编辑了用于测试的 OTP Keywriter 应用)、我可以使其非常简单:
我将 GPIO 添加到 syscfg 文件中:
... const gpio = scripting.addModule("/drivers/gpio/gpio", {}, false); const gpio1 = gpio.addInstance(); const gpio2 = gpio.addInstance(); ... gpio1.$name = "CONFIG_GPIO1"; gpio1.pinDir = "OUTPUT"; gpio1.trigType = "RISE_EDGE"; gpio1.GPIO.$assign = "GPIO0"; gpio1.GPIO.gpioPin.$assign = "PRG1_PRU0_GPO9"; gpio2.$name = "CONFIG_GPIO2"; gpio2.pinDir = "OUTPUT"; gpio2.trigType = "RISE_EDGE"; gpio2.GPIO.$assign = "GPIO0"; gpio2.GPIO.gpioPin.$assign = "PRG1_PRU0_GPO10"; ...
然后在 SBL 代码中设置 GPIO (同样、由于我在实验中使用了 OTP Keywriter、因此只需将代码添加到 keywriter_setVpp ()函数中):
#define TEST1_GPIO_BASE_ADDR (AddrTranslateP_getLocalAddr(CONFIG_GPIO1_BASE_ADDR)) // Get local address for GPIO1 #define TEST2_GPIO_BASE_ADDR (AddrTranslateP_getLocalAddr(CONFIG_GPIO2_BASE_ADDR)) // Get local address for GPIO2 void keywriter_setVpp(void) { uint32_t gpioBaseAddr1 = (uint32_t)TEST1_GPIO_BASE_ADDR; GPIO_setDirMode(gpioBaseAddr1, CONFIG_GPIO1_PIN, GPIO_DIRECTION_OUTPUT); GPIO_pinWriteLow(gpioBaseAddr1, CONFIG_GPIO1_PIN); uint32_t gpioBaseAddr2 = (uint32_t)TEST2_GPIO_BASE_ADDR; GPIO_setDirMode(gpioBaseAddr2, CONFIG_GPIO2_PIN, GPIO_DIRECTION_OUTPUT); GPIO_pinWriteLow(gpioBaseAddr2, CONFIG_GPIO2_PIN); }
与正常的 OTP Keywriter SBL 示例一样、针对 MCU+ SDK 编译。
这可以正常工作、正如我在"实际"场景中需要的那样、这是完整的正常 u-boot 链。
我的 u-boot 将启动一个自定义独立应用程序、该应用程序将执行所有自己的多路复用、初始化和运行所有硬件。
在启动期间、这两行必须保持低电平才能实现完全引导、直到我的应用接管为止。
我有一个基于10.00.07.04 Linux SDK (board-support/ti-u-boot)中 am64x-EVM 文件的自定义电路板配置(defconfig、设备树等)、但我无法让这些行具有我想要的行为。
请帮助我使其正常工作。
我假设我需要将两个球添加到 k3-am642-r5-<myboard>.dts
文件中、然后将该spl_board_init()
函数中的值设置为 low (低)? 我无法让它正常工作。