【萌新入门】如何编写一个应用程序,调用Tina Linux提供的GPIO驱动,实现某个GPIO脚的电平周期反转
-
最近在跟着韦老师的视频学习Linux驱动开发,根据韦老师的视频教程: 想编写一个D1-H哪吒开发板的GPIO驱动测试程序,实现某个GPIO脚的电平周期反转。去../drives/gpio文件夹下找了一下GPIO驱动,发现有好多文件,不知道这些文件都对应的啥意思,也没有找到上图中说的open/write/read函数。请各位大佬指点。
-
有四个方法,第一个是使用sunxi-gpio提供的接口。这个接口使用比较方便,灵活,但是必须是sunxi平台的才能用。
另外一个方法是用<asm/gpio.h>提供的操作,先申请GPIO,然后绑定到一个功能上,再操作。有点像arduino的设置pinMode然后digitalwirte
还有一个方法是使用文件操作,export出gpio用echo操作高低电平
最后一个方法是内存映射,使用<dev/mem>的mmap直接操作对应的内存空间 -
建议先按裸奔流程来, 可以用对照芯片手册,设置这几个寄存器,就可以驱动对应的gpio了。
linux shell 配合 devmem 命令可以直接操作寄存器。
如果自己DIY GPIO 就按韦老师教程的流程,然后用函数操作上面寄存器即可。
-
-
@yuzukitsuru 请教下,这几种速度怎么样,我在用户态调用SYSFS接口,太慢了,是不是操作IO还是在内核态写驱动,暴露接口给用户态更合适?
-
@lgkgkfg 是,在内核控制更方便些,不过一些高速操作都使用高速外设了
-
@yuzukitsuru 在 【萌新入门】如何编写一个应用程序,调用Tina Linux提供的GPIO驱动,实现某个GPIO脚的电平周期反转 中说:
@lgkgkfg 是,在内核控制更方便些,不过一些高速操作都使用高速外设了
我也请教一下
tina SDK关于GPIO的参考文档里给出的介绍
如图,上面的这个gpio编号如何计算。例如PC1口。
另外我编译ko文件时没有这个<mach/gpio.h>(抄的V853的led驱动头文件引用) -
@the_qiang D1是RISCV,与ARM的不太一样,没有先删了看看能不能编译过,能就没问题
编号计算:全志引脚计算器 AllwinnerPin 小工具发布
https://bbs.aw-ol.com/topic/1166/share/1 -
@yuzukitsuru 在 【萌新入门】如何编写一个应用程序,调用Tina Linux提供的GPIO驱动,实现某个GPIO脚的电平周期反转 中说:
@the_qiang D1是RISCV,与ARM的不太一样,没有先删了看看能不能编译过,能就没问题
编号计算:全志引脚计算器 AllwinnerPin 小工具发布
https://bbs.aw-ol.com/topic/1166/share/1感谢大佬,是我向太复杂了,真就是你另一个标题里的PC1 = ('C'-'A')*32+1
-
@yuzukitsuru 大佬,我再问俩问题,
像gpio_direction_output()这一类gpio操作的函数,延迟是什么级别的 能达到<5us嘛
不修改设备树的情况下,单字符驱动,不用虚拟总线,直接使gpio_request()可以达到操作dht11,ds18b20之类的要求吗 -
@the_qiang 使用i2c外设,可以到800K
-
@yuzukitsuru 就是说这个gpio_direction_output()的响应速度不能满足dht11这类对时序要求高的传感器嘛?
方便一点的办法是使用I2C设备来传嘛 -
@the_qiang 是,超过100k的都用外设
-
@whycan 请教一下,我使用devmem2会报总线错误呢, 基地址是 0x0300b000
root@TinaLinux:/mnt/UDISK# devmem2 0x0300b024
/dev/mem opened.
Memory mapped at address 0x7f7eea5000.
Bus error -
@shuai-yin 用sunxi_dump
-
@whycanservice 是的,使用sunxi_dump是OK的。非常感谢您的回答
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号