加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 關(guān)于AM6254的GPIO信號(hào)描述
    • A核使用A核的引腳
    • 用戶空間如何控制GPIO
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

如何使用AM6254的GPIO?進(jìn)來(lái)聊聊

2022/10/24
1774
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

飛凌嵌入式FET6254-C核心板基于TI Sitara™ AM62x系列工業(yè)級(jí)處理器設(shè)計(jì)開發(fā),由于AM6254采用了Cortex-A53+Cortex-M4F的處理核+控制核架構(gòu)組合,因此引腳自然也是分為A核的引腳和M核的引腳。

如果A核的引腳不夠用怎么辦?可以把M核的引腳用作A核嗎?答案是肯定的。

今天小編將為大家分別介紹這顆核心板的GPIO引腳信號(hào)描述、A核使用A核的引腳、用戶空間如何控制GPIO以及A核如何調(diào)用M核的引腳并復(fù)用成GPIO。

關(guān)于AM6254的GPIO信號(hào)描述

我們通過(guò)GPIO可以了解有關(guān)AM6254這顆CPU的引腳框架,CPU手冊(cè)目錄:用戶資料/原廠資料/SPRSP58_AM62x_DS_AI_2_16_2022

6.3.10GPIO章節(jié)有如下描述:

AM6254的GPIO信號(hào)一共有兩大組:分別是MAINDomainMCUDomain,其中MAINDomain是A核的GPIO,有兩組GPIO0和GPIO1,分別是92和52個(gè)引腳。

MCUDomain是M核的GPIO,有一組GPIO0,24個(gè)引腳。

6.2Pin Attributes章節(jié)描述了引腳的控制寄存器PADCONFIG名稱以及地址,以及每個(gè)引腳的屬性。例如B13引腳,引腳名稱是SPI0_D0,寄存器名稱為PADCONFIG112,寄存器地址為0x000F41C0,可以復(fù)用的功能如下:

Linux系統(tǒng)可以使用devmem2查看寄存器值。

root@ok6254:~# devmem2 0x000F41C0/dev/mem opened.Memory mapped at address 0xffff969c0000.Read at address  0x000F41C0(0xffff969c41c0): 0x00010007root@ok6254:~#

5.1.2.3Pad Configuration Register Functional Description章節(jié)。

A核使用A核的引腳

了解了引腳信號(hào)的描述,先不要著急,接下來(lái)先熟悉一下A核的引腳復(fù)用方法,以將SPI_D0用作GPIO為例,設(shè)備樹配置修改如下:

arch/arm64/boot/dts/ti/OK6254-C.dts

 

修改完成后編譯設(shè)備樹,會(huì)在Image目錄下生成鏡像,然后替換dtb鏡像,替換目錄:/boot/OK6254-C.dtb。執(zhí)行sync保存后重啟。

用戶空間如何控制GPIO

為了查看是否修改成功,可以使用如下命令查看GPIO使用情況

root@ok6254:~#cat /sys/kernel/debug/gpiogpiochip2: GPIOs 314-401, parent:platform/601000.gpio, 601000.gpio:gpio-330 (                    |led1               ) out logpio-331 (                    |led2               ) out logpio-332 (                    |led3               ) out logpio-333 (                    |led4               ) out logpio-336 (                   |fixed-regulator-rgb ) out lo

gpiochip1: GPIOs 402-488, parent:platform/600000.gpio, 600000.gpio:gpio-433 (                    |net-5g-rst         ) out lo ACTIVE LOWgpio-437 (                    |phy_rstn           ) out logpio-438 (                    |id                 ) in  logpio-440 (                    |RT9186             ) out logpio-441 (                   |fixed-regulator-lvds) out logpio-442 (                    |phy_rstn           ) out logpio-444 (                    |heartbeat          ) out logpio-473 (                    |regulator-6        ) out lo

