Imx6ulx led-gpios 子系统实战
上一篇文章写的实际是通过gpio 子系统控制led,若干我们用下面的方法增加了 led 子系统,对应的IO 就不能被GPIO 子系统所使用。只有没有被定义成led子系统 输入子系统等的引脚才能被用 上一篇文章说的方法 控制gpio 。文章网址如下: https://bbs.elecfans.com/jishu_1981082_1_1.html led 子系统 设备树编写如下 在evb-6ulx.dts 中 根目录下增加 leds { pinctrl-names ="default"; pinctrl-0 =<&pinctrl_gpio_leds>; d16: led_heart { label = "d16"; gpios = <&gpio5 2GPIO_ACTIVE_LOW>; linux,default-trigger ="heartbeat"; default-state ="off"; }; d17: led_user1 { label = "d17"; gpios = <&gpio5 3GPIO_ACTIVE_LOW>; linux,default-trigger ="default-on"; default-state ="off"; }; d18: led_user2 { label = "d18"; gpios = <&gpio5 4GPIO_ACTIVE_LOW>; linux,default-trigger ="default-on"; default-state ="off"; }; }; &iomuxc_snvs { pinctrl_wl_reg_on: wlgrp { fsl,pins = < MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x000190A0 /* WL_REG_ON */ >; }; pinctrl_gpio_leds: ledgrp { fsl,pins = < MX6ULL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x000110A0 MX6ULL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x000110A0 MX6ULL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x000110A0 >; }; }; 不过还得有个前提就是,linux 内核配置了gpio-leds使能。 源码分析 compatible ="gpio-leds";//须与leds-gpio.c中的compatible一致,这样设备树中的配置才能与gpio-leds 联系在一起,具体的可以了解platform 框架,其实就是devices (硬件相关代码)和drviers(驱动程序) 分开。 pinctrl-names ="default",“sleep”; // “pinctrl-names”标识,指定PIN的状态列表,默认设置为“default”与pinctrl-0 对应 pinctrl-0 =<&pinctrl_gpio_leds>; // pinctrl-1 =<&pinctrl_gpio_leds_sleep>; // 其中 MX6ULL_PAD_SNVS_TAMPER0__GPIO5_IO00是引脚复用宏定义,在imx6ul-pinfunc.h中定义具体值 #defineMX6UL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x001c0x02a8 0x0000 5 0,各值含义如下mux_reg=0x001c、conf_reg=0x02a8、input_reg = 0x0000、mux_mode=5、input_val=0 寄存器位于 IOMUX章 可以通过PAD 后面的两个单词来查找。 mux_reg 对应的是MUC_CTL寄存器的地址 mux_mode是对应的值。 conf_reg对应的是PAD_CTL寄存器的地址 值是宏后面那个数。 Input_reg对应SELECT_INPUT寄存器的地址 input_val是对应寄存器的值 可以从内核源码的document中找到相关说明中得知conf_reg,引脚(PAD)属性控制寄存器偏移地址conf_reg 寄存器值会根据实际需要更所以没包含在宏中。其中0x000110A0:PAD(引脚)属性 yocto编译内核 DISTRO=embfly-imx-fbMACHINE=evb6ulx source fsl-setup-release.sh -b build 从新编译linux 内核 -C是清除编译完成标志。 bitbake -C compilelinux-imx 下载内核选择对应的 开发板的脚本 这里是Mfgtool2-NAND-ddr512-YOCTO.vbs,替换对应文件夹下的evb-6ulx.dtb文件。 验证 等系统正常启动后, /proc/device-tree目录下会有个leds 文件夹。这说明我们写的 设备树生效了。 操作 可以通过写入0或1到 /sys/class/leds/d16/brightness 这个文件,这个文件是只写文件取值范围是0-255 因为 我们现在没有把这个灯设置PWM控制,所以写如1和 255 效果一样。 同样我们可以通常编写程序写brightness文件来控制。
|