LS1028 GPIO相關應用筆記
硬件平臺: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=1IIC6_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) 等應用領域。 了解詳情 -
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)等應用領域。 了解詳情