全志T507核心板如何匹配您的應(yīng)用主板

產(chǎn)品特性:
?采用Allwinner公司Cortex-A53四核T507車規(guī)級處理器,運行最高速度為1.5GHZ;
?支持Mali-G31 MP2 GPU,支持OpenGL ES 3.2/2.0/1.0, Valkan 1.1,OpenCL 2.0
?支持4K/25fps H.264視頻編碼,支持4K/15fps MJPEG編碼;
?多格式4K/60fps視頻解碼 (H.265,H.264,VC-1, MPEG-1/2/4, VP8)?;
?支持雙屏異顯;支持RGB565/LVDS(未把RGB信號全部引出),分辨率最高1920x1080/60fps;支持HDMI 2.0A, 分辨率最高4K/60fps;支持TV CVBS OUT(NTSC/PAL);
?支持1-4G Bytes LPDDR4 SDRAM;支持EMMC 4G-64G大容量電子盤,可啟動;
?支持SDIO3.0,USB2.0 HOST&OTG,6路I2C,6路UART,1路SPI,6路PWM,支持雙路以太網(wǎng),一路10/100M;一路10/100/1000M;
?穩(wěn)定的操作系統(tǒng)的支持,可預(yù)裝Android10.0或者LINUX 4.9/Ubuntu 20.04
?郵票孔174POS設(shè)計, 尺寸為:52.5*45MM
評估板功能圖:

1、如何適配您的硬件平臺
? ? ? 為了適配用戶新的硬件平臺,首先需要了解盈鵬飛的AHD-T507開發(fā)板提供了哪些資源,具體的信息可以查看《AHD-T507 SDK1.0.0 發(fā)布說明》。除此之外用戶還需要對CPU的芯片手冊,以及COM-T507核心板的產(chǎn)品手冊,管腳定義有比較詳細的了解,以便于根據(jù)實際的功能對這些管腳進行正確的配置和使用。
CoM-T507核心模塊電源的供給
一個核心模塊產(chǎn)品,最關(guān)鍵的是電源供給的設(shè)計,特別是高端平臺,為了實現(xiàn)電源的有效供應(yīng),并不是所有電源都同時輸出的,而是有需要的時候才輸出。同時,當系統(tǒng)進入休眠狀態(tài)或者關(guān)機狀態(tài)時,各個電源狀態(tài)也不盡相同,需要用戶根據(jù)實際用戶得當配置。以下先介紹下核心模塊上PMIC-AXP853各路電源是如何分配的,具體分配見下表:

