当前SOC 一共包含5 个 GPIO 控制器,分别是:GPIO1,GPIO2,GPIO3,GPIO4,GPIO5。在这里,分别是gpiochip0 、gpiochip32 、gpiochip64 、gpiochip96 、gpiochip128 这5个文件夹,每个gpiochipX 文件夹用来管理一组GPIO。
export:
export用于将指定编号的GPIO 引脚导出。在使用GPIO 引脚之前,需要将其导出,导出成功之后才能使用它。注意export 文件是只写文件,不能读取,将一个指定的编号写入到export 文件中即可将对应的GPIO 引脚导出,例如:
echo 0 > export #导出编号为0的GPIO 引脚。对应当前SOC,也就是GPIO1_IO0。
导出成功之后会发现在/sys/class/gpio 目录下生成了一个名为gpio0 的文件夹(gpioX, X 表示对应的编号)。这个文件夹就是导出来的GPIO 引脚对应的文件夹,用于管理、控制该GPIO 引脚。
unexport:
unexport将导出的GPIO 引脚删除。当使用完GPIO 引脚之后,我们需要将导出的引脚删除,同样该文件也是只写、不可读的。例如:
echo 0 > unexport # 删除导出的编号为0的GPIO 引脚1
删除成功之后,之前生产的gpio0 文件夹就会消失。
导出引脚echo export:
向/sys/class/gpio/export写入此编号,比如10号引脚,在shell中可以通过以下命令实现,
echo 10 > /sys/class/gpio/export
命令成功后生成/sys/class/gpio/gpio10目录,
如果没有出现相应的目录,说明此引脚不可导出。
设置gpio的direction:
direction文件,定义输入输入方向,可以通过下面命令定义为输出
echo out > /sys/class/gpio/gpio10/direction
direction接受的参数:in, out,
三.内核空间控制gpio
Linux pinctrl 子系统:
复用gpio2 PB1为gpio功能:
cam {
/omit-if-no-ref/
cam_pow_en: cam-pow-en {
rockchip,pins = <2 RK_PB1 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
上下拉配置:
//上拉
pcfg-pull-up
//下拉
pcfg-pull-down
linux gpio子系统:
gpio_request函数:
int gpio_request(unsigned gpio, const char *label);
gpio:要申请的gpio标号(可以通过gpio bank计算得来)。
label:要申请的gpio取的名字。
可通过cat /sys/kernel/debug/gpio 命令查看gpio是否申请成功。
gpio_free函数:
void gpio_free(unsigned gpio)
gpio:要释放的gpio标号。
**gpio_direction_input函数:**此函数用于设置某个GPIO为输入
int gpio_direction_input(unsigned gpio)
gpio:要设置为输入的GPIO标号
**gpio_direction_output函数:**此函数用于设置某个GPIO为输出
int gpio_direction_output(unsigned gpio, int value)
gpio:要设置为输出的GPIO标号
value:GPIO默认输出值
**gpio_get_value函数:**此函数用于获取某个GPIO的值(0或1)
int __gpio_get_value(unsigned gpio)
gpio:要获取的GPIO标号
**gpio_set_value函数:**此函数用于设置某个GPIO的值
void __gpio_set_value(unsigned gpio, int value)
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!
网开发知识点,真正体系化!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新!!