This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:无法从 sysfs 控制 GPIO

Guru**** 2582405 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/631926/linux-am3352-unable-to-control-gpio-from-sysfs

器件型号:AM3352

工具/软件:Linux

您好!

我正在使用定制的 AM335x 板、并且在控制某些 GPIO 方面遇到了问题。 我已将 GPIO (my_GPIO2_PINS_DEFAULT 条目中的 GPIO2_27=91和 GPIO2_28=92)添加到 DTS 文件中、并确保引脚不会在 DTS 文件的其他位置使用。 GPIO 91和92连接到另一个模块、其中91被下拉92在模块内部上拉。 当我尝试使用上述命令更改状态时、引脚状态不会改变。
我能够控制 DTS 文件中的其他 GPIO (并非所有 GPIO 都经过测试、但我尝试过的 GPIO 都可以正常工作)。 请告诉我是否需要做任何其他事情来使其正常工作。 默认情况下、GPIO 91和92用于 SD 卡接口。 我已将其更改为用作 GPIO、因为我不在电路板中使用 SD 卡接口。 请提供任何帮助。

我的 DTS 文件就是这样

//
*版权所有(C) 2012 Texas Instruments Incorporated - http://www.ti.com/
*
此程序是免费软件;您可以根据

免费软件基金会*发布的 GNU 通用公共许可证版本2的条款重新分发和/或修改*。
//
/dts-v1/;

#include "am33xx.dtsi"
#include 

/{
型号="CalixTO-AM335X-nxt";
兼容="ti、AM335x-evm"、"ti、am33xx";

CPU{
CPU@









@0{CPU0-supply =<&VDD_MPU_supply>;};};MEMORY{device_type ="memory";reg =<0x80000000*/ fixedd* 1;}mmcsvr稳 压器:0x0000000/ r2
兼容="稳压器固定";
reguler-name ="vmmcsd-regulator ";
稳压器最小微伏=<3300000>;
稳压器最大值微伏=<3300000>;
使能端高电平有效;
稳压器常开;
};

VDD_MPU_SUPPLY:fixedregulator@2{
兼容="稳压器固定";
reguler-name ="VDD-MPU-regulator ";
稳压器最小值微伏=<1262000>;
稳压器最大值微伏=<1262000>;
稳压器启动;
稳压器常开;
};

core_audio_supply:fixedreguler-audiocore{
兼容="稳压器固定";
电脑控制器名称="core_audio_supply";
稳压器最小微伏=<3300000>;
稳压器最大值微伏=<3300000>;
稳压器启动;
};

io_audio_supply:fixedreguler-audioio{
兼容="稳压器固定";
电脑控制器名称="io_audio_supply";
稳压器最小微伏=<1800000>;
稳压器最大值微伏=<1800000>;
稳压器启动;
};

LED{
pinctrl-names ="默认"、"睡眠";
pinctrl-0 =<&USER_LED_DEFAULT>;
pinctrl-1 =<&USER_LED_SLEEP>;

兼容="GPIO-LED";

LED@1{
标签="LED1";
GPIO =<&GPIO3 17 GPIO_ACTIVE_HIGH_>;
Linux、DEFAULTD ="心跳";
默认状态="开";
};
};
};