2、如何配置您的sys_config.fex
sys_config.fex是全志對T5定義的一套功能配置文件,此文件可用于定義各個節(jié)點的管腳,屬性,電源等,使用戶可快速配置資源的功能。為了讓用戶掌握sys_config.fex配置和使用方法。本章將講解使用方法
sys_config.fex 文件路徑:
PC$: device/config/chips/t507/configs/xxx/sys_config.fex (xxx 代表不同的配置)
定義屬性類方式:
[product]
version = "100" machine = "demo2"
[platform]
eraseflag = 1
debug_mode = 0
;----------------------------------------------------------------------------------
;[target] system bootup configuration
;boot_clock = CPU boot frequency, Unit: MHz
;storage_type = boot medium, 0-nand, 1-card0, 2-card2, -1(defualt)auto scan
;advert_enable = 0-close advert logo 1-open advert logo (只有多核啟動下有效)
;----------------------------------------------------------------------------------
[target]
boot_clock = 1008
storage_type = -1
advert_enable = 0
burn_key = 1
定義管腳類方式:
[card0_boot_para]
card_ctrl = 0
card_high_speed = 1
card_line = 4
sdc_d1 ??= port:PF0<2><1><3><default>
sdc_d0 ??= port:PF1<2><1><3><default>
sdc_clk ??= port:PF2<2><1><3><default>
sdc_cmd ?= port:PF3<2><1><3><default>
sdc_d3 ??= port:PF4<2><1><3><default>
sdc_d2 ??= port:PF5<2><1><3><default>
;sdc_type ?= "tm1"
3、啟動時PMIC電源的配置
客戶調(diào)試時重點需要知道PMIC-AXP853的配置,因為這個配置涉及到u-boot階段電源的開關(guān),比如說:你如果要開背光的話,那么使能背光的GPIO必須是有供電的,否則GPIO無法正常工作。T507不是啟動后全部電源都要工作,有些電源是需要時才工作。例如:PE組GPIO,我們使用它接口了TP9930,這組GPIO在u-boot階段可不工作;
;----------------------------------------------------------------------------------
; ??system configuration
; ???
;dcdc1_vol ---set dcdc1 voltage,mV,1500-3400,100mV/step
;dcdc2_vol ---set dcdc2 voltage,mV,500-1200,10mV/step
; 1220-1540,20mV/step
;dcdc3_vol ---set dcdc3 voltage,mV,500-1200,10mV/step
; 1220-1540,20mV/step
;dcdc4_vol ---set dcdc4 voltage,mV,500-1200,10mV/step
; 1220-1540,20mV/step
;dcdc5_vol ---set dcdc5 voltage,mV,800-1120,10mV/step
; 1240-1840,20mV/step
;dcdc6_vol ---set dcdc6 voltage,mV,500-3400,100mV/step
;aldo1_vol ---set aldo1 voltage,mV,700-3300,100mV/step
;aldo2_vol ---set aldo2 voltage,mV,700-3300,100mV/step
;aldo3_vol ---set aldo3 voltage,mV,700-3300,100mV/step
;aldo4_vol ---set aldo4 voltage,mV,700-3300,100mV/step
;aldo5_vol ---set aldo5 voltage,mV,700-3300,100mV/step
;bldo1_vol ---set bldo1 voltage,mV,700-3300,100mV/step
;bldo2_vol ---set bldo2 voltage,mV,700-3300,100mV/step
;bldo3_vol ---set bldo3 voltage,mV,700-3300,100mV/step
;bldo4_vol ---set bldo4 voltage,mV,700-3300,100mV/step
;bldo5_vol ---set bldo5 voltage,mV,700-3300,100mV/step
;cldo1_vol ---set cldo1 voltage,mV,700-3300,100mV/step
;cldo4_vol ---set cldo4 voltage,mV,700-4200,100mV/step
;----------------------------------------------------------------------------------
[power_sply]
dcdc1_vol = 1003300
dcdc2_vol = 1001000
dcdc4_vol = 1000900
aldo1_vol = 1001800
aldo2_vol = 1001800
aldo4_vol = 1001800
aldo5_vol = 3300
bldo1_vol = 1001800
bldo2_vol = 3300
bldo3_vol = 1003300
bldo4_vol = 1001200
bldo5_vol = 1001200
cldo1_vol = 1003300
cldo2_vol = 3300
cldo3_vol = 3300
cldo4_vol = 1001800
dc1sw_vol = 1003300
以[power_sply]
dcdc1_vol = 1003300
作為范例進行解釋:PMIC-AXP853一有6路DCDC,其中第一路是DCDC1,1003300表示的是該路電源輸出3.3V(“3300”表示這個含義,如果是1.8V,那么是1800),啟動開始輸出(第一字符“1”的含義);
同樣道理cldo2的解釋如下:
cldo2_vol = 3300
“3300”表示的是該路電源輸出3.3V(3300表示這個含義),啟動后不輸出;那么說,這個電源什么時候輸出呢?答案是:是在需要它的時候才輸出。經(jīng)過原理圖確認,該電源是輸出到了CoM-T507核心板上41腳(VCC-WIFI-IO),該電源在核心模塊上供應(yīng)給PG組IO,該組IO一般作為SDIO WIFI的接口,所以你在涉及到SDIO WIFI的dts(t507-board-com.dts中)上可以看到該電源的使用,見下面的dts:
(wlan_io_regulator = "axp858-cldo2表示對cldo2的調(diào)用):
wlan:wlan {
compatible ???= "allwinner,sunxi-wlan";
clocks ???????= <&clk_losc_out>;
pinctrl-0 ????= <&clk_losc_pins_a>;
pinctrl-names = "default";
wlan_busnum ??= <0x1>;
wlan_power ???= "axp858-dcdc1";
wlan_io_regulator = "axp858-cldo2";/*checked by EMBFLY*/ /*wlan_regon ???= <&pio PC ?3 1 2 0 1>;PC Port vol-level=1.8v,checked by EMBFLY*/
wlan_regon ???= <&pio PC ?3 1 0xffffffff 0xffffffff 0>;/*PC Port vol-level=3.3v,checked by EMBFLY*/
wlan_hostwake = <&pio PH ?10 6 0xffffffff 0xffffffff 0>;/*checked by EMBFLY*/
chip_en;
power_en;
status ???????= "okay";
};
Note:在dts中也有電源的設(shè)置,但是電源電壓的配置是sys_config.fex配置的。
4、啟動的EMMC相關(guān)參數(shù)配置
? Sys_config.fex中有EMMC相關(guān)參數(shù)需要配置,主要是控制啟動階段EMMC的讀寫速度。為了讓系統(tǒng)啟動時間更加短,工程師需要讓EMMC的讀寫達到最大性能。但是有的時候為了滿足其他功能的需求,工程師也不得不做出取舍,做出兼顧的抉擇。以下是EMMC在sys_config.fex里面的配置:
[card2_boot_para]
card_ctrl ??????= 2
card_high_speed = 1
card_line ??????= 8
sdc_clk ????????= port:PC5<3><1><3><default>
sdc_cmd ????????= port:PC6<3><1><3><default>
sdc_d0 ?????????= port:PC10<3><1><3><default>
sdc_d1 ?????????= port:PC13<3><1><3><default>
sdc_d2 ?????????= port:PC15<3><1><3><default>
sdc_d3 ?????????= port:PC8<3><1><3><default>
sdc_d4 ?????????= port:PC9<3><1><3><default>
sdc_d5 ?????????= port:PC11<3><1><3><default>
sdc_d6 ?????????= port:PC14<3><1><3><default>
sdc_d7 ?????????= port:PC16<3><1><3><default>
sdc_emmc_rst ???= port:PC1<3><1><3><default>
sdc_ds ?????????= port:PC0<3><1><3><default>
sdc_ex_dly_used = 2
sdc_io_1v8 = 0
;sdc_type = "tm4"
? ?這里涉及到啟動時EMMC ?io口的電壓和EMMC的通信速度等配置。其他的配置需要改動的少,重點說明下sdc_io_1v8這個參數(shù)的配置;這個參數(shù)決定了EMMC芯片的io電平,同時也決定了EMMC的讀寫速度。設(shè)置sdc_io_1v8=0,表示EMMC的io電平是3.3V;設(shè)置sdc_io_1v8=1,表示EMMC的io電平是1.8V;根據(jù)CoM-T507的硬件設(shè)計,EMMC的IO供電主要是由AXP853-ALDO1供應(yīng),該LDO也供應(yīng)了PC組IO口的電源。PC組的IO除了接口EMMC外,還有部分PC口的IO連接到核心板(PC3/PC4/PC7/PC12,具體見底板參考原理圖),供給客戶使用。所以,如果客戶想把這些IO做3.3V的IO用,那么必須讓ALDO1輸出3.3V;而EMMC的本處配置必須是sdc_io_1v8=0。
說明:由于全志資料需獲得相關(guān)的授權(quán),以上兩類的配置定義詳細含義請聯(lián)系盈鵬飛的技術(shù)支持獲取文檔《T507_sys_config.fex 使用配置說明.pdf》
5、如何創(chuàng)建您的設(shè)備樹
5.1、板載設(shè)備樹
用戶可以在BSP源碼里創(chuàng)建自己的設(shè)備樹,一般情況下不需要修改Bootloader部分
中的代碼。用戶只需要根據(jù)實際的硬件資源對Linux內(nèi)核設(shè)備樹進行適當?shù)恼{(diào)整即可。在此將AHD-T507的BSP各個部分中的設(shè)備樹列表羅列出來,方便用戶開發(fā)參考,具體內(nèi)容如下表所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表AHD-T507設(shè)備樹列表

注:以上文件路徑如下:
sys_config.fex文件在SDK/device/config/chips/t507/configs/demo2.0/ (SDK代表SDK代碼位置)
Dts相關(guān)文件在SDK/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/
5.2、設(shè)備樹的添加
Linux內(nèi)核設(shè)備樹是一種數(shù)據(jù)結(jié)構(gòu),它通過特有的語法格式描述片上片外的設(shè)備信息。由BootLoader傳遞給kernel,kernel進行解析后形成和驅(qū)動程序關(guān)聯(lián)的dev結(jié)構(gòu)供驅(qū)動代碼使用。
在內(nèi)核源碼下arch/arm64/boot/dts下可以看到大量的平臺設(shè)備樹。如適合AHD-T507的設(shè)備樹,可在當前路徑下增加自定義設(shè)備樹,如:
// Path:SDK/kernel/arch/arm64/boot/dts/sunxi ????//SDK表示你SDK代碼的存放目錄
我們將COM-T507核心板相關(guān)的資源編寫進sun50iw9p1-com.dtsi以及t507-board-com.dts和com-x507.dts。其它擴展的接口和設(shè)備可以對它們進行引用即可,如下所示(僅供參考):
#include "t507-board-com.dts"
//#include "rn6854m.dtsi"
#include "tp9930.dtsi"
//#include "lcd-lvds-7-1024-600.dtsi"
// #include "lcd-lvds-21-1920-1080.dtsi"
// #include "lcd-lvds-10.1-1024-600-st.dtsi"
#include "lcd-hdmi-1080p60.dtsi"
/{
????model = "com-t507";
????compatible = "allwinner,t507", "arm,sun50iw9p1";?
關(guān)于AHD RX驅(qū)動的支持:該示例dts的的內(nèi)容是com-x507.dts,其中包括了tp9930.dtsi的支持,也包括了lcd-hdmi-1080p60.dtsi的支持;如果僅要支持rn6854m的RX,那么請把tp9930.dtsi這個包含注釋掉,僅包含rm6854m.dtsi即可。如果需要同時支持那么請包含tp9930_rn6854m.dtsi;
關(guān)于HDMI或者LVDS的支持:HDMI和LVDS是兩個功能,buildroot linux僅支持一個顯示,所以,當您是buildroot Linux的時候,請包含HDMI或者LVDS的單獨一個文件即可。比如上面示例中包含了lcd-hdmi-1080p60.dtsi文件。
6、設(shè)備樹中電源PMIC的管理
一個高端的核心模塊產(chǎn)品使用過程中,PMIC的軟件配置非常重要。配置不合適時,最嚴重的情況是燒毀處理器。為了有效的降低功耗,PMIC中的各路電源不一定是輸出的,而是有需要的時候才輸出。另外,當系統(tǒng)進入休眠狀態(tài)或者關(guān)機狀態(tài)時,各個電源狀態(tài)也不盡相同,需要用戶根據(jù)實際用戶得當配置。以下通過T507平臺的某一個特定功能(SDIO WIFI)介紹下DTS中PMIC的配置。
7、SDIO wifi 模塊的硬件原理
? ? 要進行SDIO WIFI模塊的DTS配置,我們首先要知道SDIO WIFI和PMIC以及處理器的聯(lián)系,也就是硬件原理。AHD-T507采用的是RTL8723DS這個SDIO模塊,原理如下:

? ? 我們可以看到wifi模塊VW1的電源分為兩路,一路是VBAT,這路電源供給是由VCC-3V3供應(yīng)的,該電源來自于AXP853的DCDC1;另外一路是VDDIO,這路電源是由VCC-WIIF-IO,該電源來自于AXP853的CLDO2。除了電源外,我們也看到WIFI模塊是通過PC4/PC3等幾個GPIO來控制的。為了達到電平的匹配(WIFI模塊的IO的電平和CPU供應(yīng)的電平要一致,否則將邏輯錯誤),必須保證處理器PC組GPIO的供電電源要和WIFI模塊的VDDIO電源一致。根據(jù)原理圖查證得知,處理器的PC組的GPIO是由PMIC-ALDO1供電,WIFI模塊的VDDIO供電電壓由CLDO2供電,因此 CLDO2的輸出電壓要和ALDO1的輸出電壓一致;以下先查看DTS中涉及到的CLDO2和ALDO1的配置,另外,也要查看SDIO WIFI的DTS配置。
8、PMIC和SDIO WIFI電源部分的dts
a)? ?以下是DTS中CLDO2和ALDO1配置
pmu0: pmu@36{
compatible = "x-powers,axp858";
reg = <0x36>;
interrupt-parent = <&nmi_intc>;
interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
interrupt-controller;
#interrupt-cells = <1>;
wakeup-source;
powerkey0: powerkey@0{
status = "okay";
compatible = "x-powers,axp2101-pek";
pmu_powkey_off_time = <6000>;
pmu_powkey_off_func = <0>;
pmu_powkey_off_en = <1>;
pmu_powkey_long_time = <1500>;
pmu_powkey_on_time = <1000>;
wakeup_rising;
wakeup_falling;
};
regulator0: regulators{
reg_dcdc1: dcdc1 {
regulator-name = "axp858-dcdc1";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <3400000>;
regulator-step-delay-us = <25>;
regulator-final-delay-us = <50>;
regulator-always-on;
};
reg_aldo1: aldo1 {
regulator-name = "axp858-aldo1";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <3300000>;
regulator-step-delay-us = <25>;
regulator-final-delay-us = <50>;
regulator-always-on;
};
reg_cldo2: cldo2 {
regulator-name = "axp858-cldo2";
regulator-min-microvolt = <700000>;
regulator-max-microvolt = <3v300000>;
regulator-step-delay-us = <25>;
regulator-final-delay-us = <50>;
regulator-always-on;
};
從以上PMIC的DTS中,我們可以看到,每個電源都是有一個regulator-always-on的參數(shù)配置,這個表示該電源在內(nèi)核啟動后(這里需要強調(diào)的是內(nèi)核啟動后,而不是處于一開始的BOOT階段),該電源一直打開。那么在BOOT(U-BOOT)階段,這個電源是否開呢?這個由6.2章節(jié)的sys_config.fex的配置來決定。
另外,我們還分別看到了這兩個參數(shù)regulator-min-microvolt/regulator-max-microvolt,而這兩個參數(shù)其實并不相等。regulator-min-microvolt = <700000>;這個參數(shù)表示的是該LDO輸出的最小電壓是0.7V,regulator-max-microvolt = <3v300000>;這個參數(shù)表示的是該LDO輸出的最大電壓是3.3V。那么具體該LDO輸出的電壓是多少呢?
這個電壓的輸出取決于sys_config.fex的配置。如果sys_config.fex中設(shè)定該LDO的電壓是1.8V,那么該LDO輸出的就是1.8V;
如何決定電源的工作狀態(tài),這個取決于你的想要的工況。如果缺少regulator-always-on參數(shù),那么LDO會有什么表現(xiàn)呢?
先提供結(jié)論:
結(jié)論1:缺少regulator-always-on參數(shù),這路電源假如有特定驅(qū)動調(diào)用,那么特定驅(qū)動會對該電源進行控制,比如下面SDIO wifi的DTS中配置了兩個參數(shù)
wlan_power ???= "axp858-dcdc1";
wlan_io_regulator = "axp858-cldo2";
結(jié)論2:缺少regulator-always-on參數(shù),這路電源假如沒有驅(qū)動調(diào)用,那么該電源會關(guān)閉;關(guān)閉后,該電源供電的IO將不工作,這個調(diào)試的時候要特別注意。
結(jié)論3:如果處理器某組GPIO要接收中斷,那么這組電源必須一致開著,如果不開,那么該組IO就無法接受中斷了。比如:我們本處使用了PC組的GPIO接受WIFI的中斷,那么給PC組供電的ALDO1必須有regulator-always-on配置,保持電源一直供應(yīng);
b)以下是DTS中SDIO WIFI配置
wlan:wlan {
compatible ???= "allwinner,sunxi-wlan";
clocks ???????= <&clk_losc_out>;
pinctrl-0 ????= <&clk_losc_pins_a>;
pinctrl-names = "default";
wlan_busnum ??= <0x1>;
wlan_power ???= "axp858-dcdc1";
wlan_io_regulator = "axp858-cldo2";
wlan_regon ???= <&pio PC ?4?1 2 0 1>;
wlan_hostwake = <&pio PC??2?6 0xffffffff 0xffffffff 0>;
chip_en;
power_en;
status ???????= "okay";
};
? ? 在以上SDIO WIFI的DTS中,我們看到如下兩個參數(shù),一個是wlan_power,一個是wlan_io_regulator。wlan_power實際上是WIFI模塊的供VBAT,而這個電源來自于 PMIC的DCDC1。wlan_io_regulator實際上是WIFI模塊的供電的VDDIO,而這個電源來自于PMIC的CLDO2.
wlan_power ???= "axp858-dcdc1";
wlan_io_regulator = "axp858-cldo2";
wifi模塊的驅(qū)動中,會對這兩個電源進行控制(具體如何控制,要看實際的驅(qū)動代碼),假如這兩個電源你不需要驅(qū)動進行控制,而是一直保持開著的狀態(tài)(電源的dts中有regulator-always-on參數(shù)),那么你可以配置如下:
wlan_power;
wlan_io_regulator;
以上把DTS中電源的配置進行了簡單的介紹,不詳或者錯漏之處在所難免,如果發(fā)現(xiàn)問題,歡迎交流!
8、如何根據(jù)您的硬件配置CPU功能管腳
? ?實現(xiàn)一個功能引腳的控制是一個較為復(fù)雜的系統(tǒng)開發(fā)過程之一,其中包含了引腳的配置,驅(qū)動的開發(fā),應(yīng)用的實現(xiàn)等等步驟,本節(jié)不具體分析每個部分的開發(fā)過程,而是以實例來講解功能管腳的控制實現(xiàn)。
9、設(shè)備樹中GPIO輸入、輸出、中斷的配置
GPIO: General-purpose input/output,通用的輸入輸出口,在嵌入式設(shè)備中是一個十
分重要的資源,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態(tài)-是高電平或是低電平。
T5封裝大量的外設(shè)控制器,這些外設(shè)控制器與外部設(shè)備交戶一般是通過控制GPIO來實現(xiàn),而將GPIO被外設(shè)控制器使用我們稱為復(fù)用(Alternate Function),給它們賦予了更多復(fù)雜的功能,如用戶可以通過GPIO口和外部硬件進行數(shù)據(jù)交互(如UART),控制硬件工作(如LED、蜂鳴器等),讀取硬件的工作狀態(tài)信號(如中斷信號)等。所以GPIO口的使用非常廣泛。
以下通過一個簡單的SPI擴展串口的案例進行說明,這個案例中包括了gpio的輸出控制和gpio的中斷控制。在沒有開始軟件闡述之前,先明確下spi-to-uart的原理圖(采用wk2204方案),原理圖如下:

通過原理圖可以確認的知道,WK2204的中斷信號是接了T5的PH9,WK2204的復(fù)位信號是接了T5處理器的PI6。首先我們要確認這兩個信號是否可以滿足應(yīng)用?因為在T5處理器上不是所有的GPIO都支持中斷。查看規(guī)格書<T5_Series_Datasheet_V1.3.pdf>,PH9的參數(shù)如下:

在dts中引用一個GPIO要按照如下格式:
/*------i/o used--------
gpio = <&pio PH 4 ????1 ??2 ??????0 ??? ?1>;*/
/* ???i/o fun ?drv_lev ???pull ???val*/
/*
<fun>:0:input;1:output;6:int;
<pull>:是否使用上拉,0:不上下拉,1:上拉,2:下拉
<drv_level>:驅(qū)動能力(上下拉力度),可取值 0~3,越高驅(qū)動能越高。
<value>:io 的初始值。
*/
Spi-to-uart wk2204的dts如下:
/*spi-to-uart wk2204 driver,embfly */
spi1: spi@05011000 {
pinctrl-0 = <&spi1_pins_a &spi1_pins_b>;
pinctrl-1 = <&spi1_pins_c>;
spi_slave_mode = <0>;
status = "okay";
/*wk2204 spi to 4uart,AHD-T507 V0.1,embly,22-11-22*/
spi_uart@0{
status = "okay";
pinctrl-0 = <&wk2xxx_int>;
compatible = "wkmic,wk2xxx_spi";
reg = <0x00>;
spi-max-frequency = <10000000>;
rst-gpio = <&pio PI?6?1 2 1 0>;/*Checked ,note by embfly*/
irq-gpio = <&pio PH 9 6 0xffffffff 0xffffffff 0>; };
10、設(shè)備樹中特定功能的gpio配置
1).開發(fā)板LCD資源重新分配實例
AHD-T507 開發(fā)板定義和實現(xiàn)的眾多豐富的功能,但同時也占有了大量的管腳資源,如用戶直接使用AHD-T507基礎(chǔ)上進行設(shè)計開發(fā),將需要對管腳進行重新定義和配置。下列就以將LCD復(fù)用管腳(LCD-D0)功能,可先查表了解管腳的復(fù)用功能。
表6-3.LCD-D0管腳復(fù)用列表

AHD-T507開發(fā)板已經(jīng)使用PD0兩個管腳作為LVDS的數(shù)據(jù)信號管腳,管腳配置如下:
//kernel/linux-4.9/arch/arm64/boot/dts/sunxi/?sun50iw9p1-pinctrl-com.dtsi
如下dts文件中的allwinner,muxsel = <3>;表示使用的是PD0的function3;
allwinner,muxsel = <7>;表示使用的是關(guān)閉PD0功能;
lvds0_pins_a: lvds0@0 {
allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", " PD8", "PD9", "PD6", "PD7";
allwinner,pname = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD8", "PD9", "PD6", "PD7";
allwinner,function = "lvds0";
allwinner,muxsel = <3>;
allwinner,drive = <3>;
allwinner,pull = <0>;
};
lvds0_pins_b: lvds0@1 {
allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", " PD8", "PD9", "PD6", "PD7";
allwinner,pname = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD8", "PD9", "PD6", "PD7";
allwinner,function = "lvds0_suspend";
allwinner,muxsel = <7>;
allwinner,drive = <3>;
allwinner,pull = <0>;
};
以下的代碼是7寸LVDS液晶屏的dts文件,我們看到lvds0_pins_a已經(jīng)被dts文件調(diào)用,PD0的配置完畢。
//linux-4.9/arch/arm64/boot/dts/sunxi/embfly-lcd-lvds-7-1024-600.dtsi
. . . &lcd0 {
lcd_used = <1>;
lcd_driver_name = "default_lcd";
lcd_backlight = <200>;
lcd_if = <3>;
lcd_x = <1024>;
lcd_y = <600>;
lcd_width = <150>;
lcd_height = <94>;
lcd_dclk_freq = <50>; // <70>
lcd_pwm_used = <1>;
lcd_pwm_ch = <0>;
lcd_pwm_freq = <50000>;
lcd_pwm_pol = <1>;
lcd_pwm_max_limit = <255>;
lcd_hbp = <160>;
lcd_ht = <1324>;
lcd_hspw = <116>;
cd_vbp = <24>;
lcd_vt = <629>;
lcd_vspw = <3>;
lcd_lvds_if = <0>;
lcd_lvds_colordepth = <0>;
lcd_lvds_mode = <0>;
lcd_frm = <0>;
lcd_hv_clk_phase = <0>;
lcd_hv_sync_polarity= <0>;
lcd_gamma_en = <0>;
lcd_bright_curve_en = <0>;
lcd_cmap_en = <0>;
lcd_fsync_en = <0>;
lcd_fsync_act_time = <1000>;
lcd_fsync_dis_time = <1000>;
lcd_fsync_pol = <0>;
deu_mode = <0>;
lcdgamma4iep = <22>;
smart_color = <90>;
lcd_pin_power = "bldo1";
lcd_power = "dc1sw";
//lcd_bl_en = <&pio PD 28 1 0 3 1>;
//lcd_gpio_0 = <&pio PH 4 1 0 3 1>;
pinctrl-0 = <&lvds0_pins_a>;
pinctrl-1 = <&lvds0_pins_b>;
當不使用此lcd0接口時,也可以將lcd設(shè)備樹節(jié)點狀態(tài)配置為禁用態(tài)“disabled”。
&lcd0 {
status = "disabled";
};