LS1028 GPIO相关应用笔记

原创 2022-11-18 10:21:00 ls1028GPIO

硬件平台:OK1028A-C开发板  操作系统:ubuntu18.04

本文主要适用于飞凌OK1028A-C ubuntu18.04操作系统,本文主要讲解LS1028A GPIO相关知识点,通过对GPIO复用、GPIO按键操作、GPIO初始化讲解,希望对用户的使用有所帮助,其他平台也可以参考,但是不同平台之间会存在差异,需客户自行修改以适应自己的使用。


一、GPIO复用

LS1028GPIO的复用是通过RCW(复位控制字)实现的。下面以SPI复用为GPIO为例,实现LS1028GPIO的复用。

在LS1028A.pdf中查找可以看到,ls1028底板上SPI_SIN可以复用为GPIO_DAT13,SPI3_SCK可复用为GPIO3_DAT14,SPI3_SOUT可复用为GPIO3_DAT16,

在《LS1028ARM.pdf》中可以看到对应的RCW字段为SPI3_PMUX,,且此字段为01(0b01二进制)时,此引脚功能为GPIO功能,RCW文件中需要将字段对应的数字换算为十进制即:SPI3_PMUX=1

通过此图可知,当SPI3_PMUX=1时,引脚被配置为GPIO3_DAT[16:13],在RCW中修改后,重新编译替换烧写即可。

RCW路径:OK1028-linux-fs/packages/firmware/rcw/ls1028ardb/R_SQPP_0x85bb/rcw_1500_gpu600.rcw,修改如下所示:

开发板验证阶段:

root@forlinx:~# ls /sys/class/gpio
export gpiochip416 gpiochip448 gpiochip480 unexport

输入上述命令出现3组gpiochip,一般对应关系为:

Gpiochip480 对应gpio1[];
Gpiochip448 对应gpio2[];
Gpiochip416 对应gpio3[];

若要验证单个引脚则在此基础上做加法即可,GPIO3_DATx=gpiochip416+x,
以GPIO3_DAT14为例:

root@forlinx:~# echo 430 > /sys/class/gpio/export                                  //导出gpio
root@forlinx:~# echo out > /sys/class/gpio/gpio430/direction                 //给GPIO输出的方向
root@forlinx:~# echo 1 > /sys/class/gpio/gpio430/value                        //给gpio高电平
root@forlinx:~# cat /sys/class/gpio/gpio430/value                                 //查看gpio此时电平
1
root@forlinx:~# echo 0 > /sys/class/gpio/gpio430/value                       //给gpio低电平
root@forlinx:~# cat /sys/class/gpio/gpio430/value                               //查看gpio此时电平
0

二、GPIO按键

LS1028没有GPIO按键的相关参考示例,本文的实现目的是在1028上添加GPIO按键,整体思路是先要用作GPIO按键的引脚复用为GPIO ,然后在设备树里面进行设备节点的注册。
这里以GPIO3_13、GPIO3_16为例,开发板默认是将其用作SPI_SIN、SPI_SOUT。SPI原理图如下所示:

查看CPU手册可以看到SPI_SIN、SPI_SOUT引脚的复用是通过SPI3_PMUX字段来控制的,当SPI3_PMUX字段为1时被用作GPIO。

2.1修改RCW

RCW路径:firmware/rcw/ls1028ardb/R_SQPP_0x85bb/rcw_1500_gpu600.rcw

--- a/packages/firmware/rcw/ls1028ardb/R_SQPP_0x85bb/rcw_1500_gpu600.rcw
+++ b/packages/firmware/rcw/ls1028ardb/R_SQPP_0x85bb/rcw_1500_gpu600.rcw
@@ -28,7 +28,7 @@ IIC3_PMUX=2
IIC4_PMUX=2
IIC5_PMUX=1

