基于omap3530/dm3730的开发板,LINUX系统,GPIO能写不能读

2019-03-24 12:06发布

这个芯片,属于达芬奇系列,应该可以归入STELLARIS里吧。
是这样的,我手头的这块是一个dm3730的开发板,beagleboard系列。
我们在上面跑的是LINUX系统。然后开发是通过PC机上上的VM(威瑞)交叉编译,然后下载到板子上运行。现在在做一个GPIO的控制,之前做过串口传输协议。
但是,我用了几种方法,都是同一样的问题,就是 只能写不能读。
因为最近才在弄,今天截止——做不了只好先放下了。所以到现在才发帖咨询,已经错过了 问倒TI专家团 的时间,但还是希望能得到各位TI专家的帮忙。
为了更仔细说明白,发帖前我写了一个文档,下面贴出来。可能有点长,写写各位了!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
辛昕
2019-03-24 14:23
这一个在OMAP3530/DM3730 ARM A8平台上,LINUX系统下,对GPIO的操作。我只是想实现简单的读写功能。
目前可以做到写,写0写1都可以。
但是读遇到了麻烦。
就是,设置为 读 的方向以后,一直没法读取状态,尽管该IO口上的的确确就是1.8V的高电平。

前后我大致使用了三种方法,一种未遂,两种只能写。

三种方法是
1 在LINUX文件系统下,有一个/sys/class/gpio文件夹,在这里可以申请GPIO口,并通过相应文件,直接操作GPIO口。这个只能写。
2 使用OMAP的头文件,但是一直不知为何没办法使用。属于 未遂。
3 通过LINUX内核,写GPIO驱动,加载入内核。再跑用户态程序,结果,还是只能写不能读。

第一种方法,操作过程其实很简单:
进入该文件夹
Cd /sys/class/gpio

申请相应Io口,比如我申请161
Echo 161 > export

检查是否生成 gpio161文件夹,有则进入。
假如不存在,说明这个Io口已经被占用,不能申请。

向direction写方向,注意这些文件都不可以通过VIM打开直接写,只能用echo 命令

Direction可写的选项有 high low out in
具体细节可以查百度。

然后是读写value,读IO时,读,写IO时,是写VALUE,当然,写的情况,可以通过direction一次完成。

但是,问题就是,写IO口的时候好好的,但是没法读。
Value里一直是0,哪怕IO端口就是1.8V。

这个时侯我们搜索了,但是一直没有找到有建设性的东西。
除了看到有的资料里说,要设置为 允许输入 或者类似于 允许改变Io口的方向(就是允许改变读和写的状态。)

但是那些大多数是用了一些头文件,类似于gpio.h之类的,问题是这个文件我从来就没用上。后来,使用第三种方法后,能用内核的gpio.h后,好像就找不到那个资料了,后悔当时没保存,怎么设都没用。
到了后来,当我写驱程,加载入内核,还是发现这个问题以后,我开始怀疑,所有问题都在于一个 设置允许输入的地方,只可惜,我怎么都找不着这个地方。
在系统里的某个文件或者某个位置?还是通过某条指令?
让我奇怪的是,在网上海搜了关于GPIO的东西,居然都没看到。

2 第二种方法,我想用gpio.h这个头文件,用一些系统的子函数直接操作gpio。
后来搜了整个虚拟机系统,找到了一个名字带omap的头文件,心想这个应该跟我的开发板有关系,于是就使用这个。

用过-I 命令。结果没用
甚至我把它拽进交叉编译器的默认路径,还是没用。
这个没用需要仔细说明一下:就是说,已经找到了这个gpio.h,但是附带了更多的找不到,我看了一下,这些都是在gpio.h中加的头文件。
于是我试过一个一个加进去,结果问题往下越来越恐怖,找不到的头文件越来越多,我终于放弃了这种方法。

3 第三种方法,就是写驱动,在tuxygood的帮助下——或者直接说就是他手把手教我的得了。
我总算用上了这个系统自带的gpio.h,不过不是那个什么omap就是了,我心想先用着再说——我之所以无视这一点,还有一个原因:如果我能够在系统的/sys/class/gpio下,(写是没问题的)操作GPIO,那就应该可以理解为,它似乎与硬件平台无关?

这个过程怪复杂的,我很难说清楚,不过当时,我把tuxygood教我的东西,我把聊天记录整理成了一个文档,一会附上。

很可惜的是,问题依然是,可写不可读。

一周热门 更多>

相关问题

    相关文章