i.MX9352的GPIO怎么用?進(jìn)來(lái)聊聊

原創(chuàng) 2023-05-20 15:44:00 iMX9352 i.MX9352 iMX9352配置 iMX9352配置GPIO

之前小編為大家介紹過(guò)在飛凌嵌入式i.MX6ULL開(kāi)發(fā)板上操作GPIO的方法,>>戳這里閱讀前文。本期,讓我們一起走近i.MX9352處理器,深入了解這位i.MX系列新成員的GPIO該如何操作,以及它與前輩i.MX6ULL處理器又有哪些異同。

一、硬件原理分析

以點(diǎn)燈和按鍵為例,打開(kāi)飛凌嵌入式OK-MX9352-C開(kāi)發(fā)板的原理圖,可以看到一顆LED燈,它由MX93_PAD_CCM_CLKO4控制。由于這一個(gè)GPIO屬于1.8V電平域,所以在OK-MX9352-C開(kāi)發(fā)板的底板上并沒(méi)有直接將GPIO接到LED上,而是用GPIO控制了一個(gè)MOS管,再由MOS管去控制LED的亮滅——當(dāng)GPIO電平為高時(shí),MOS導(dǎo)通,LED點(diǎn)亮;當(dāng)GPIO電平為低時(shí),MOS關(guān)斷,LED熄滅。

二、設(shè)備樹(shù)引腳復(fù)用

打開(kāi)飛凌嵌入式OK-MX9352-C開(kāi)發(fā)板的設(shè)備樹(shù):

OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/OK-MX93-C.dts

在iomuxc節(jié)點(diǎn)下新建一組引腳復(fù)用,復(fù)用的兩個(gè)GPIO分別是底板上的LED燈D6和按鍵K1。

接下來(lái)新建一個(gè)GPIO節(jié)點(diǎn),內(nèi)容如下:

注釋掉LED和KEY部分,防止復(fù)用沖突:

保存退出后重新編譯設(shè)備樹(shù)。

執(zhí)行環(huán)境變量:

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk$ . environment-setup-aarch64-toolchain

單獨(dú)編譯設(shè)備樹(shù):

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk/OKMX93-linux-kernel$ make ARCH=arm64 CROSS_COMPILE=aarch64-poky-linux- dtbs

編譯完成后,單獨(dú)更新設(shè)備樹(shù)。首先將U盤(pán)插到虛擬機(jī)上,將生成的設(shè)備樹(shù)文件拷貝到U盤(pán):

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk/OKMX93-linux-kernel$ cp arch/arm64/boot/dts/freescale/OK-MX93-C.dtb /media/forlinx/2075-A0A7/

將生成的dtb文件使用U盤(pán)拷貝到OK-MX9352-C開(kāi)發(fā)板上,替換掉:/run/media/Boot-mmcblk0p1/OK-MX93-C.dtb

root@ok-mx93:/run/media/Boot-mmcblk0p1# cp /run/media/sda/OK-MX93-C.dtb ./

重啟OK-MX9352-C開(kāi)發(fā)板。

三、通過(guò)命令測(cè)試

OKMX6ULL-S開(kāi)發(fā)板中,操作GPIO的方式是通過(guò)操作/sys/class/gpio下的文件來(lái)實(shí)現(xiàn)的。而在OK-MX9352-C上,引入了新的Lingpiod的方式,而原有的基于sysfs的操作方式已經(jīng)不再被支持。

Libgpiod是一種字符設(shè)備接口,GPIO訪(fǎng)問(wèn)控制是通過(guò)操作字符設(shè)備文件(比如/dev/gpiodchip0)實(shí)現(xiàn)的。OK-MX9352-C共有4組GPIO,可以在/dev下查看GPIO設(shè)備文件。

Libgpiod可以通過(guò)shell終端和C庫(kù)兩種方式使用,本節(jié)介紹在shell終端控制GPIO的方法,下一節(jié)我們將會(huì)介紹使用C庫(kù)的方式控制GPIO。

1、gpiodetect

查看所有GPIO設(shè)備

這里的gpiochip0- gpiochip4分別對(duì)應(yīng)的是設(shè)備樹(shù)當(dāng)中的GPIO1-GPIO4這四組GPIO,但是順序并不是一一對(duì)應(yīng)的,這是由于對(duì)應(yīng)的寄存器地址順序問(wèn)題導(dǎo)致的。那么goiochip0如何跟設(shè)備樹(shù)對(duì)應(yīng)起來(lái)呢?我們可以打開(kāi)設(shè)備樹(shù)當(dāng)中的dtsi文件,文件路徑為:

OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/imx93.dtsi

forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk$ vi OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/imx93.dtsi

查看GPIO3的寄存器基地址為:gpio3: gpio@43820080,對(duì)應(yīng)的是gpiochip1,而GPIO4對(duì)應(yīng)的是gpiochip2。

其余GPIO的對(duì)應(yīng)關(guān)系如下,可供大家參考:

2、gpioinfo

由1可知,LED燈對(duì)應(yīng)的是GPIO4,即gpiochip2;按鍵對(duì)應(yīng)的是GPIO3,即gpiochip1。列出gpiochip2控制器的引腳情況:

3、gpioset

該命令用于設(shè)置GPIO電平,2代表gpiochip2,即GPIO4,28是GPIO pin,當(dāng)設(shè)置該GPIO為1時(shí),底板上的D6點(diǎn)亮。

4、gpioget

