加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 1、硬件原理分析 
    • 2、設置引腳復用
    • 3、注釋掉沖突部分
    • 4、更新設備樹
    • 5、操作GPIO
    • 6、GPIO參數(shù)詳解
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

i.MX6ULL配置GPIO一共需要幾步?

2022/08/05
814
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

正如學習C語言時寫的第一段代碼都是“HelloWorld!”,接觸一款新的處理器時往往是從點亮一個LED開始;而點亮一個LED,則需要操作這款芯片GPIO外設。

那么作為廣受歡迎的i.MX6ULL處理器,它的GPIO外設應該如何配置呢?今天小編就將通過飛凌嵌入式的OKMX6ULL-S開發(fā)板來為大家詳細介紹。

i.MX6ULL處理器的GPIO配置

i.MX6ULL運行的是Linux系統(tǒng),眾所周知Linux下一切皆文件。在Linux系統(tǒng)當中,有一個文件專門用于配置處理器的各個外設,包括GPIO,這個文件被稱為“設備樹”,i.MX6ULL的設備樹在內核源碼中的路徑為:arch/arm/boot/dtbs/。

在這個路徑下我們可以看到很多設備樹文件,我們要使用的設備樹是:okmx6ull-s-emmc.dts以及okmx6ull-s-nand.dts。打開以上任意一個設備樹文件,可以看到二者均引用了imx6ull-14x14-evk.dts,因此對設備樹的修改都是基于imx6ull-14x14-evk.dts。

找到其中的 &iomuxc 節(jié)點,可以看到在 pinctrl_hog_1:hoggrp-1 節(jié)點下已有部分GPIO復用,內容如下:

1、硬件原理分析 

查看硬件原理圖,6ULL-S底板上有兩個LED,以LED2為例,LED2的陰極接在了GPIO9引腳上,當GPIO9為低時,LED點亮。

打開硬件資料/用戶手冊/FETMX6ULx-S核心板管腳功能分配表20200624.xlsx,通過查表得知GPIO9對應的是i.MX6ULL的GPIO1_IO09。

2、設置引腳復用

前面我們提到了&iomuxc節(jié)點下增加引腳復用,參數(shù)我們先設置為0x17059,后面會解釋配置方法。配置如下:

3、注釋掉沖突部分

接下來打開內核源碼中的:arch/arm/boot/dts/imx6ull-14x14-evk.dts

因接下來要對GPIO進行操作,為防止該節(jié)點影響,需要注釋掉設備樹中的LED節(jié)點,如下圖紅框中所示:

4、更新設備樹

重新編譯設備樹,命令如下:

/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi //執(zhí)行環(huán)境變量

make dtbs 這條命令會編譯所有的設備樹,編譯后再次查看確認已經(jīng)生成新的dtb文件。

 

接下來,我們將剛剛生成的設備樹文件拷貝到OKMX6ULL-S開發(fā)板——可以通過U盤,也可以通過TFTP、NFS、FTP這樣的網(wǎng)絡服務將生成的dtb文件拷貝到開發(fā)板上。

以eMMC版本為例,我們可以直接將設備樹文件:okmx6ull-s-emmc.dtb拷貝到/run/media/mmcblk1p1/路徑下,替換掉該路徑下的同名文件,之后重啟開發(fā)板。

5、操作GPIO

1. 計算對應sys/class/gpio的值GPIOn_IOx= (n-1)*32 + x

GPIO1_IO09=(1- 1)*32 + 9 = 9

2. 將GPIO1_IO09=設置為輸出

echo9 > /sys/class/gpio/export 用于通知系統(tǒng)需要導出控制的GPIO引腳編號

echo"out" > /sys/class/gpio/gpio9/direction 控制為輸出

echo"1" > /sys/class/gpio/gpio9/value 輸出為高電平,LED熄滅

或者echo"0" > /sys/class/gpio/gpio9/value輸出為低電平,LED點亮

echo9  > /sys/class/gpio/unexport 通知系統(tǒng)取消導出

6、GPIO參數(shù)詳解

現(xiàn)在我們轉過頭來了解一下剛剛都用到了哪些參數(shù):

MX6UL_PAD_GPIO1_IO09__GPIO1_IO09這一長串,是一個宏定義,可以在imx6ul-pinfunc.h文件當中查看,細心的小伙伴可能已經(jīng)注意到了imx6ul-pinfunc.h這個文件是6UL的,這是因為imx6ull-pinfunc.h引用了imx6ul-pinfunc.h,并且增加了部分內容。

打開arch/arm/boot/dtbs/imx6ul-pinfunc.h文件,找到MX6UL_PAD_GPIO1_IO09的宏定義如下:

