目录
概述
1 GPIO接口介绍
2 板卡上操作IO
2.1 查看IO驱动
2.2 使用ECHO操作IO
2.2.1 端口选择
2.2.2 查看IO
2.2.3 echo操作IO
3 C语言实现一个操作IO的案例
3.1 功能介绍
3.2 代码实现
3.3 详细代码
4 测试
测试视频地址:
IOT-9608I-L的一个简单测试,官方不提供源码内核,说是驱动程序已经做好了,直接用就行。
概述
本文主要IOT-9608I-L 的GPIO的一般操作方法,IoT-9608已经实现lIO相关的driver,开发者只需调用相应的接口,就可以实现配置IO为输出或者输入、以及置高或者置低操作。
1 GPIO接口介绍
IoT-9608提供了多路通用数字I/O接口,连接器为2×10Pin, 2.54mm间距的简易牛角座,
主板上的标志为“GPIO”。
板卡上的编号 | 处理器 IO | Linux 驱动的编号 |
---|---|---|
P0.2 | GPIO0_2 | gpio2 |
P0.3 | GPIO0_3 | gpio3 |
P0.8 | GPIO0_8 | gpio8 |
P0.9 | GPIO0_9 | gpio9 |
P0.10 | GPIO0_10 | gpio10 |
P0.11 | GPIO0_11 | gpio11 |
P1.28 | GPIO1_28 | gpio60 |
P2.20 | GPIO2_10 | gpio74 |
2 板卡上操作IO
2.1 查看IO驱动
GPIO 的全部操作通过/sys/class/gpio 目录下的文件来完成。该目录下提供了 GPIO 的相关操作接口。该目录下默认有如下文件。使用如下命令查看IO信息:
ls /sys/class/gpio/ -l
执行命令后,系统会列出IO的驱动信息
2.2 使用ECHO操作IO
2.2.1 端口选择
笔者选择gpio10作为测试端口,板卡上再该端口连接一个LED,通过观察LED的状态变化,以确定IO端口的状态。
板卡上的编号 | 处理器 IO | Linux 驱动的编号 |
---|---|---|
P0.10 | GPIO0_10 | gpio10 |
2.2.2 查看IO
需要操作某个 GPIO,只需操作 gpioN 里面的文件即可。例如操作 gpio10,首先进入gpio10 目录,查看里面可操作的文件:
cd gpio10ls
2.2.3 echo操作IO
direction 用于设置或查询 GPIO 的方向,可能值为“in” 或者“out”,分别表示输入或者输出; value 表示 GPIO 的电平值,在输入模式下表示该引脚的电平(0 或者 1),在输出模式下表示写入该引脚的值(0 或者 1)。
1) 设置IO为输出端口
echo out > direction
设置IO 为高电平
echo 1 > value
设置IO 为低电平
echo 0 > value
2) 设置IO为输入端口
echo in > direction
读取IO的值
cat value
测试读取IO值功能
state-1: 将IO连接上一个高电平,读取IO的值
state-2: 将IO连接上一个高电平,读取IO的值
3 C语言实现一个操作IO的案例
3.1 功能介绍
使用C语言编写一个案例,控制IO输出端口IO电平的变化,软件流程如下:
1)配置IO为输出模式
while( cnt > 0 )
{
1)设置IO端口为高电平,延时1s
2) 设置IO端口为低电平,延时1s
cnt --
}
3.2 代码实现
代码介绍
代码第17行: 进入到该驱动文件夹
代码第20行:使能IO操作
代码第24行:设置IO为输出
代码第29行:设置IO为高电平
代码第33行:设置IO为低电平
3.3 详细代码
/***************************************************************
Copyright 2024-2029. All rights reserved.
文件名 : IOT_9608_IO_Test.c
作者 : tangmingfei2013@126.com
版本 : V1.0
描述 : IOT_9608 IO端口测试程序
其他 : 无
日志 : 初版V1.0 2024/04/23
***************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#include <time.h>int main(void)
{int count = 10;if(access("/sys/class/gpio/gpio10/value",F_OK) != 0){/* enable IO port */system("echo 10 > /sys/class/gpio/export"); }/*set IO as output */system("echo out > /sys/class/gpio/gpio10/direction");while( count-- ){/* turn on led */system("echo '1' > /sys/class/gpio/gpio10/value");sleep(1);/* turn off led */system("echo '0' > /sys/class/gpio/gpio10/value");sleep(1);}}/* End of this file */
4 测试
编译代码,然后将生成的.bin文件共享到NFS目录,然后在板卡中运行。
1)编译代码
2)板卡上运行程序