&am33xx_pinmux{
pinctrl-names ="默认值";
pinctrl-0 =<&clkout2_pin>;

USER_LED_DEFAULT:USER_LED_DEFAULT{
pinctrl-single、PINS =<
0x19C (PIN_OUTPLOUT | MUX_MODE7)// McASP0_DEFAULT_3*
= 0x19C




;GPIN_IN_IN_IN_IN_IN_INPUT = 0x19C (_IN_IN_IN_IN_IN_IN_INPUT);*_IN_IN_US_IN_IN_IN_IN_0_IN_IN_IN_INPUT = 0x19C)



my_GPIO0_PINS_DEFAULT{
pinctrl-single、PINS =<
0x060 (PIN_OUTPUT_PULLUP | MUX_MODE7)/* GPMC_ad11.GPIO0_27 *
/ 0x018 (PIN_OUTPUT | MUX_MODE7)/* LCD_DATA13_GPIO0_9 *
/ 0x01C_GPIO0_IN_PULL_0_PIN_0_100 */0x0_GPIO0_PIN_MODE7
(
*)/0x24_MODE0_IN_PIN_MODE0_IN_IN_PUT_IN_IN_PUT_MODE0)

*= 0x0_GPIO0_GPIO0_PUT_PUT_PUT_MODE_IN_PUT_IN_IN_IN_IN_PUT_MODE7

)*(*/0x

(PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_AD12.GPIO1_12 */
0x008 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_AD2.GPIO1_2 *
/ 0x07C (PIN_OUTPUT | MUX_MODE7)/* GPMC_AD2* 0x07_PIN_MODE80
(0x7_MUS_M078)/GPMC_IN_MOUX_1*
输出
/* GPMC_be1n.GPIO1_28 */
0x000 (PIN_OUTPUT | MUX_MODE7)/* GPMC_ad0.GPIO1_0 */
0x004 (PIN_OUTPUT | MUX_MODE7)/* GPMC_ad1.GPIO1_1 *
0x014 (PIN_OUTPUT | M011_MODE7

)*/GPMC_MODE7 (GPMC_018*/GPMC_MODEV_018*/GPMC_018*)/GPMC_018*(GPMC_MODE7)/GPMC_018_PIN_MODE7)*/GPMC_MODE7 (GPMC_MODEV_018*/GPMC_MODEUX_018*/GPMC_OUTPUT */GPMC_018_015_
(PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_A4.GPIO1_20 */
0x054 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_A5.GPIO1_21 *
/ 0x040 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPIO7_IN_038*/GPMC_A5.14_IN_MODE7
(0x74_MODE16
)/GPMC_IN_IN_MODE7)/GPMC_IN_IN_MOUX_IN_MODE7)
/* GPMC_A11.GPIO1_27 */
>;

};

my_GPIO2_PINS_DEFAULT:my_GPIO2_PINS_DEFAULT{
pinctrl-single、PINS =<
0x0F8 (PIN_OUTPUT | MUX_MODE7)/* mmc0_data1.GPIO2_28 *
0x0F4 (PIN_OUTPUT | MUX_MODE7)/* mmc0_data2.GPIO2_27*/
0x0E8 (PIN_OUTPUT 下拉| MUX_MODE7)/* LCD_pclk.GPIO2_24 */
0x0B4 (PIN_OUTPUT 下拉| MUX_MODE7)/0x0* LCD_MODE7_0*
(0x20_GPIO0_PIN_MODE7)/0x20_MODE7)/0x20_MOUX_GPIO0*/0x24_PIN_PIN_PIN_MODE0_PIN_MODE7)*/0x0_MODE0_MODE7 (0x20_MODE0_MODE7)*/0x24_MODE0*/0x24_PIN_PIN_MOUX_PIN_PIN_MODE7)