這些宏定義就是GPIO1_IO09這個引腳可以復用的功能。每一個宏定義后面都有5個參數(shù),再加上剛剛我們在&iomuxc節(jié)點下配置的0x17059一共是6個參數(shù),通過它們就可以完成一個GPIO的配置了,這6個參數(shù)分別為:

 

    mux_ctrl_ofs:MUX寄存器偏移地址

    pad_ctrl_ofs:PAD寄存器偏移地址

    sel_input_ofs:輸入選擇寄存器偏移地址

    mux_mode:MUX寄存器值

    sel_input:輸入選擇寄存器值

    pad_ctrl:PAD寄存器值

以上6個參數(shù)對應了3個寄存器的偏移地址和寄存器值。我們接下來重點介紹一下MUX寄存器和PAD寄存器。

1. MUX寄存器

全名是SW_MUX_CTL_PAD_GPIO1_IO09,意為GPIO復用寄存器,在i.MX6ULL的數(shù)據(jù)手冊有它的詳細介紹,我們可以從飛凌官方提供的資料中找到:硬件資料/數(shù)據(jù)手冊/i.MX6ULLRM.pdf。

打開32.6.16小節(jié),可以看到寄存器偏移地址和我們官方提供的文件中是一致的。而ALT0-ALT8則分別對應了這個GPIO可以復用的功能,0x5對應的就是將GPIO5_IO09復用成GPIO1_IO09。

2. PAD寄存器

全稱SW_PAD_CTL_PAD_GPIO1_IO09,意為GPIO電氣參數(shù)配置寄存器,這個是我們需要重點關注的內容,因為無論是剛剛提到的MUX寄存器,還是輸入選擇寄存器,NXP官方都已經(jīng)為我們寫好了宏定義,但是這個寄存器的值,需要用戶根據(jù)自身需求來設置,參考的資料依舊是i.MX6ULLRM.pdf,在32.6.162小節(jié),有關于PAD寄存器每一位的詳細解釋。

HYS(bit16):使能遲滯比較器,當IO作為輸入功能的時候有效,開啟遲滯比較器可以濾掉一些干擾。這一位為0時禁止遲滯比較器,為1時使能遲滯比較器。

PUS(bit15:14):設置上下拉電阻,一共有四種選項可以選擇:

PUE(bit13):當IO作為輸入的時候,這一位用來設置IO使用上下拉還是狀態(tài)保持器。當為0的時候使用狀態(tài)保持器,當為1的時候使用上下拉。狀態(tài)保持器在IO作為輸入的時候才有用,顧名思義,就是當外部電路斷電以后此IO口可以保持住以前的狀態(tài)。

PKE(bit12):此位用來使能或者禁止上下拉/狀態(tài)保持器功能,這一位為0時禁止上下拉/狀態(tài)保持器,為1時使能上下拉和狀態(tài)保持器。

ODE(bit11):開漏使能,當IO作為輸出的時候,用來禁止或者使能開漏輸出,這一位為0的時候禁止開漏輸出,為1的時候就使能開漏輸出功能。

SPEED(bit7:6):當IO用作輸出的時候,此位用來設置IO速度。

DSE(bit5:3):當IO用作輸出的時候用來設置IO的驅動能力,可以簡單理解為IO口上串聯(lián)的電阻大小,電阻越小驅動能力越強,總共有8個可選項:

SRE(bit0):IO翻轉速度,為1時IO電平跳變時間更快,對應波形更陡;為0時IO電平跳變時間要慢一些,波形也更平緩。

介紹完了PAD寄存器的每一位,我們再回頭看一下剛剛配置的0x17059,將它展開成二進制為:0001 0111 0000 0101 1001。

bit15:14設置為01,對應的是100K上拉,這是因為LED的陰極接到了GPIO上,保持默認狀態(tài)下LED為熄滅狀態(tài)。

bit5:3,這里配置的是R0/6,小伙伴們也可以試一下配置成其他的值,觀察LED的亮度會不會有變化。

以上就是為i.MX6ULL處理器配置GPIO的全過程,希望能夠對屏幕前的各位工程師小伙伴有所幫助。想要了解更多有關FETMX6ULL-S詳情和資料,可進入飛凌嵌入式官網(wǎng)。

作者:李寧寧

相關推薦

電子產(chǎn)業(yè)圖譜

秉承專業(yè)態(tài)度,專注智能設備核心平臺研發(fā)與制造,以技術研發(fā)創(chuàng)新為主導,以客戶實用化,產(chǎn)品化為目標,把握嵌入式行業(yè)的前沿發(fā)展需求,利用核心技術為客戶提供穩(wěn)定、可靠、功能優(yōu)異的高品質產(chǎn)品。合作聯(lián)系:17713286011