高通平台中gpio简单操作和调试
来源:互联网 发布:qq群淘宝客如何赚钱 编辑:程序博客网 时间:2024/04/30 08:04
版权声明:本文为博主原创文章,未经博主允许不得转载。
做底层驱动免不了gpio打交道,所以对其操作和调试进行了一下简单的梳理
一、gpio的调试方法
在Linux下,通过sysfs,获取gpio状态,也可以操作gpio。
1、获取gpio状态
cd /sys/kernel/debug/
cat gpio
2、操作gpio(以gpio99为例)
cd /sys/class/gpio/
echo 99 > export
cd gpio99
echo in/out > direction //设置gpio输入或输出
cat direction //获取gpio输入输出状态
echo 'value' > value //设置gpio寄存器值
cat value //获取gpio寄存器的值
二、在kernel代码中操作gpio
在代码中有两种方式操作gpio,一种是一次申请单个gpio,成功后操纵该gpio,另一种是使用pinctrl,通过设备树设置,一次操作多个gpio。
1、方法一
设备树设备节点中添加gpio //可选
device_node {
...
gpio_name = <&tlmm 99 0>; //gpio_99
...
}
驱动代码:
int gpio_99 = of_get_named_gpio_flags(dev->of_node, "gpio_name", 0, NULL); //从设备数节点, 可选
gpio_request(gpio_99, "gpio_name"); //通过gpio号申请gpio
gpio_direction_output(gpio_99, 1); //设置gpio_99输出,初始值为1
gpio_set_value(gpio_99, 0); //设置gpio_99值为0
gpio_free(gpio_99); //gpio_99不再使用后应当释放
注:
gpio的申请和设置都可能会出现失败的情况,应该做好异常处理
2、方法二
设备树代码:
平台pinctrl节点下添加如下子节点:
相关文档和设备树配置详解见kernel/Document/pinctrl.txt和Documentation/devicetree/bindings/pinctrl/下多个文件
gpio_group {
gpio_active: gpio_active {
mux {
pins = "gpio99", "gpio98"; //复用引脚99和98
functions = "gpio"; //引脚功能配置为普通gpio
};
config {
pins = "gpio99", "gpio98";
drive-strength = <8>; //最大电流限制为8mA
bias-pull-up; //配置上拉
output-high; //输出高电平
};
};
gpio_sleep: gpio_sleep {
mux {
pins = "gpio99", "gpio98"; //复用引脚99和98
functions = "gpio"; //引脚功能配置为普通gpio
};
config {
pins = "gpio99", "gpio98";
drive-strength = <2>; //最大电流限制为2mA
bias-no-pull; //不上拉也不下拉
output-low; //输出低电平
};
};
设备节点中引用pinctrl:
device_node {
...
pinctrl-names = "gpio_active", "gpio_sleep"; //分别对用pinctrl-0和pinctrl-1
pinctrl-0 = <&gpio_active>; //引用
pinctrl-1 = <&gpio_sleep>; //引用
...
};
内核驱动代码:
struct pinctrl *pinctrl = devm_pinctrl_get(device); //获取device对应节点下的pinctrl
struct pinctrl_state = pinctrl_lookup_state(pinctrl, "gpio_active"); //通过pinctrl名获取pinctrl对应状态
pinctrl_select_state(pinctrl, pinctrl_state); //设置pinctrl的状态为'gpio_active
devm_pinctrl_put(pinctrl); //使用完了释放资源
也可以同时使用方法一和方法二,方法一操作简单,但是只能拉高或拉低,而方法二可全面配置GPIO。在一个设备驱动中同时使用方法一和方法二可保证资源不被其他模块操作。
- 高通平台中gpio简单操作和调试
- 高通平台中gpio简单操作和调试
- 高通平台中gpio简单操作和调试
- 配置学习总结高通平台GPIO
- 高通平台中简单了解DTB
- 高通平台camera调试
- 高通平台camera调试
- camera调试(高通平台)
- 高通平台LCD调试
- 高通平台USB调试指南和设计
- x86平台GPIO调试注意事项
- 高通 msm平台GPIO相关的device tree设置
- 高通平台gpio在dst中的配置
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- android lcd调试 高通平台lcd调试深入分析总结(mipi和rgb接口)
- Java高级工程师应该知道的25点
- 销售人员尊重客户的五个细节
- 电路图这么画,不怕你学不会
- 如何使用 Azure PowerShell 在 Azure Marketplace 中查找 Windows VM 映像
- xgboost 自定义评价函数(metric)与目标函数
- 高通平台中gpio简单操作和调试
- 关于字符串转换成json的总结
- AWS DeepLens 亚马逊深度学习视频摄像头
- CCF 模板生成系统
- oracle自带数据库相关sql语句练习
- Dropdown by index in ALV using in Web Dynpro
- 关于CM3内核堆栈8字节对齐
- 在Eclipse中创建Maven多模块工程的例子
- 串行总线---差分互连(差分线)之共模、奇模、偶模