/* lcd_data3.gpio2_9*/
0x0F0 (PIN_INPUT_PULLUP | MUX_MODE7)/* mmc0_dat3.gpio2_26 -*/
0x0BC (PIN_OUTPLOUT 下拉| MUX_MODE7)/* LCD_ADV_IN_MDIO2_13 */0x09_IN_MIP_IN_IN_IN_094*
(0xM0_M0_M0_IN_M094_M/2_MIP_M0_PIN_M0_MODE7

)/0xM0_M0_MUX *(*/0x9V_IN_IN_IN_MDIO2_IN_IN_IN_IN_IN_IN_IN_IN_M094_M0_MODE7
(PIN_OUTPUT | MUX_MODE7)/* GPMC_be0n_cle.GPIO2_5*/
0x0B8 (PIN_OUTPUT 下拉| MUX_MODE7)/* LCD_data6.GPIO2_12 *
0x0A8 (PIN_OUTPLUP | MUX_MODE7)/* LCD_DATA6.GPIO2_12 * 0x0A8





(PIN_OUTPLU_2*)/GPIO2_MODE2*默认值*/GPU_MODE2*引脚0_GPIO2_MR_GPIO2*(_GPIO2_GPIO2_GPIO2_GPIO2_GPIO2_GPIO2_GPIO2*) my_GPIO3_PINS_DEFAULT{
pinctrl-single、PINS =<
0x1A4 (PIN_INPUT_PULLUP | MUX_MODE7)/* McASP0_FS.GPIO3_19 *
/ 0x1A0 (PIN_INPUT_PULLUP | MUX_MODE7)/* McASP0_ALFR.GPIO0_P0








(*)/PM_UART0_PUT0_PUT0_PUT_PULLUT_PULLUX0)/* 0x20_PULLUT_PULLUT_UART0_0_PUT_PULLUX0*(0x20_PUT_0_PUT_PUT_PUT_PUT_PUT_PUT_PUT_PULLUX0_PUT_PULLUX0*);*引脚0_PM_PUT0_PM_PUT0_PM_PM0_PM0_


pinmux_uart1_pins{
pinctrl-single、pins =<
0x178 (PIN_input | MUX_MODE0)/* uart1_CTSN.uart1_CTSN *
/ 0x17C (PIN_OUTPUT_PULLUD | MUX_MODE0)/* uart1_rtsn.uart1_CTS*(PIN_OUTARTHD1


)| 0x184_MODULLUT_UX0*(0x184_MODE0)*(UARTRAPULLUT_UARTxD_1)| UARTON_MOD/ UART184_OUTON_PUT 1)*(0x184_MOD/ UARTON_MODE0)* UARTON_MOD/ UARTON_



i2c0_pins:pinmux_i2c0_pins{
pinctrl-single、pins =<
0x188 (PIN_INPUT_PULLUP | MUX_MODE0)/* i2c0_sda.i2c0_sda *
0x18c (PIN_INPUT_PULLUP | MUX_MODE0)/* i2c0_SCL.i2c0_SCL *
>;
};

uart4_pins:pinmux_uart4_pins{
pinctrl-single、pins =<
0x168 (PIN_INPUT_PULLUP | MUX_MODE1)/* uart0_CTSN.uart4_RxD *
0x16C (PIN_OUTPUT 下拉| MUX_MODE1)/* uart0_rtsn.uart4_TXD *
>;
};

uart3_pins:pinmux_uart3_pins{
pinctrl-single、pins =<
0x160 (PIN_INPUT_PULLUP | MUX_MODE1)/* spi0_CS1.uart3_RXD *
0x138 (PIN_OUTPUT 下拉| MUX_MODE1)/* mii1_rxd2.uart3_TXD *
>;
};

uart5_pins:pinmux_uart5_pins{
pinctrl-single、pins =<
0x0C4 (PIN_INPUT_PULLUP | MUX_MODE4)/* LCD_data9.uart5_RXD *
0x0C0 (PIN_OUTPUT 下拉| MUX_Mode4)/* LCD_data8.uart5_TXD *
>;
};

uart2_pins:pinmux_uart2_pins{
pinctrl-single、pins =<
0x100 (PIN_INPUT_PULLUP | MUX_MODE3) /* mmc0_clk.mmc0_clk.uart2_RxD *
0x104 (PIN_OUTPUT 下拉| MUX_MODE3)/* mmc0_cmd.mmc0_cmd.uart2_TXD */
>;
};

clkout2_pin:pinmux_clkout2_pin{
pinctrl-single、pins =<
0x1b4 (PIN_OUTPUT 下拉| MUX_MODE3)/* xdma_event_int1.clkout2 *
>;
};

eMMC_PINS:pinmux_eMMC_PINS{
pinctrl-single、PINS =<
0x8C (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_clk.mmc2_clk *
0x88 (PIN_INPUT_PULLUM_PULLUP)/* GPMC_3_MODE3*




(0xMC_3_MMC_INPUT)/0x3_MODE3*/0xMC_MODON_MODE3)*输入/0xMC_MODE3*输入/0xMC_3_MODE3 (0xMC_3_MODE3)
};

