LS1028 GPIO相關應用筆記

原創(chuàng) 2022-11-18 10:21:00 ls1028GPIO

硬件平臺:OK1028A-C開發(fā)板  操作系統(tǒng):ubuntu18.04

本文主要適用于飛凌OK1028A-C ubuntu18.04操作系統(tǒng),本文主要講解LS1028A GPIO相關知識點,通過對GPIO復用、GPIO按鍵操作、GPIO初始化講解,希望對用戶的使用有所幫助,其他平臺也可以參考,但是不同平臺之間會存在差異,需客戶自行修改以適應自己的使用。


一、GPIO復用

LS1028GPIO的復用是通過RCW(復位控制字)實現(xiàn)的。下面以SPI復用為GPIO為例,實現(xiàn)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文件中需要將字段對應的數(shù)字換算為十進制即: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,修改如下所示:

開發(fā)板驗證階段:

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

輸入上述命令出現(xiàn)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按鍵的相關參考示例,本文的實現(xiàn)目的是在1028上添加GPIO按鍵,整體思路是先要用作GPIO按鍵的引腳復用為GPIO ,然后在設備樹里面進行設備節(jié)點的注冊。
這里以GPIO3_13、GPIO3_16為例,開發(fā)板默認是將其用作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設備節(jié)點參考文件: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()初始化函數(shù)中給其賦值,含義:將GPIO3_DAT14設置為輸出,值設置為1(高電平)。

驗證:
單獨編譯firmware固件燒寫,一上電用萬用表進行測量,可以看到該引腳為高電平(1.8V)。


相關產品 >

  • OK1028A-C開發(fā)板

    LS028A 系列-LS1028開發(fā)板 雙核Cortex-A72 設計 TSN網(wǎng)絡支持 ,工業(yè)級 LS1028A開發(fā)板 提供了一個用于設計和評估LS1028A處理器設計核心板的平臺。支持TSN的以太網(wǎng)交換機和以太網(wǎng)控制器,可支持融合的IT和OT網(wǎng)絡;支持CANFD、UART 、USB3.0、PCIe3.0、SATA3.0、IIS、IIC、SPI 等常用總線接口,并支持一個最大分辨率4K的DP接口。ls1028a 適用于工業(yè)路由器、TSN、SD-WAN、 5G CPE 、邊緣計算網(wǎng)關 、IP-PBX等產品,以及工業(yè)互聯(lián)、智慧工廠、工業(yè)安全、信息安全、智慧交通、能源物聯(lián)網(wǎng) 等應用領域。 了解詳情
    OK1028A-C開發(fā)板
  • FET1028A-C核心板

    LS1028A-C核心板基于NXP LS1028A處理器設計,雙核ARM Cortex - A72,主頻最高1.6GHz,板載2GB DDR4 RAM,8GB ROM;原生支持6個Gbit Ethernet,支持TSN的以太網(wǎng)交換機和以太網(wǎng)控制器,可支持融合的IT和OT網(wǎng)絡;支持CAN FD、UART、USB3.0、PCIe3.0、SATA3.0、IIS、IIC、SPI等常用總線接口,并支持一個最大分辨率4K的DP接口。適用于工業(yè)路由器、TSN、SD-WAN、5G CPE、邊緣計算網(wǎng)關、IP-PBX等產品,以及工業(yè)互聯(lián)網(wǎng)、智慧工廠、工業(yè)安全、信息安全、智慧交通、能源物聯(lián)網(wǎng)等應用領域。 了解詳情
    FET1028A-C核心板

推薦閱讀 換一批 換一批