首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

驱动GPIO操作总结

设备驱动程序是软件概念和硬件电路之间的一个抽象层,软件操作硬件的关键就是对寄存器的操作。笔者使用的S5PV210是IO与内存统一编址的,在裸机中直接操作IO端口的物理地址,而在驱动中必须使用虚拟地址。...考虑到GPIO作为硬件资源,存在着被多个驱动使用,还有复用的问题,所以内核提供了GPIO驱动gpiolib框架来统一管控GPIO资源,gpiolib在内核中作为一个驱动所实现。...gpio_request 申请GPIO /* linux/gpio.h */ int gpio_request(unsigned gpio, const char *label) gpio: gpio编号...gpio) gpio: gpio编号,相关宏定义在linux/gpio.h中 gpio_direction_input 设置GPIO为输入模式 /* linux/gpio.h */ int gpio_direction_input...gpio) #define gpio_get_value __gpio_get_value gpio: gpio编号,相关宏定义在linux/gpio.h中 返回值: 获取的值 使用示例 if (gpio_request

86820

gpio_key按键驱动

1.gpio_key.c介绍 1.1 功能介绍 Linux内核下的 drivers/input/keyboard/gpio_keys.c实现了一个体系结构无关的GPIO按键驱动,使用此按键驱动,只需在设备树...驱动的实现非常简单,但是较适合于实现独立式按键驱动。 1.2 架构介绍 gpio-keys是基于input架构实现的一个通用GPIO按键驱动。...该驱动基于platform_driver架构,实现了驱动和设备分离,符合Linux设备驱动模型的思想。本文以自己的理解介绍gpio_keys.c驱动实现原理及代码技巧。...2.设备树 设备树节点转化成device_node.gpio_keys. c与其他驱动一样采用platform总线架构,在设备树获取硬件相关属性。 Show me the code: ?...附上驱动遍历获取设备树节点属性值代码: ?

3.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

高通GPIO驱动(DTS方式)

//设置gpio寄存器值 二、在kernel代码中操作gpio  在代码中有两种方式操作gpio,一种是一次申请单个gpio,通过设备树,成功后操纵该gpio,另一种是使用pinctrl子系统,通过设备树设置...2.1 直接操作GPIO: 因为GPIO一般都是平台设备驱动,一般设备树挂载的节点都可以在&soc下: 1 device_node { 2 ... 3...gpio_name = ; //gpio_99 4 ... 5 } 驱动代码: 1      int gpio_99 = of_get_named_gpio_flags...系统之(4):pinctrl驱动的理解和总结 linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合 DTS代码: 1 device_node...... 7 }; 驱动代码: 1      struct pinctrl *pinctrl = devm_pinctrl_get(device); //获取device对应节点下的

4.6K40

Linux通用GPIO驱动写法与应用

方法二:自己编写GPIO驱动的方式 该方式主要利用字符设备驱动程序,通过ioctl函数进行控制。相比用sysfs文件系统的方式,这种方式的操作流程更加的清晰。..._IOR(IOCTL_MAGIC, 0x02, unsigned long) 3.2 gpio驱动程序的编写 gpio属于字符设备驱动,所以可以通过字符设备驱动程序的框架来完善...gpio控制驱动。...将GPIO驱动集成到内核中 由于前面已经将问题驱动模块单独编译,此时若想集成到内核中,则需要做以下几件事: 4.1 向内核中添加文件 由于GPIO驱动属于字符设备驱动,所以应该放在kernel/drivers...这个宏表示当配置了TFM_V2_GPIO宏时,tfmv2_gpio.c将会编译成驱动,内核启动时,该驱动自动加载。 下图是Linux启动后自动加载的tfm_v2的gpio驱动。 ?

8.9K42

Linux 驱动开发 gpio子系统 快速入门

gpio 和 pinctrl 子系统在内核里的使用率非常高,和嵌入式产品的关联非常大。从这两个子系统开始学习驱动开发是个不错的入门选择。...pinctrl 的作用: 引脚复用,例如某个引脚即可用作为普通的gpio,也可以作为UART的TX; 引脚配置,一般包括上下拉、驱动能力等; ?...列举一些使用了gpio子系统的常见驱动,例如 leds-gpio.c、gpio_keys.c 等 legacy.rst 描述 legacy gpio 接口 注:本文基于 Linux-4.19。...interface,形式为 gpiod_xxx(),例如 void gpiod_set_value(struct gpio_desc *desc, int value),新添加的驱动代码一律采用这套...点击查看大图 正常情况下,驱动工程师不需要了解 gpio chip driver 和 gpiolib: 驱动工程师负责编写 gpio consumer drvier; 芯片厂商的 bsp 工程师负责编写

4.8K33

Linux驱动实践:如何编写【 GPIO 】设备的驱动程序?

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...这篇文章,我们就以此为基础,写一个有实际应用功能的驱动程序: 在驱动程序中,初始化 GPIO 设备,自动创建设备节点; 在应用程序中,打开 GPIO 设备,并发送控制指令设置 GPIO 口的状态; 示例程序目标...int gpio_major = 0; int gpio_minor = 0; #ifdef MYGPIO_HW_ENABLE // 硬件初始化函数,在驱动程序被加载的时候(gpio_driver_init...加载驱动模块 在加载驱动模块之前,先来检查一下系统中,几个与驱动设备相关的地方。 先看一下 /dev 目录下,目前还没有设备节点( /dev/mygpio[0-3] )。...再来看一下 dmesg的打印信息: 可以看到:驱动程序中的 gpio_driver_exit( ) 被调用执行了。

