U-Boot配置GPIO问题 - AM57x - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3537|回复: 2
打印 上一主题 下一主题

[已解决] U-Boot配置GPIO问题

[复制链接]

44

主题

368

帖子

2894

积分

创龙

Rank: 8Rank: 8

积分
2894
跳转到指定楼层
楼主
发表于 2020-1-7 17:08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
客户问题

现在需要解决在系统启动过程中24个输出口状态不固定的问题,使在系统启动过程中数字输出端口的状态稳定为高电平或是低电平;按现在的硬件设计需要做到开机过程中所有的输出指示灯不亮,即输出要求为高电平。请问应该如何处理呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

44

主题

368

帖子

2894

积分

创龙

Rank: 8Rank: 8

积分
2894
沙发
 楼主| 发表于 2020-1-7 17:15:43 | 只看该作者
解决办法

       一般情况下,客户在设备树配置文件中对GPIO进行配置,是需要在linux 系统起来后,GPIO 驱动加载时才生效,加载时间随机;
      如果想要的上电过程就对配置好GPIO,比如从 uboot阶段 就开始就稳定输出状态,可以参考如下方法进行配置:
1.  根据底板原理图确定需要用的GPIO引脚



2.  查询《AM572x Sitara Processor Technical Reference Manual (Rev. J)》手册,确定对应引脚的默认模式,并将其配置为GPIO模式:




3.  配置对应IO的GPIO_OE和GPIO_SETDATAOUT寄存器输出对应电平






在 board/ti/am57xx/board.c 中 的 spl_start_uboot 函数中添加对相应 GPIO 寄存器的配置

+#define AM572X_GPIO7_BASE 0x48051000
+#define AM572X_GPIO_OE_OFF 0x134
+#define AM572X_GPIO_SETDATA_OUT_OFF 0x194

int spl_start_uboot(void)
{
+        u32 reg_val;
+
+        /* SOM-TL5728 led1: gpio7_7 */
+        reg_val = __raw_readl(AM572X_GPIO7_BASE + AM572X_GPIO_OE_OFF);
+        reg_val &= ~(BIT(7));
+        __raw_writel(reg_val, AM572X_GPIO7_BASE + AM572X_GPIO_OE_OFF);
+
+        reg_val = __raw_readl(AM572X_GPIO7_BASE + AM572X_GPIO_SETDATA_OUT_OFF);
+        reg_val|= BIT(7);
+        __raw_writel(reg_val, AM572X_GPIO7_BASE + AM572X_GPIO_SETDATA_OUT_OFF);


小工具:U-Boot下可以用md指令读取寄存器的电平状态




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

44

主题

368

帖子

2894

积分

创龙

Rank: 8Rank: 8

积分
2894
板凳
 楼主| 发表于 2020-2-20 17:54:20 | 只看该作者
基于创龙TL5728F-EVM-A3开发板,在MLO、u-boot、内核全程点亮LED1

《一》    查看底板原理图,LED1 对应 GPIO 管脚是 GPIO3_19,与 VIN1A_D15 复用



查看 TRM数据手册









《二》  MLO (u-boot 第一阶段)
要完成:
1、配置 GPIO3_19 的 pinmux
2、设置 GPIO3_19 输出高电平

在U-Boot源码 arch/arm/mach-omap2/hwinit-common.c文件中添加如下代码

204 #defineAM572X_CTRL_MODULE_CORE_BASE          0x4A002000
205 #defineAM572X_VIN1A_D15_MUXMODE_OFFSET       0x1530
206 #defineAM572X_VIN1A_D15_MUXMODE_GPIO3_19     0xE
207
208 #defineAM572X_GPIO3_BASE                     0x48057000
209 #defineAM572X_GPIO_OE_OFFSET                 0x134
210 #define AM572X_GPIO_SETDATA_OUT_OFFSET        0x194
211
212 void Test_tl5728f_evm_a3_led1_on(void) {
213     u32 reg_val;
214
215     /* TL5728F-EVM-A3LED1: set VIN1A_D15 to GPIO3_19 Mode */
216     reg_val =__raw_readl(AM572X_CTRL_MODULE_CORE_BASE + AM572X_VIN1A_D15_MUXMODE_OFFSET);
217     reg_val &=((2^32) - 1) << 4;
218     reg_val |=AM572X_VIN1A_D15_MUXMODE_GPIO3_19;
219     __raw_writel(reg_val,AM572X_CTRL_MODULE_CORE_BASE + AM572X_VIN1A_D15_MUXMODE_OFFSET);
220
221     /* TL5728F-EVM-A3LED1: set gpio3_19 to output enable */
222     reg_val =__raw_readl(AM572X_GPIO3_BASE + AM572X_GPIO_OE_OFFSET);
223     reg_val &=~(BIT(19));
224     __raw_writel(reg_val,AM572X_GPIO3_BASE + AM572X_GPIO_OE_OFFSET);
225
226     /* TL5728F-EVM-A3LED1: set gpio3_19 to high level */
227     reg_val =__raw_readl(AM572X_GPIO3_BASE + AM572X_GPIO_SETDATA_OUT_OFFSET);
228     reg_val|= BIT(19);
229     __raw_writel(reg_val,AM572X_GPIO3_BASE + AM572X_GPIO_SETDATA_OUT_OFFSET);
230 }
232
233 #ifdef CONFIG_SPL_BUILD
234 void board_init_f(ulong dummy)
235 {
236     early_system_init();
237
238     Test_tl5728f_evm_a3_led1_on();
239
240 #ifdef CONFIG_BOARD_EARLY_INIT_F
241     board_early_init_f();
242 #endif
243     /* For regular u-bootsdram_init() is called from dram_init() */
244     sdram_init();
245     gd->ram_size =omap_sdram_size();
246 }
247 #endif



《三》   u-boot(第二阶段)
运行过程中未对 GPIO3_19 做任何操作,固不需改动

《四》  kernel 阶段
在 kernel 启动过程中会对 GPIO 等硬件做 reset 操作,并且在加载 LED 驱动时会对 GPIO 操作。固在设备设备树中做相应配置
修改文件:arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi
LED 驱动加载的时候GPIO3_19 保持高电平
125         led2{
126             label= "user-led0";
127             gpios= <&gpio3 19 GPIO_ACTIVE_HIGH>;
128             default-state= "on";
129         };

内核初始化对硬件 RESET 时,不要对 GPIO3 进行操作
805 &gpio3 {
806     ti,no-reset-on-init;
807     ti,no-idle-on-init;
808 };


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-19 14:08 , Processed in 0.036694 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表