官方f1c100s文档中并没有有关外设的操作说明,我是借用的zero的文档做的。
使用sysfs操作GPIO的例子:
#echo 192 > /sys/class/gpio/export #导出 PG0, GREEN
#ls /sys/class/gpio/
export gpio192 gpiochip0 unexport
#ls /sys/class/gpio/gpio192/
active_low direction subsystem/ value device/ power/ uevent
#echo "out" > /sys/class/gpio/gpio192/direction #设置为输出
#echo 0 > /sys/class/gpio/gpio192/value #亮灯
#echo 1 > /sys/class/gpio/gpio192/value #灭灯
#echo "in" > /sys/class/gpio/gpio192/direction #设置为输入
#cat /sys/class/gpio/gpio192/value #读取电平
0
但是我执行echo 46> /sys/class/gpio/export后,成功生成gpio46文件夹,但是执行echo "out" > /sys/class/gpio/gpio46/direction时出错了
sh: write error: Unknown error 517
我用vi编辑direction文件也照样不能写入,这是什么坑?
最近编辑记录 kekemuyu (2019-05-19 18:15:43)
离线
GPIO46 = PB12
实际上手册上面没有这口, 而且 pio 里面也没有注册这个口:
https://github.com/torvalds/linux/blob/master/drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c
https://whycan.cn/files/members/1149/F1C500_Datasheet_V1_0.pdf
离线
难道是我手册看错了,我看的是pe3是46
离线
我说错了,是datasheet,这是licheepi官方的,PE3的gpio不是46吗?
离线
手册里面的序号不是gpio的编号
gpio的编号是设备树里面定义的吧
离线
手册里面的序号不是gpio的编号
gpio的编号是设备树里面定义的吧
找到问题了,在zero的文档里有说明:
在Linux中,GPIO 使用0~MAX_INT之间的整数标识。
对于32位CPU,每组GPIO 32个,引脚号就是按顺序排列。
从PA0开始gpio是0,那么PE3对应是32*4+3=131,经试验已验证
离线
楼上的兄弟,谢谢!
离线
/sys/class/gpio/gpio192/
请问如何通过这个接口设置 io 的上拉或者下拉呢?
# mount -t debugfs none /sys/kernel/debug
#
# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-223, parent: platform/1c20800.pinctrl, 1c20800.pinctrl:
gpio-64 ( |sysfs ) out lo
gpio-65 ( |sysfs ) out hi
gpio-66 ( |sysfs ) out lo
gpio-67 ( |sysfs ) out lo
gpio-68 ( |sysfs ) out hi
gpio-69 ( |sysfs ) out hi
gpio-70 ( |sysfs ) out hi
gpio-71 ( |sysfs ) out hi
gpio-72 ( |sysfs ) in hi
gpio-108 ( |sysfs ) out lo
gpio-109 ( |sysfs ) out lo
gpio-110 ( |sysfs ) out lo
gpio-111 ( |sysfs ) out lo
gpio-112 ( |sysfs ) out lo
gpio-113 ( |sysfs ) out lo
gpio-114 ( |sysfs ) out lo
gpio-115 ( |sysfs ) out lo
gpio-192 ( |serial_rts ) out lo
gpio-193 ( |serial_rts ) out lo
gpio-196 ( |usb0_id_det ) in lo IRQ
gpio-201 ( |sysfs ) in hi
#
#
#
现在有些是上拉的, 有些是下拉的.
离线
V3s 直接用 devmem 写寄存器解决吧:
#PC_PULL0_CFG
devmem 0x01c20864 32 0x55555555
#PD_PULL0_CFG / PD_PULL1_CFG
devmem 0x01c20888 32 0x55555555
devmem 0x01c2088C 32 0x55555555
#PG_PULL0_CFG
devmem 0x01c208F4 32 0x55555555
离线
基础地址+偏移,举个例子:PB2, 1*32+2=34
离线
想问一下,我现在想做一个按键点亮LED等的操作,应该怎样写程序呢
感觉无从下手,大佬们能否指教一下
离线
我也是,现在在玩F1c200s,看了官方的手册,也是感觉无从下手的感觉,感觉国产SOC做的资料太拉垮了,stm32的gpio描述甩这些一大截。
离线
我也是,现在在玩F1c200s,看了官方的手册,也是感觉无从下手的感觉,感觉国产SOC做的资料太拉垮了,stm32的gpio描述甩这些一大截。
我研究了几天,做得差不多了,我用的是sysfs的驱动,export了接口,然后一直读接口,读到值之后写接口
编译烧录这些,我反而搞了一轮,觉得没啥搞头,搞来搞去嘛,好像也成不了什么事
离线
@jiabuda
这种方式已经被淘汰了,现在6.0内核那个程序挺好用的,libgpiod
离线