M6G2C核心板产品简介在进行嵌入式开发的时候,为了合理化外设接口和硬件布局,常需要对核心板的外设引脚进行复用分配定义。对于刚接触的同学而言难度较大,因此本文将以A7核心板为例给大家详解如何快速实现核心板的引脚复用分配。
M6G2C是ZLG致远电子精心设计,采用板对板连接器接口的低功耗、高性能的嵌入式核心板。基于NXP性能更优的Cortex®-A7内核i.MX6UL处理器,主频高达528MHz,集成了DDR3、NandFlash、Wi-Fi、蓝牙、ZigBee、硬件看门狗等外设。同时,产品自带8路UART、2路USB OTG、最高2路CAN-bus、2路以太网等十分强大的工业控制通讯接口。
M6G2C核心板引脚复用原理嵌入式Linux核心板的引脚一般都是多功能复用可选的。M6G2C核心板,除了部分功能固定的引脚(VCC、GND等),大部分引脚的功能都是可以复用为Alt0-Alt8(功能编号,详见引脚分配表)共9种功能。因此,我们首先要根据自身需求,依照引脚复用分配表对所有外设进行分配(当然,M6G2C出厂默认有相对应引脚分配,如果默认分配对自己不合适,我们只需要修改部分引脚即可),修改好设备树文件,然后进行内核(部分要进行配置)和设备树编译,把新的内核和设备树文件更新到板子即可。
准备条件:磨刀不误砍柴工【 软件方面 】
1. 安装好虚拟机的电脑(VMware Workstation 12及以上最佳,电脑配置越高越好);
2. M6G2C的内核源码linux-src-b85fbbf.tar.gz(详见光盘资料,找FAE索取);
3. 虚拟机镜像(找FAE索取)。
【 硬件方面 】
1. EPC-6G2C-L评估套件1套(可官网旗舰店购买);
2. TF卡1张 / 网线1根 / microUSB线1根;
3. USB转232调试串口1个;
4. 工业接头12V/2A输出的适配器1个;
5. 读卡器1个(使用TF卡则需要准备)。
默认大家已经安装好虚拟机并打开我司制作好的镜像文件,打开终端窗口,cd进入源码路径,解压内核源码:
1 vmuser@Linux-host:~/A7-kernel$ tar zxvf linux-src-b85fbbf.tar.gz
进入解压之后的目录,打开M6G2C配套的设备树文件imx6g2c-256m.dts:
1 vmuser@Linux-host:~/A7-kernel$ cd linux-src/
2 vmuser@Linux-host:~/A7-kernel/linux-src$ vi arch/arm/boot/dts/imx6g2c-256m.dts
要将CAN2改成GPIO,我们要在dts里面把CAN2的定义注释掉,然后参考GPIO的定义,将它配置为GPIO。我们查阅光盘资料“光盘资料\硬件设计\06. 管脚分配表”:
上图可见CAN2为B9和B10,Alt5可为GPIO功能,分别是GPIO1_22和GPIO1_23。
我们来屏蔽掉设备树文件中CAN2的设备节点以及相关配置:
1 /*
2 &flexcan2 {
3 pinctrl-names = "default";
4 pinctrl-0 = <&pinctrl_flexcan2>;
5 status = "okay";
6 };
7 */
8 … 略 …
9 /*
10 pinctrl_flexcan2: flexcan2grp{
11 fsl,pins = <
12 MX6UL_PAD_UART2_RTS_B__FLEXCAN2_RX 0x1b020
13 MX6UL_PAD_UART2_CTS_B__FLEXCAN2_TX 0x1b020
14 >;
15 };
16 */
接下来在iomuxc(GPIO定义一般都在这里)中添加GPIO参数配置,把CAN2复用为GPIO:
1 &iomuxc {
2 pinctrl-names = "default";
3 pinctrl-0 = <&pinctrl_hog_1>;
4 imx6ul-evk {
5 pinctrl_hog_1: hoggrp-1 {
6 fsl,pins = <
7 MX6UL_PAD_NAND_DQS__GPIO4_IO16 0x17059 /* err led */
8 MX6UL_PAD_NAND_CE1_B
9 MX6UL_PAD_LCD_RESET__GP
10 MX6UL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x17059 /* gpio5_9 */
11 MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x17059 /* sys mode */
12 MX6UL_PAD_SNVS_TAMPER2__GPIO5_IO02 0x17059 /* clr reg */
13 MX6UL_PAD_SNVS_TAMPER3__GPIO5_IO03 0x17059 /* eth1_reset */
14 MX6UL_PAD_SNVS_TAMPER4__GPIO5_IO04 0x17059 /* eth2_reset */
15 MX6UL_PAD_UART2_RTS_B__GPIO1_IO23 0x17059 /* CAN_GPIO1_23 */
16 MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x17059 /* CAN_GPIO1_22 */
17 >;
18 };
19 … 略 …
20 };
21 };
EPC-6G2C-L工控板,默认支持2路CAN设备端口 ,所以我们还需要参考上面的说明,按照类似的步骤,将CAN1也屏蔽掉(此处不再赘述)。
接着清除配置(清除旧的配置信息):
1 vmuser@Linux-host:~/A7-kernel/linux-src$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean &&
使用EPC工控板配置文件(配置成EPC出厂默认配置):
1 vmuser@Linux-host:~/A7-kernel/linux-src$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- epc_m6g2c_defconfig &&
然后,进入内核配置菜单中:
1 vmuser@Linux-host:~/A7-kernel/linux-src$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
去掉CAN总线支持,将CAN bus subsystem support选项去掉:
1 [*]Networking support --->
2 < > CAN bus subsystem support ---->
温馨提示:“空”代表不选择,“*”代表编译到内核,“M”代表编译成模块。
以上修改完成之后,保存配置并编译内核:
1 vmuser@Linux-host:~/A7-kernel/linux-src$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j8
温馨提示:编译生成的内核,在arch/arm/boot中。
编译设备树文件:
1 vmuser@Linux-host:~/A7-kernel/linux-src$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
温馨提示:编译生成的设备树,在arch/arm/boot/dts中。
将上述内核和设备树更新到目标板即可,更新方法可以使用TF烧录或者以太网烧写,具体参见在线文档:
https://manual.zlg.cn/web/#/16/220
归纳总结:触类旁通重新分配引脚功能大致思路为:修改设备树——清除配置文件——更改配置文件——编译内核和设备树——更新目标板内核和设备树。
了解了条理思路并按照教程走一遍,是不是一下子就感觉简单多啦。以此类推,如果要把默认以太网接口改成GPIO使用,条理思路跟CAN改GPIO也是类似的。