IIC6_PMUX=0
-SPI3_PMUX=0
+SPI3_PMUX=1
CLK_OUT_PMUX=2
EC1_SAI4_5_PMUX=2
EC1_SAI3_6_PMUX=1

2.2修改设备树

设备树路径:OK1028-linux-fs/packages/linux/linux/arch/arm64/boot/dts/freescale/OK1028A-C.dts

--- a/packages/linux/OK1028-linux-kernel/arch/arm64/boot/dts/freescale/OK1028A-C.dts
+++ b/packages/linux/OK1028-linux-kernel/arch/arm64/boot/dts/freescale/OK1028A-C.dts
@@ -131,7 +131,23 @@
                            default-brightness-level = <200>;
                            status = "okay";
};
-
+
+                gpio-keys {
+                          compatible = "gpio-keys";
+                          autorepeat;
+
+                                           down {
+                                                      label = "GPIO Key DOWN";
+                                                      linux,code = <108>;
+                                                      gpios = <&gpio3 13 0>;
+                                                      };
+                                                     up{
+                                                           label = "GPIO Key UP";
+                                                           linux,code = <103>;
+                                                           gpios = <&gpio3 16 1>;
+                                                          };
+
+                 };
};

配置文件:

按键驱动路径:OK1028-linux-kernel/drivers/input/keyboard/gpio_keys.c
按键键值定义文件:OK1028-linux-kernel/include/uapi/linux/input-event-codes.h
gpio-keys设备节点参考文件:OK1028-linux-fs/packages/linux/linux/Documentation/devicetree/bindings/input/gpio-keys.txt

三、GPIO初始化为高电平

该示例以将GPIO3_DAT14初始化为高电平为例,默认是将用作SPI3_SCK,需要将其先复用为GPIO。
修改RCW,将其复用为GPIO。
RCW路径:firmware/rcw/ls1028ardb/R_SQPP_0x85bb/rcw_1500_gpu600.rcw

SPI3_PMUX=1

uboot源码中进行初始化,文件路径:packages/firmware/OK1028-linux-uboot/board/freescale/ls1028a/ls1028a.c。
定义一个常量

在board_gpio_init()初始化函数中给其赋值,含义:将GPIO3_DAT14设置为输出,值设置为1(高电平)。

验证:
单独编译firmware固件烧写,一上电用万用表进行测量,可以看到该引脚为高电平(1.8V)。


相关产品 >

  • OK1028A-C开发板

    LS028A 系列-LS1028开发板 双核Cortex-A72 设计 TSN网络支持 ,工业级 LS1028A开发板 提供了一个用于设计和评估LS1028A处理器设计核心板的平台。支持TSN的以太网交换机和以太网控制器,可支持融合的IT和OT网络;支持CANFD、UART 、USB3.0、PCIe3.0、SATA3.0、IIS、IIC、SPI 等常用总线接口,并支持一个最大分辨率4K的DP接口。ls1028a 适用于工业路由器、TSN、SD-WAN、 5G CPE 、边缘计算网关 、IP-PBX等产品,以及工业互联、智慧工厂、工业安全、信息安全、智慧交通、能源物联网 等应用领域。 了解详情
    OK1028A-C开发板
  • FET1028A-C核心板

    LS1028A-C核心板基于NXP LS1028A处理器设计,双核ARM Cortex - A72,主频最高1.6GHz,板载2GB DDR4 RAM,8GB ROM;原生支持6个Gbit Ethernet,支持TSN的以太网交换机和以太网控制器,可支持融合的IT和OT网络;支持CAN FD、UART、USB3.0、PCIe3.0、SATA3.0、IIS、IIC、SPI等常用总线接口,并支持一个最大分辨率4K的DP接口。适用于工业路由器、TSN、SD-WAN、5G CPE、边缘计算网关、IP-PBX等产品,以及工业互联网、智慧工厂、工业安全、信息安全、智慧交通、能源物联网等应用领域。 了解详情
    FET1028A-C核心板

推荐阅读 换一批 换一批