万物都从点灯开始
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
这样就完成点灯啦~
参考直接控制,也可以通过各种编程语言去操作文件,从而达到硬件控制。
解释一下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系统,重新弄起来。