cpsw_default:cpsw_default{
pinctrl-single、pins =<
/* Slave 1 */
0x10c (PIN_INPUT 下拉| MUX_MODE1)/* mii1_cr.rmi1_d1_drx *
(PIN_IN_INPUT)/0x1_MODIUX_1* 0x1_MODIRECT_1*


(0x1_1_1_MODIRECT_1_1*)
/* mii1_rxd1.mii1_rxd2 */
0x140 (PIN_INPUT 下拉| MUX_MODE1)/* mii1_rxd0.mii1_rxd0 */
0x144 (PIN_INPUT 下拉| MUX_MODE0)/* rmii1_REFCLK
> rmiCLK;
}* rmiCLK_rbleep

;* rmisn_rf1 cpsw_sleep{
pinctrl-single、pins =<
/*从器件1复位值*/
0x10c (PIN_INPUT 下拉| MUX_MODE7)
0x110 (PIN_INPUT 下拉| MUX_MODE7)
0x114 (PIN_INPUT_MODE7





)| MUX 输入0x140 MODEUX_INPUT 下拉|


输入0x144_MODEUX_MODEUX_7 (PIN_MODEUX_MODE7)|输入0x140 MODEUX_MODEUX_MODEUX_MODEUX_INPUT 下拉|输入0x140 (0x14_MODEUX_MODEUX_MODEUX_MODE7)|输入:0x14_MODEUX_MODEUX_MODEUX_MODEUX_MODEUX_MODEUX_MODEUX_MODE DaVinci_MDIO_DEFAULT{
pinctrl-single、pins =<
/* MDIO */
0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)/* MDIO_DATA.MDIO_DATA *
/ 0x14c (PIN_OUTPLUG_PULLUP | MDIO_PULLUG_DDIO)/* MDIO_RESPULT




=

0x14c | 0x14c + MDIO_PUT_PUT (0x148)* MDIO_PUT_PUT_PUT = 0x14x + MDIO = 0x14x + MDIO_P/ MDIO_Pn)




| MDIO_RESPON_PUT = 0x14x (0x14x + MDIO_PON_PON_PON_DON_PON_PON_ pinmux_spi0_pins{
pinctrl-single、pins =<
0x150 (PIN_INPUT_PULLUP | MUX_MODE0)/*(A17
) spi0_SCLK.spi0_SCLK */ 0x154 (PIN_INPUT_PULLUP | MUX_MODE0)/*(B17) pult0_0_spi0_MODE0


)/*


默认值*(0x158_0_MODE0)/* 0_PUT_D0_PUT_0_D0_PUT_0_PUT_0_PUT_0_PUT_PUT_0_PUT_0_PUT_PUT_PUT_D0) ecap0_PINS_DEFAULT{
pinctrl-single、PINS =<
0x164 (PIN_OUTPUT | MUX_MODE0)/*(E18) eCAP0_IN_PWM0_OUT.eCAP0_IN_PWM0_OUT *
;
};

ehrpwm0_PINS:pmux_ePWM0_OUT0

(
*)/ehrm0_m0_m0_m0_mUn)

*(0_m0_mr_mu_mu_mu_muxx)

pinmux_ehrpwm1_pins{
pinctrl-single、pins =<
0x0C8 (PIN_OUTPUT | MUX_mode2)/*(U3) LCD_data10.ehrpwm1A */
0x0CC (PIN_OUTPUT | MUX_Mode2)/*(U4) LCD_data11.ehrpwm1A *
)


*/ 0x0CC (PIN_output| MUX_mode2) pwm2)*> pwrwm2;}phrpwm2: pinmux_ehrpwm2_pins{
pinctrl-single、pins =<
0x0A0 (PIN_OUTPUT | MUX_MODE3)//(R1) LCD_Data0.ehrpwm2A */
0x0A4 (PIN_OUTPUT | MUX_MODE3










)//(R2) LCD_data1.ehrpwm2A *=默认
值;}"uartpintrl"=
0 ="uartpin 0;"uincruategin 1 =默认值;"uattrl"="uinuattrl" 1 ="uinuinuinuinuattrl";"uatning1 ="uinuatning1;"uinuinuatning1 = ning2 =";"=
状态="确定";
}

;&uart2{
pinctrl-names ="默认值";
pinctrl-0 =<&uart2_PINs>;
状态="确定";
};

&uart3{
pinctrl-names ="default";
pinctrl-0 =<uart3_PINs>;
状态="确定";
};

uart4{
pinctrl-names ="default";
pinctrl-0 =<uart4_PINs>;
状态="确定";
};

uart5{
pinctrl-names ="default";
pinctrl-0 =<&uart5_PINs>;
状态="确定";
};

&i2c0{
pinctrl-names ="default";
pinctrl-0 =<&i2c0_PINs>;
状态="正常";
时钟频率=<400000>;

tlv320aic3106:tlv320aic3106@18{
兼容="ti、tlv320aic3106";
reg =<0x18>;
ai3x-micbias vg =<1>;
状态="正常";

/*稳压器*/
AVDD-SUPPLY =<&core_audio_supply>;
IOVdd-supply =<&core_audio_supply>;
DRVDD-SUPPLY =<&core_audio_supply>;
DVDD-SUPPLY =<&IO_AUDIO_SUPPLY>;
};

pcf8563:pcf8563@51{
兼容="NXP、pcf8563";
reg =<0x51>;
};
};