4.8K30

Stm32的GPIO驱动继电器

由于单片机的GPIO口的输出电流非常小 (功率很小),所以单片机的GPIO口只能驱动类似于LED灯、数码管等小功率用电器,而不能驱动像继电器这样大功率的用电器。...继电器 SRD-03VDC-SL-C继电器:只需要3V电压就可以控制继电器中的单刀双掷开关,但不能用GPIO口的高电平驱动继电器,需要用上述提到的驱动电路进行驱动。...所以,GPIO口通过三极管驱动继电器的电路如下: 左边是STM32的单片机端口通过三极管输出电压,右边是继电器。...当GPIO为0时,三极管断开,发射极没有电流,功耗极低,继电器不被驱动。220V电流不导通。 当GPIO为1时,三极管导通,发射极上有电流,4.3k电阻上有2.6V电压。...继电器也有2.6V电压,电流值为2.6 V / 25 Ω= 104 mA,继电器被驱动。 这个电路图中,功率要比改进前小很多。 另外,当GPIO = 0时,继电器不被驱动

3.7K30

基于IMX6的GPIO驱动程序

:通过应用层程序控制底层IO的读写 一、驱动层 1、ioctl函数     ioctl函数从应用层传递给驱动层不同的cmd参数,驱动层根据传递的cmd参数,使用switch语句判别,来进行不同的工作...从下图可以看到,当cmd参数为DS_CS1_W时,通过gpio_direction_output()设置IO的方向为输出。...通过__gpio_set_value()向底层写入1或0,当写入1时,IO输出高电平,当写入0时,IO输出低电平;当cmd参数为DS_CS1_R时,通过gpio_direction_input()设置IO...通过__gpio_get_value()读取IO引脚状态,并通过copy_to_user()将从底层读取的状态传递给应用层程序。其他引脚设置同理。 ?...arg参数是驱动层和应用层交换的数据,例如当写GPIO,arg=1时,应用层给驱动层传递1,驱动层控制GPIO为高电平;当读GPIO时,应用层通过驱动层传递过来的arg参数的值来判别GPIO的高低电平。

1.8K80

Linux系统驱动之使用GPIO模拟I2C的驱动程序分析

使用GPIO模拟I2C的驱动程序分析 参考资料: i2c_spec.pdf Linux文档 Linux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yaml...Linux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux-5.4\drivers\i2c\...驱动程序分析 3.1 平台总线设备驱动模型 3.2 设备树 对于GPIO引脚的定义,有两种方法: 老方法:gpios 新方法:sda-gpios、scl-gpios 3.3 驱动程序分析 1....I2C-GPIO驱动层次 2. 传输函数分析 看视频分析i2c_outb函数:drivers\i2c\algos\i2c-algo-bit.c 4....drain了 在驱动里不需要在设置为open drain 如果需要驱动代码自己去设置SDA为open drain,就不要提供这个属性 i2c-gpio,scl-open-drain: 它表示其他驱动

3K32

GPIO—蜂鸣器

无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。...14.2硬件设计 通常蜂鸣器需要的驱动电流比较大,使用GPIO直接驱动蜂鸣器比较吃力,通常使用如图 14.2.1 所示电路。...由GPIO控制三极管通断,蜂鸣器由系统电源驱动,MCU只需要很小的电流便可控制蜂鸣器。 Q1为NPN三极管,发射极(E)接地,基极(B)接单片机引脚PA8,集电极(C)接蜂鸣器到电源。...14.3软件设计 14.3.1软件设计思路 实验目的:本实验通过控制GPIO输出指定频率,驱动蜂鸣器发声。...; // 使能蜂鸣器的 GPIO 对应的时钟 Buzzer_GPIO_CLK_EN(); GPIO_InitStruct.Pin = Buzzer_GPIO_PIN; // 选择蜂鸣器的引脚 GPIO_InitStruct.Mode

1.5K10

【i.MX6ULL】驱动开发3——GPIO寄存器配置原理

前面的两篇Linux驱动文章,介绍了字符设备驱动的两种新旧开发方式,并使用一个虚拟的字符驱动来学习字符设备的开发的流程。...同样,i.MX6ULL也有多种点灯方式: 裸机系统:汇编操作寄存器点灯、C语言操作寄存器点灯 跑Linux系统:字符驱动LED点灯、设备树驱动LED点灯 究其本质,最终都是要操作i.MX6ULL的寄存器...该模式又包含了如下的属性配置: DSE 驱动能力配置:通过调整芯片内部与引脚串联电阻 R0 的大小,从而改变引脚的驱动能力。可以把R0的值配置为原值的1/2、1/3⋯1/7 等。...它又分成MUX_Mode(IO 模式控制)以及Pad Settings(Pad 配置)两个部分: ① MUX_Mode配置:用来配置引脚的复用功能 ② Pad Settings 配置:配置引脚的属性,例如驱动能力...32 GPIO1_IO0~GPIO1_IO31 GPIO2 22 GPIO2_IO0~GPIO2_IO21 GPIO3 29 GPIO3_IO0~GPIO3_IO28 GPIO4 29 GPIO4_IO0

97331
领券