TI中文支持网
TI专业的中文技术问题搜集分享网站

AM3358使用SPI0的CS管脚作为普通管脚控制LED失败

想使用SPI0的CS管脚作为普通gpio使用,控制LED闪烁。在驱动内使用

gpio_request(gpio_num,"CS_165_GPIO");

gpio_direction_output(gpio_num,0);

gpio_set_value(gpio_num,1);

申请引脚,从返回值看,申请成功,设置输出成功。

但是系统启动后,该管脚无输出波形,不可控。之后通过cat /sys/kernel/debug/pinctrl/44e…./pins查看,该引脚状态为0x62,依然为模式0输入状态,与驱动内设置为输出模式不符。不知道为什么?

之后尝试在设备树内spi引脚设置内,加入AM33XX_IOPAD(0x95c, PIN_OUTPUT | MUX_MODE7 ),重新编译,启动,该引脚才可以作为普通gpio使用,并且可以在驱动内通过gpio_set_value(gpio_num,1);控制。

疑问:要想通过gpio_set_value函数在驱动内控制某个GPIO输出,必须在设备树内通过AM33XX_IOPAD将对应引脚设置为输出么?驱动内的gpio_direction_output不是已经将其设置为输出了么,为何不行?

请问这是为什么?

大家帮分析下,谢谢。

Denny%20Yang99373:

查看一下PINMUX配置
估计在device tree里被配成CS使用了

user5217710:

回复 Denny%20Yang99373:

你好,谢谢你的回复。 dts spi节点下有一个设备,引脚设置如下 spi0_pins: pinmux_spi0_pins { pinctrl-single,pins = < AM33XX_IOPAD(0x950, PIN_INPUT_PULLDOWN | MUX_MODE0 ) //spi-clk AM33XX_IOPAD(0x954, PIN_INPUT_PULLDOWN | MUX_MODE0 ) //spi-d0 AM33XX_IOPAD(0x958, PIN_INPUT_PULLDOWN | MUX_MODE0 ) //spi-d1 >; };

像上面,并没有配置cs引脚。而此时led驱动内申请cs脚作为普通脚,然后设置输出,引脚状态无变化。

spi0_pins: pinmux_spi0_pins{pinctrl-single,pins = <AM33XX_IOPAD(0x950, PIN_INPUT_PULLDOWN | MUX_MODE0 ) //spi-clkAM33XX_IOPAD(0x954, PIN_INPUT_PULLDOWN | MUX_MODE0 ) //spi-d0AM33XX_IOPAD(0x958, PIN_INPUT_PULLDOWN | MUX_MODE0 ) //spi-d1

AM33XX_IOPAD(0x95c, PIN_OUTPUT | MUX_MODE7 )//设置cs脚为模式7,普通gpio。>;};

像上面这样,将cs脚在spi的引脚设置内 设置一下,led驱动内才可以申请并且翻转该cs引脚输出的状态。

内核设备树内其他地方并无对该cs脚的配置。

user5217710:

回复 Denny%20Yang99373:

使用这种方法
gpio_request(gpio_num,"CS_165_GPIO");

gpio_direction_output(gpio_num,0);

gpio_set_value(gpio_num,1);
在驱动内控制gpio,还需要在dts内配置相应管脚?

Denny%20Yang99373:

回复 user5217710:

需要的

user5217710:

回复 Denny%20Yang99373:

谢谢回复。

这样的话。

gpio_request

gpio_direction_output

岂不是做了多余的事情。

设备树内已经进行配置为输出,然后驱动内还配置为输出一次。

赞(0)
未经允许不得转载:TI中文支持网 » AM3358使用SPI0的CS管脚作为普通管脚控制LED失败
分享到: 更多 (0)