NXP系列ARM处理器的引脚可以复用作不同的接口或是作为GPIO使用,我们这里实际操作一下接口功能变更的过程,以便初学者领会i.MX系列处理器的强大能力。阅读本章节前,您可以先阅读NXP i.MX系列处理器之引脚复用详解

选择一个方便测试接口

如果您手头没有CC6单板机对应的扩展端子,可以用单板机上的XBee插座,只需用一根线插到XBee插座对应的引脚,就可以用万用表去测量该引脚的电平变化。查看单板机的原理图,UART5_CTS_N和UART5_RTS_N分别接在XBee的16脚和9脚上,我们将以这两个信号的修改为例。

引脚 i.MX6引脚默认名称 CC6引脚默认信号 GPIO名称
D2 KEY_ROW4 UART5_CTS_N ALT5: GPIO4_IO15
L2 KEY_COL4 UART5_RTS_N ALT5: GPIO4_IO14

根据开发套件/单板机的硬件参考手册,UART5是4线的TTL电平,所以默认地,上面这两个引脚是CTS和RTS信号引脚,我们可以在设备树上将其改为两线的UART,这样UART5的CTS和RTS就可以当作普通的GPIO使用。 不同的硬件平台板子,对应加载的设备树可能不同,在U-Boot中,我们可以用ls来列出内核分区的文件。

ls mmc 0:1

在DEY 2.4以后,启动时会根据boot.scr脚本决定加载哪一个 dtb文件。我们只需对应地修改这个设备树源文件,编译出新的dtb文件来替换,就可以实现设备树的修改和变更。通过启动的log我们可以看到,uboot先加载执行boot.scr,然后加载内核和设备树文件,设备树的源码文件位于内核目录的arch/arm/boot/dts中,一般以zimage-<芯片>-<单板机>-<wb/id>.dts命名,在这些设备树源文件中,还会包含一些dtsi头文件,如果我们找的信号在dts里找不到,就可能需要到dtsi中查找。像这个例子中,dts文件只是启用了uart5,而对于uart5的信号定义,在imx6qdl-ccimx6sbc.dtsi中,找到uart5所在的定义项,注释掉RTS和CTS两行,保存

uart5 {
        pinctrl_uarts:uart5 {
                fsl,pins =<
                        MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1
                        MX6QDL_PAD_KEY_ROW1__UART5_TX_DATA 0x1b0b1
                        // MX6QDL_PAD_KEY_ROW1__UART5_RTS_B   0x1b0b1
                        // MX6QDL_PAD_KEY_ROW1__UART5_CTS_B   0x1b0b1

我们可以用

bitbake -c devshell virtual/kernel

来调出内核git终端,修改设备树,然后在终端内编译设备树或是在改好后退出用DEY编译修改后的设备树文件。 在内核终端下编译,用

make dtbs

在DEY下编译,用

bitbake -C compile virtual/kernel

我们可以在uboot中用updatefile命令来更新单个设备树文件,也可以在linux中通过装载内核启动分区,来进行内核分区的设备树文件更新。

先算出gpio号,根据cc6的GPIO的BSP文档,GPIO4_IO15=96+15=111 我们先测一下该脚的电平,默认是高电平。执行如下gpio操作

cd /sys/class/gpio/
echo 111 > export
echo out > gpio111/direction
echo 0 > gpio111/value
这里再测一下电平,发现并没有拉低,还是高电平

所以默认地,它是当CTS脚,不能当GPIO使用。我们把刚才的修改编译一下,生成新的dtb文件,然后更新到linux分区中。

updatefile linux tftp zImage-imx6q-ccimx6sbc-wb.dtb
注意,根据你的log,不同的版本有可能加载的设备树文件不一样

再测一下gpio111的电平,发现默认已经变低电平了,并且可以用sysfs API来设置它的电平,这两个引脚可以当作GPIO使用了

cd /sys/class/gpio/
echo 111 > export
echo out > gpio111/direction
echo 1 > gpio111/value
echo 1 > gpio111/value

除了可以将接口改为标准GPIO,还可以根据ALT模式,将接口变更为另一种接口,请参考NXP i.MX系列处理器IOMUX的说明,自行设计产品的底板。