&mmc3{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&eMMC_PINs>;
VMMC-SUPPLY =<&vmmcsd_fixed>;
总线宽度=<4>;
ti、不可拆卸;
DMA =<&EDMA_Xbar 12 0 1
EDMA_Xbar 13 0 2>;
dma-names ="TX"、"Rx";
}

;_tscadc{
状态="正常";
TSC{
TI、电线=<4>;
ti、x 板电阻=<200>;
ti、坐标读数=<5>;
TI、wire-config =<0x00 0x11 0x22 0x33>;
};
ADC{
TI、ADC 通道=<4 5 6 7>;
};
};

&Mac{
Slave =<1>;
pinctrl-names ="default"、"sleep";
pinctrl-0 =<&cpsw_default>;
pinctrl-1 =<&cpsw_sleep>;
状态="确定";
}

;达芬奇_MDIO{
pinctrl-names ="默认"、"睡眠";
pinctrl-0=<&Davinc_MDIO_default>;
pinctrl-1 =<&Davinc_MDIO_SLEEP>;
状态="确定";
};

&cpsw_emac0{
phy_id =<&Davinci_mdio>、<0>;
phy-mode ="RMII";
}

;&phy_SEL{
RMII-clock-ext;
};

&RTC {
系统电源控制器;
};

/*
&LCDC {
状态="确定";
};
*

/&SGX{
状态="确定";
};

&USB{
状态="确定";
}

;&USB_CTRL_mod{
状态="确定";
};

/usb0_phy{
状态="确定";
};

&USB1_phy{
状态="确定";
};

/usb0{
状态="正常";
DR_MODE ="外设";
};

&USB1{
状态="正常";
DR_MODE ="主机";
};

&cppi41dma{
状态=“确定”;
};//


* SPI 闪存(1Mib)
* 0x000000 - 0x01FFFF:SPL (128KiB)
* 0x020000 - 0x09FFFF:U-Boot (512KiB)
* 0x0A0000 - 0x0BFFFF:U-Boot 环境(128KiB)的第一个副本
* 0x0C0000 - 0x0DFFFF: U-Boot 环境(128KiB)的第二个副本
*
/&spi0{
pinctrl-names ="默认值";
pinctrl-0 =<&spi0_PINs>;
状态="确定";

闪存:s25fl064k@0{
#address-cells =<1>;
#size-cells =<1>;
compatible ="st、sfl064k"
;<25fall-cells =<2564k>;<2564k>=<25frequency
=<1000000;<25frequency =


分区@0{
标签="u-boot-spl";
reg =<0x000000 0x020000>;
}


;分区@1{
标签="u-boot";
reg =<0x020000 0x080000>;
};

分区@2{
标签="env1";
reg =<0x0A0000 0x010000>;
}

;分区@3{
= 0xenec0000 = 0xenv0\







};状态="env0env0"};

eCAP@48300100{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&ecap0_PINS_DEFAULT>;
};

ehrpwm0:ehrpwm@48300200{
status ="确定";
pinctr-names ="默认值";
pinctrl-0 =<&rmrmpnings>

;}

epwmss1{
status ="确定";

ehrpwm1:ehrpwm@48302200{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&ehrpwm1_PINs>;
};
};


epwmss2{
status ="确定";

ehrpwm2:ehrpwm@48304200{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&ehrpwm2_PINs>;
};
}; 

我尝试使用来控制用户空间中的引脚



Echo 91 >/sys/class/gpio/export
Echo 92 >/sys/class/gpio/export 

回显>/sys/class/gpio/gpio91/direction
回显>/sys/class/gpio/gpio92/direction 

回声1 >/sys/class/gpio/gpio91/value 
echo 0 >/sys/class/gpio/gpio92/value 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 ICON Thomas:

    您可以在以下位置找到有关如何在用户空间(sysfs 控制)中控制 GPIO 的说明:
    processors.wiki.ti.com/index.php
    但您应注意以下注意事项:
    注意:驱动程序中已使用的 GPIO 无法通过 sysfs 进行控制、除非驱动程序导出该特定引脚。

    BR
    Tsvetolin Shulev