之前小編為大家介紹過在飛凌嵌入式i.MX6ULL開發(fā)板上操作GPIO的方法。本期,讓我們一起走近i.MX9352處理器,深入了解這位i.MX系列新成員的GPIO該如何操作,以及它與前輩i.MX6ULL處理器又有哪些異同。
01 硬件原理分析
以點燈和按鍵為例,打開飛凌嵌入式OK-MX9352-C開發(fā)板的原理圖,可以看到一顆LED燈,它由MX93_PAD_CCM_CLKO4控制。由于這一個GPIO屬于1.8V電平域,所以在OK-MX9352-C開發(fā)板的底板上并沒有直接將GPIO接到LED上,而是用GPIO控制了一個MOS管,再由MOS管去控制LED的亮滅——當(dāng)GPIO電平為高時,MOS導(dǎo)通,LED點亮;當(dāng)GPIO電平為低時,MOS關(guān)斷,LED熄滅。
![wKgaomRjF1-AWSTsAABGtg1BjBM254.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF1-AWSTsAABGtg1BjBM254.png)
![wKgaomRjF1-AVW1EAAAerCuNmac840.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF1-AVW1EAAAerCuNmac840.png)
02 設(shè)備樹引腳復(fù)用
打開飛凌嵌入式OK-MX9352-C開發(fā)板的設(shè)備樹:
OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/OK-MX93-C.dts
在iomuxc節(jié)點下新建一組引腳復(fù)用,復(fù)用的兩個GPIO分別是底板上的LED燈D6和按鍵K1。
![wKgZomRjF16ACL_MAAATfyF_Olg250.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF16ACL_MAAATfyF_Olg250.png)
接下來新建一個GPIO節(jié)點,內(nèi)容如下:
![wKgaomRjF16AKpUNAAAmjqr9Eow472.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF16AKpUNAAAmjqr9Eow472.png)
注釋掉LED和KEY部分,防止復(fù)用沖突:
![wKgZomRjF16AbyaBAABZpM4COkY809.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF16AbyaBAABZpM4COkY809.png)
保存退出后重新編譯設(shè)備樹。
執(zhí)行環(huán)境變量:
forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk$ . environment-setup-aarch64-toolchain
單獨編譯設(shè)備樹:
forlinx@ubuntu:~/ok-mx93/OKMX93-linux-sdk/OKMX93-linux-kernel$ make ARCH=arm64 CROSS_COMPILE=aarch64-poky-linux- dtbs
編譯完成后,單獨更新設(shè)備樹。首先將U盤插到虛擬機上,將生成的設(shè)備樹文件拷貝到U盤:
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盤拷貝到OK-MX9352-C開發(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開發(fā)板。
03 通過命令測試
在OKMX6ULL-S開發(fā)板中,操作GPIO的方式是通過操作/sys/class/gpio下的文件來實現(xiàn)的。而在OK-MX9352-C上,引入了新的Lingpiod的方式,而原有的基于sysfs的操作方式已經(jīng)不再被支持。
Libgpiod是一種字符設(shè)備接口,GPIO訪問控制是通過操作字符設(shè)備文件(比如/dev/gpiodchip0)實現(xiàn)的。OK-MX9352-C共有4組GPIO,可以在/dev下查看GPIO設(shè)備文件。
Libgpiod可以通過shell終端和C庫兩種方式使用,本節(jié)介紹在shell終端控制GPIO的方法,下一節(jié)我們將會介紹使用C庫的方式控制GPIO。
![wKgZomRjF1-AQoHrAAAHLminmek601.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF1-AQoHrAAAHLminmek601.png)
3.1 gpiodetect
查看所有GPIO設(shè)備
![wKgZomRjF1-AbcnMAAAMpimzTtA883.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF1-AbcnMAAAMpimzTtA883.png)
這里的gpiochip0- gpiochip4分別對應(yīng)的是設(shè)備樹當(dāng)中的GPIO1-GPIO4這四組GPIO,但是順序并不是一一對應(yīng)的,這是由于對應(yīng)的寄存器地址順序問題導(dǎo)致的。那么goiochip0如何跟設(shè)備樹對應(yīng)起來呢?我們可以打開設(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,對應(yīng)的是gpiochip1,而GPIO4對應(yīng)的是gpiochip2。
![wKgZomRjF2CAHik-AAB1NzeewXk669.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2CAHik-AAB1NzeewXk669.png)
其余GPIO的對應(yīng)關(guān)系如下,可供大家參考:
![wKgaomRjF1-AWclaAAAV7bS4So8225.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF1-AWclaAAAV7bS4So8225.png)
3.2 gpioinfo
由3.1可知,LED燈對應(yīng)的是GPIO4,即gpiochip2;按鍵對應(yīng)的是GPIO3,即gpiochip1。列出gpiochip2控制器的引腳情況:
![wKgaomRjF2CAHSkaAAAhG0pXgmU001.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF2CAHSkaAAAhG0pXgmU001.png)
3.3 gpioset
該命令用于設(shè)置GPIO電平,2代表gpiochip2,即GPIO4,28是GPIO pin,當(dāng)設(shè)置該GPIO為1時,底板上的D6點亮。
![wKgaomRjF2CAF1sVAAAGNfjER6Q831.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF2CAF1sVAAAGNfjER6Q831.png)
3.4 gpioget
該命令用于獲取GPIO引腳狀態(tài),以按鍵為例,按鍵對應(yīng)的是GPIO3-27,即gpiochip1 27。按鍵沒有按下時,讀取到按鍵狀態(tài)為1,當(dāng)按鍵按下時,讀到按鍵狀態(tài)為0。
![wKgZomRjF2CANHvRAAAL40vcZt8746.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2CANHvRAAAL40vcZt8746.png)
3.5 gpiomon
監(jiān)控GPIO的狀態(tài)是否發(fā)生變化,同樣以按鍵為例,當(dāng)按鍵按下時:
![wKgZomRjF2CANHvRAAAL40vcZt8746.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2CANHvRAAAL40vcZt8746.png)
04 使用Libgpiod庫編程
Libgpiod是用于與Linux GPIO交互的C庫和工具,Linux官方于Linux 4.8 版本引入了Libgpiod的功能。而在OK-MX9352-C開發(fā)板搭載的Linux5.15內(nèi)核版本中,已經(jīng)不再支持sysfs的方式操作GPIO。與sysfs相比,Libgpiod更加可靠,具備更多功能,例如,可一次讀寫多個GPIO值。
4.1 源碼獲取
如果想要在PC上交叉編譯出能夠在開發(fā)板上運行的應(yīng)用,則交叉編譯時鏈接的庫文件應(yīng)該與開發(fā)板上的保持一致,可以直接把開發(fā)板上的庫拷貝到開發(fā)環(huán)境進行使用。該庫文件在開發(fā)板上的路徑為:
![wKgZomRjF2GARzmWAAAM_nXlj88959.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2GARzmWAAAM_nXlj88959.png)
從上圖可以看出,Libgpiod庫的版本為libgpiod.so.2.2.2,軟鏈接到libgpiod.so.2。
在飛凌嵌入式提供的OK-MX9352-C開發(fā)板資料中,已經(jīng)將所需的庫文件、頭文件以及相關(guān)例程進行了打包,用戶可以直接使用。資料路徑為:用戶資料/應(yīng)用筆記/ OK-MX9352-C-GPIO接口_Linux應(yīng)用筆記/Libgpiod測試源碼。
4.2 編譯測試例程
將Libgpiod測試源碼目錄下的gpiotest.c、gpio-toggle.c、lib.tar.bz2拷貝到開發(fā)環(huán)境中:
![wKgaomRjF2GAY8-jAAAQ5gIV5o4612.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF2GAY8-jAAAQ5gIV5o4612.png)
將lib.tar.bz2解壓到本目錄下,編譯時會使用到里邊的gpiod.h文件和Libgpiod庫文件:
![wKgZomRjF2GALoDlAAATjAvwfrw081.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2GALoDlAAATjAvwfrw081.png)
示例1
循環(huán)控制LED亮和滅,時間間隔為1s
交叉編譯gpio-toggle.c
設(shè)置環(huán)境變量(注意 . 后邊有空格)
![wKgaomRjF2GABx-iAAAVJNGqGrE241.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF2GABx-iAAAVJNGqGrE241.png)
交叉編譯
![wKgaomRjF2KAZjX0AAARcZZaIII411.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF2KAZjX0AAARcZZaIII411.png)
將可執(zhí)行文件gpio-toggle拷貝到開發(fā)板中并執(zhí)行可看到LED(D6)燈1s亮,1s滅。其中輸入參數(shù)2、28為:gpiochip2 line28。
![wKgZomRjF2GAMFPqAAAIC66XYOg923.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2GAMFPqAAAIC66XYOg923.png)
示例2
按鍵控制LED亮滅,每按一次狀態(tài)翻轉(zhuǎn)
交叉編譯gpio-test.c
設(shè)置環(huán)境變量(注意點后邊有空格)
交叉編譯
![wKgZomRjF2KAcLYtAAAc_uLCE9c706.png](https://file1.elecfans.com/web2/M00/82/D0/wKgZomRjF2KAcLYtAAAc_uLCE9c706.png)
將可執(zhí)行文件gpio-test拷貝到OK-MX9352-C開發(fā)板中并執(zhí)行,可看到每按一次按鍵,LED燈的狀態(tài)就翻轉(zhuǎn)一次,其中輸入?yún)?shù)1、27為:gpiochip1 line27 ;2、28為:gpiochip2 line28。
![wKgaomRjF2KAFWIBAAANjFPs8Uo836.png](https://file1.elecfans.com/web2/M00/82/CF/wKgaomRjF2KAFWIBAAANjFPs8Uo836.png)
以上就是為OK-MX9352-C開發(fā)板配置GPIO的過程,希望能夠?qū)ζ聊磺暗母魑?a target="_blank">工程師小伙伴有所幫助。
-
嵌入式
+關(guān)注
關(guān)注
5092文章
19177瀏覽量
307637 -
NXP
+關(guān)注
關(guān)注
60文章
1289瀏覽量
185487 -
GPIO
+關(guān)注
關(guān)注
16文章
1216瀏覽量
52377
發(fā)布評論請先 登錄
相關(guān)推薦
3.1s啟動!飛凌嵌入式i.MX93開發(fā)板部署LVGL,打造更高效的GUI
![3.1s啟動!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX</b>93開發(fā)板部署LVGL,打造更高效的GUI](https://file1.elecfans.com/web3/M00/06/39/wKgZO2eIgguAfA2aAABGjTAqQWw318.png)
飛凌嵌入式獲批建設(shè)「河北省嵌入式計算機控制系統(tǒng)技術(shù)創(chuàng)新中心」
![<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>獲批建設(shè)「河北省<b class='flag-5'>嵌入式</b>計算機控制系統(tǒng)<b class='flag-5'>技術(shù)</b>創(chuàng)新中心」](https://file1.elecfans.com/web3/M00/03/F9/wKgZPGduFOGAT8hUAAEH6hxJc1o640.png)
飛凌嵌入式受邀亮相TI嵌入式技術(shù)創(chuàng)新發(fā)展研討會
![<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>受邀亮相TI<b class='flag-5'>嵌入式</b><b class='flag-5'>技術(shù)</b>創(chuàng)新發(fā)展研討會](https://file1.elecfans.com/web2/M00/0A/F2/wKgaomcYl0mAFZnuAADr5XBUvR8941.png)
飛凌嵌入式技術(shù)創(chuàng)新日(深圳站)圓滿落幕
![<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>技術(shù)</b>創(chuàng)新日(深圳站)圓滿落幕](https://file1.elecfans.com/web2/M00/05/A0/wKgaombRd-WAYtm2AADTXgMO6Ng318.png)
再見深圳!飛凌嵌入式技術(shù)創(chuàng)新日圓滿落幕
![再見深圳!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>技術(shù)</b>創(chuàng)新日圓滿落幕](https://file1.elecfans.com/web2/M00/04/98/wKgZombQMP2AEpQIAAEPPa5YhtA557.png)
飛凌嵌入式技術(shù)創(chuàng)新日(深圳站)精彩回顧
飛凌嵌入式技術(shù)創(chuàng)新日(北京站)圓滿落幕,共創(chuàng)嵌入式技術(shù)的美好未來
![<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>技術(shù)</b>創(chuàng)新日(北京站)圓滿落幕,共創(chuàng)<b class='flag-5'>嵌入式</b><b class='flag-5'>技術(shù)</b>的美好未來](https://file1.elecfans.com/web2/M00/F4/FD/wKgZomZ-KH2AWRWvAAD1R-p6goc710.png)
下周見!飛凌嵌入式即將亮相2024上海國際嵌入式展
![下周見!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>即將亮相2024上海國際<b class='flag-5'>嵌入式</b>展](https://file1.elecfans.com/web2/M00/EC/63/wKgZomZidZqAC3LAAACunT2iiTs101.png)
正點原子i.MX93開發(fā)板
圓滿收官|飛凌嵌入式CACLP 2024精彩回顧
![圓滿收官|<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>CACLP 2024精彩回顧](https://file1.elecfans.com/web2/M00/C6/4A/wKgaomX88V2AAp9RAADSSJYHuXc188.png)
評論