該命令用于獲取GPIO引腳狀態(tài),以按鍵為例,按鍵對(duì)應(yīng)的是GPIO3-27,即gpiochip1 27。按鍵沒(méi)有按下時(shí),讀取到按鍵狀態(tài)為1,當(dāng)按鍵按下時(shí),讀到按鍵狀態(tài)為0。

5、gpiomon

監(jiān)控GPIO的狀態(tài)是否發(fā)生變化,同樣以按鍵為例,當(dāng)按鍵按下時(shí):

四、使用Libgpiod庫(kù)編程

Libgpiod是用于與Linux GPIO交互的C庫(kù)和工具,Linux官方于Linux 4.8 版本引入了Libgpiod的功能。而在OK-MX9352-C開(kāi)發(fā)板搭載的Linux5.15內(nèi)核版本中,已經(jīng)不再支持sysfs的方式操作GPIO。與sysfs相比,Libgpiod更加可靠,具備更多功能,例如,可一次讀寫(xiě)多個(gè)GPIO值。

1、源碼獲取

如果想要在PC上交叉編譯出能夠在開(kāi)發(fā)板上運(yùn)行的應(yīng)用,則交叉編譯時(shí)鏈接的庫(kù)文件應(yīng)該與開(kāi)發(fā)板上的保持一致,可以直接把開(kāi)發(fā)板上的庫(kù)拷貝到開(kāi)發(fā)環(huán)境進(jìn)行使用。該庫(kù)文件在開(kāi)發(fā)板上的路徑為:

從上圖可以看出,Libgpiod庫(kù)的版本為libgpiod.so.2.2.2,軟鏈接到libgpiod.so.2。

在飛凌嵌入式提供的OK-MX9352-C開(kāi)發(fā)板資料中,已經(jīng)將所需的庫(kù)文件、頭文件以及相關(guān)例程進(jìn)行了打包,用戶(hù)可以直接使用。資料路徑為:用戶(hù)資料/應(yīng)用筆記/ OK-MX9352-C-GPIO接口_Linux應(yīng)用筆記/Libgpiod測(cè)試源碼。咨詢(xún)?cè)诰€(xiàn)客服即可獲取資料。

2、編譯測(cè)試?yán)?/span>

將Libgpiod測(cè)試源碼目錄下的gpiotest.c、gpio-toggle.c、lib.tar.bz2拷貝到開(kāi)發(fā)環(huán)境中:

將lib.tar.bz2解壓到本目錄下,編譯時(shí)會(huì)使用到里邊的gpiod.h文件和Libgpiod庫(kù)文件:

示例1:循環(huán)控制LED亮和滅,時(shí)間間隔為1s

交叉編譯gpio-toggle.c

設(shè)置環(huán)境變量(注意 . 后邊有空格)

交叉編譯

將可執(zhí)行文件gpio-toggle拷貝到開(kāi)發(fā)板中并執(zhí)行可看到LED(D6)燈1s亮,1s滅。其中輸入?yún)?shù)2、28為:gpiochip2 line28。

示例2:按鍵控制LED亮滅,每按一次狀態(tài)翻轉(zhuǎn)

交叉編譯gpio-test.c

設(shè)置環(huán)境變量(注意點(diǎn)后邊有空格)

交叉編譯

將可執(zhí)行文件gpio-test拷貝到OK-MX9352-C開(kāi)發(fā)板中并執(zhí)行,可看到每按一次按鍵,LED燈的狀態(tài)就翻轉(zhuǎn)一次,其中輸入?yún)?shù)1、27為:gpiochip1 line27 ;2、28為:gpiochip2 line28。

以上就是為OK-MX9352-C開(kāi)發(fā)板配置GPIO的過(guò)程,希望能夠?qū)ζ聊磺暗母魑还こ處熜』锇橛兴鶐椭|c(diǎn)擊下圖進(jìn)入飛凌嵌入式官網(wǎng),即可了解更多有關(guān)飛凌嵌入式OK-MX9352-C開(kāi)發(fā)板詳情和資料。



相關(guān)產(chǎn)品 >

  • FET-MX9352-C核心板

    FET-MX9352-C核心板基于NXP i.MX9352處理器開(kāi)發(fā)設(shè)計(jì), i.MX9352集成2個(gè)Cortex-A55核和1個(gè)Cortex-M33實(shí)時(shí)核,主頻達(dá)1.5GHz, 原生支持8路UART、2路Ethernet(含1路TSN)、2路USB 2.0、2路CAN-FD總線(xiàn)等常用接口。飛凌iMX93x系列在經(jīng)市場(chǎng)驗(yàn)證的 i.MX 6和i.MX 8基礎(chǔ)上進(jìn)行了升級(jí),集成NPU 可加速邊緣機(jī)器學(xué)習(xí)應(yīng)用,i.MX9352核心板體積小巧,便于嵌入到您的產(chǎn)品中。

    了解詳情
    FET-MX9352-C核心板
  • OK-MX9352-C開(kāi)發(fā)板

    iMX9352是一款低功耗、低成本、高性能、通用性強(qiáng)的嵌入式開(kāi)發(fā)板產(chǎn)品,iMX9352采用A核+M核多核異構(gòu)架構(gòu),兼具多任務(wù)處理與實(shí)時(shí)控制,0.5 TOPS Ethos U-65 microNPU,滿(mǎn)足邊緣AI需求,2路千兆網(wǎng)口,其中1路支持TSN,2通道MIPI-CSI攝像頭接口,引出處理器所有可引出功能,并確保信號(hào)和電源完整性,iMX9352高性能,低成本的解決方案

    了解詳情
    OK-MX9352-C開(kāi)發(fā)板

推薦閱讀 換一批 換一批