本帖最后由 小王嵌入式 于 2023-8-11 17:19 编辑

万物都从点灯开始

FV2开发板也不例外,在linux操作系统中一般对于gpio的操作都是对于GPIO子系统的。

首先确保内核系统编入了gpio子系统,或是你想要控制的设备驱动子系统。(一般来说,如果使用厂商的linux镜像烧录的,设备驱动子系统一般是完善的,不需要我们操心,只需要直接控制就好)

接下来介绍一下控制流程:


准备 :

1使用官方镜像Debian,烧录到SD卡,并使用SD卡启动。

2 面包板,杜邦线,led,电阻。

3 熟悉 linux常用的操作指令。:

cd 进入路径

ls 查看当前列表的文件

> 覆盖写入内容

>> 追加写入内容


从本质上看,在linux的操作系统中操作外设,实际上就是对文件的读写。


一切皆文件


对于linux的gpio控制流程:

1 进入gpio子系统内

cd  /sys/class/gpio


2 查看当前目录下的文件或文件夹

ls

打印出:

export  gpiochip0  gpiochip64  unexport

3 把要使用的gpio port 导出到用户空间

echo 44 > export

如果出现export: Permission denied,需要登录root去操作。

3.1 登录 root 账户

su root

输入密码。再使用echo 44 > export

4 进入gpio44文件下设置gpio44 的属性。

cd gpio44

5 direction 文件,定义输入输入方向,可以通过下面命令定义为输出。

echo out > /sys/class/gpio/gpio44/direction

direction 接受的参数可以是:in、out、high、low。其中参数 high / low 在设置方向为输出的同时,将 value 设置为相应的 1 / 0。

6 value 文件是端口的数值,为1或0,通过下面命令将 gpio44 设置为高电平。

echo 1 > /sys/class/gpio/gpio44/value

forum.jpg

这样就完成点灯啦~


参考直接控制,也可以通过各种编程语言去操作文件,从而达到硬件控制。


解释一下gpio44下各个文件的作用和功能属性:


direction 表示gpio端口的方向,读取结果是in或out。该文件也可以写,写入out 时该gpio设为输出同时电平默认为低。写入low或high则不仅可以设置为输出 还可以设置输出的电平。 当然如果内核不支持或者内核代码不愿意,将不会存在这个属性,比如内核调用了gpio_export(N,0)就表示内核不愿意修改gpio端口方向属性


      value      表示gpio引脚的电平,0(低电平)1(高电平),如果gpio被配置为输出,这个值是可写的,记住任何非零的值都将输出高电平, 如果某个引脚能并且已经被配置为中断,则可以调用poll(2)函数监听该中断,中断触发后poll(2)函数就会返回。


      edge      表示中断的触发方式,edge文件有如下四个值:"none", "rising", "falling","both"。

           none表示引脚为输入,不是中断引脚

           rising表示引脚为中断输入,上升沿触发

           falling表示引脚为中断输入,下降沿触发

           both表示引脚为中断输入,边沿触发

                      这个文件节点只有在引脚被配置为输入引脚的时候才存在。 当值是none时可以通过如下方法将变为中断引脚

                      echo "both" > edge;对于是both,falling还是rising依赖具体硬件的中断的触发方式。此方法即用户态gpio转换为中断引脚的方式


      active_low  不怎么明白,也木有用过     


总结:经典linux gpio子系统控制,厂家也设计的比较完善,可以通过编程语言去读写文件从而去控制挂载的一些外设,比如说点灯啊,呼吸灯,pwm之类的。



问题

1 书接上回,使用Debain的GUI图形化界面时,需要散热减少卡顿。对角孔位为55m的散热器,注意需要买专用的星光2的散热器,使用普通的散热器就需要硅胶片垫起来防止倾斜。

2 在上一篇中介绍了ubuntu server 版的安装,但是好像没有适配桌面ubuntu-desktop,所以导致安装了ubuntu-desktop确无法启动起来。而且在网上也没有看到相似的例程,所以就又弄回了debian系统,重新弄起来。