gpiochip0: GPIOs 489-511, parent:platform/4201000.gpio, 4201000.gpio:root@ok6254:~#

方式1:

使用內(nèi)核的gpio-leds驅(qū)動(dòng)

root@ok6254:~# cd /sys/class/leds/root@ok6254:/sys/class/leds#lsheartbeat  led1  led2 led3  mmc0::  mmc1::  mmc2::root@ok6254:/sys/class/leds#

進(jìn)入其中一個(gè)led1

root@ok6254:/sys/class/leds#cd led1/root@ok6254:/sys/class/leds/led1#lsbrightness  device max_brightness  power  subsystem  trigger  ueventroot@ok6254:/sys/class/leds/led1#

設(shè)備樹默認(rèn)配置觸發(fā)方式trigger為timer,此時(shí)的led是按照定時(shí)亮滅的,可以改成手動(dòng)控制。

root@ok6254:/sys/class/leds/led1#echo none > trigger  將方式改成正常模式root@ok6254:/sys/class/leds/led1#echo 1 > brightness  熄滅root@ok6254:/sys/class/leds/led1#echo 0 > brightness  點(diǎn)亮root@ok6254:/sys/class/leds/led1#

方式2:

使用/sys/class/gpio,注意,該方式不需要再設(shè)備配置leds節(jié)點(diǎn),只需要配置引腳即可。如下是將gpmc_ad15引腳配置成GPIO。

關(guān)于gpiochip的計(jì)算公式如下:

Gpmc_ad15的引腳是gpio0_30,chip值為402+30=432,導(dǎo)出gpio:

root@ok6254:~#echo 432 >/sys/class/gpio/export

設(shè)置方向:

root@ok6254:~# echo out >/sys/class/gpio/gpio432/direction

設(shè)置高低電平

root@ok6254:~# echo 1 >/sys/class/gpio/gpio432/value  置高root@ok6254:~# echo 0 >/sys/class/gpio/gpio432/value   拉低root@ok6254:~#

A核如何調(diào)用M核的引腳  并復(fù)用成GPIO?

設(shè)備樹配置:

&mcu_pmx0 {mymcugpio1_pins_default:mymcugpio1-pins-default {                pinctrl-single,pins= <                                                                        AM62X_MCU_IOPAD(0x004,PIN_INPUT, 7)                    >;            };};
&mcu_gpio0 {                pinctrl-names ="default";                    pinctrl-0=<&mymcugpio1_pins_default>;                status = "okay";};

使用gpio-leds驅(qū)動(dòng)的配置,在leds節(jié)點(diǎn)中添加如下(若您正在使用手機(jī)閱讀,建議您關(guān)掉“深色模式”):

---a/arch/arm64/boot/dts/ti/OK6254-C.dts+++b/arch/arm64/boot/dts/ti/OK6254-C.dts@@ -166,7 +166,7 @@                            compatible= "gpio-leds";                            pinctrl-names= "default";                            pinctrl-0= <&usr_led_pins_default>;-+                          pinctrl-1 = <&mymcugpio1_pins_default>;                            led-0 {                                    label= "heartbeat";                                    gpios= <&main_gpio0 42 GPIO_ACTIVE_HIGH>;@@ -206,6 +206,14 @@                        led-pattern= <500 500>;                        default-state= "on";                 };+              +               led-5 {+                      label = "led5";+                       gpios = <&mcu_gpio0 1 GPIO_ACTIVE_HIGH>;+                       linux,default-trigger = "timer";+                       led-pattern = <500 500>;+                       default-state = "on";+               };

};

控制方式與前面提到的方式1和方式2一樣,至此GPIO的復(fù)位完成。

當(dāng)然其他接口I2C、CAN、SPI、UART也是類似,想要了解更詳細(xì)的使用方式,大家可以關(guān)注后續(xù)的應(yīng)用筆記。

作者:李堅(jiān)斌

相關(guān)推薦

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

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