imx6ull开发板

一.编译

1.1 版本说明

  • 操作系统:Ubuntu16.04 64 位版
  • 交叉工具链:arm-poky-linux-gnueabi-gcc 5.3.0
  • Bootloader 版本:u-boot-2016.03
  • 内核版本:linux-4.1.15
  • QT 版本:Qt 5.6.2

1.2 安装 SDK (包含交叉编译器)

  1. 将 shell 脚本拷贝到任意目录(例如用户目录:/home/{username}/work)下,在该目录下执行
neo@ubuntu:~/work$ sudo ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolc
hain-4.1.15-2.0.0.sh
[sudo] password for neo:
Freescale i.MX Release Distro SDK installer version 4.1.15-2.0.0
================================================================
Enter target directory for SDK (default: /opt/fsl-imx-x11/4.1.15-2.0.0):
You are about to install the SDK to "/opt/fsl-imx-x11/4.1.15-2.0.0". Proceed[Y/n]?
Extracting SDK..................
  1. 命令行提示:Enter target directory for SDK (default: /opt/fsl-imx-x11/4.1.15-2.0.0),默认设置安装地
    址直接回车即可
  2. 命令行提示:You are about to install the SDK to “/opt/fsl-imx-x11/4.1.15-2.0.0”. Proceed[Y/n]?,输
    入 Y 即可

1.3环境变量配置

  1. . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi(注意“.”后面有空格)
  2. 每次打开新的窗口都要重新配置,或者直接配置.brashrc文件
  3. arm-poky-linux-gnueabi-gcc -v:检查版本

1.4编译linux-4.1.15

  1. 解压‘linux-4.1.15.tar.bz2’到work目录下,tar xvf linux-4.1.15.tar.bz2
neo@ubuntu:~/work$ tar xvf linux-4.1.15.tar.bz2
  1. 进入源码树目录下
  2. 编译内核: source imx6ull_build.sh
    arch/arm/configs/imx6ull_defconfig 为 配置文件路径
    .tmp/image/zImage 为内核镜像路径。
    .tmp/image/imx6ull-S-gpmi-800x480c7.dtb 为生成的 NAND 的 dtb 文件所在路径。
    .tmp/image/imx6ull-S-emmc-800x480c7.dtb 为生成的 eMMC 的 dtb 文件所在路径。
    .tmp/image/modules.tar.bz2 为生成的模块打包文件
  3. 单步编译内核方法(报错时比较好用,不用全部编译,节省时间)
neo@ubuntu:~/work/linux-4.1.15$ make distclean
neo@ubuntu:~/work/linux-4.1.15$ make imx6ull_defconfig
neo@ubuntu:~/work/linux-4.1.15$ make zImage
neo@ubuntu:~/work/linux-4.1.15$ make dtbs
neo@ubuntu:~/work/linux-4.1.15$ make modules

二.nand-sdburn 烧录

2.1 SD卡制作

  1. 将实现准备好的文件nand-sdburn放到work目录下,
ztj@ubuntu:~/work/nand-sdburn$ ls
6ullsdburn.sh  sdrun  target
ztj@ubuntu:~/work/nand-sdburn$ 

  1. 插入SD卡,启动脚本,选择挂载你的sd卡,
sudo ./6ullsdburn.sh

在这里插入图片描述

  1. 选择y,回车
    在这里插入图片描述
  2. 出现红框部分,挂载成功
    在这里插入图片描述
  3. 卡制作完成后可以看到 boot 分区包含 sdrun 和 target 两个目录。sdrun 文件夹内容用于引导系统烧
    写,无需修改;target 目录内容会烧写到 flash 芯片。如果需要替换镜像文件,只需将 target 目录中的对
    应文件替换掉,并保持同样的命名,之后再重新进行系统烧写。

2.2 烧录

  1. 打开超级终端,Hyper Terminal用于观察烧录过程
  2. 插入SD卡
  3. 将两个桥接件拔掉,按复位按钮,进行烧录

三.设备树增加节点(mcp2515)

  • 根据电路图,mcp原来的引脚,是LCD功能模块的,现在要改成mcp2515相关引脚,所以需要注意注释掉原来lcd部分代码。

3.1 mcp2515电路图

mcp2515是独立的can控制器,imx6ull自带两个can接口,现在新增一个can接口,就要增加一个can控制器
在这里插入图片描述

3.2 imx6ull核心板相关GPIO引脚电路图

在这里插入图片描述

3.3 查硬件手册20页,相关功能引脚GPIO功能图

在这里插入图片描述
在这里插入图片描述

3.4修改dts

  1. 先查看一下,是否有mcp2515的驱动
neo@ubuntu:~$ cd drivers
neo@ubuntu: ~/drivers $ find -name "mcp25*"
./net/can/spi/mcp251x.c
  1. 在配置文件./net/can/Makefile中设置obj-$(CONFIG_CAN_MCP251X) += mcp251x.o(如果没有)
    在配置文件 arch/arm/config/imx6ull_defconfig 中设置 CONFIG_CAN_MCP251X=y.

  2. 将/arch/arm/boot/dts目录下的imx6ull-14x14-evk.dts,复制工作目录下,或者自己准备分dts文件,防止文件修改时损坏

  3. 进入/arch/arm/boot/dts目录,打开imx6ull.dtsi文件,在clocks中增加mcp251x的时钟

                mcp251x_clock: mcp251x_clock{
                        compatible = "fixed-clock";
                        #clock-cells = <0>;
                        clock-frequency = <8000000>;
                };

  1. 回到work目录,修改刚才复制的dts文件
  2. 配置参考电压,在regulators{}里面,注意改成对应的引脚参数
           reg_mcp_3v3: regulator@4 {
                        compatible = "regulator-fixed";
                        reg = <0>;
                        regulator-name = "can-3v3";
                        regulator-min-microvolt = <3300000>;
                        regulator-max-microvolt = <3300000>;
                        gpios = <&gpio3 15 GPIO_ACTIVE_LOW>;
        };

  1. 配置 PIN MUX:在iomuxc{}里面,注意先注释原来的lcd所占引脚,因为这几个引脚默认为lcd引脚,我们要把他配置成spi引脚
  • 注释lcd部分引脚:
        pinctrl_lcdif_dat: lcdifdatgrp {
            fsl,pins = <
                MX6UL_PAD_LCD_DATA00__LCDIF_DATA00  0x79
                MX6UL_PAD_LCD_DATA01__LCDIF_DATA01  0x79
                MX6UL_PAD_LCD_DATA02__LCDIF_DATA02  0x79
                MX6UL_PAD_LCD_DATA03__LCDIF_DATA03  0x79
                MX6UL_PAD_LCD_DATA04__LCDIF_DATA04  0x79
                MX6UL_PAD_LCD_DATA05__LCDIF_DATA05  0x79
                MX6UL_PAD_LCD_DATA06__LCDIF_DATA06  0x79
                MX6UL_PAD_LCD_DATA07__LCDIF_DATA07  0x79
                MX6UL_PAD_LCD_DATA08__LCDIF_DATA08  0x79
                MX6UL_PAD_LCD_DATA09__LCDIF_DATA09  0x79
               /* MX6UL_PAD_LCD_DATA10__LCDIF_DATA10  0x79*/
                MX6UL_PAD_LCD_DATA11__LCDIF_DATA11  0x79
                MX6UL_PAD_LCD_DATA12__LCDIF_DATA12  0x79
                MX6UL_PAD_LCD_DATA13__LCDIF_DATA13  0x79
                MX6UL_PAD_LCD_DATA14__LCDIF_DATA14  0x79
                MX6UL_PAD_LCD_DATA15__LCDIF_DATA15  0x79
                MX6UL_PAD_LCD_DATA16__LCDIF_DATA16  0x79
                MX6UL_PAD_LCD_DATA17__LCDIF_DATA17  0x79
                MX6UL_PAD_LCD_DATA18__LCDIF_DATA18  0x79
               /* MX6UL_PAD_LCD_DATA19__LCDIF_DATA19  0x79
                MX6UL_PAD_LCD_DATA20__LCDIF_DATA20  0x79
                MX6UL_PAD_LCD_DATA21__LCDIF_DATA21  0x79
                MX6UL_PAD_LCD_DATA22__LCDIF_DATA22  0x79
                MX6UL_PAD_LCD_DATA23__LCDIF_DATA23  0x79*/
            >;
        };

  • 配置Pin Mux
        pinctrl_ecspi1: spi1grp {
            fsl,pins = <
                MX6UL_PAD_LCD_DATA23__ECSPI1_MISO   0x100b1
                MX6UL_PAD_LCD_DATA22__ECSPI1_MOSI   0x100b1
                MX6UL_PAD_LCD_DATA20__ECSPI1_SCLK   0x100b1
            >;
        };
        pinctrl_ecspi1_cs: ecspi1_csgrp {
            fsl,pins = <
                MX6UL_PAD_LCD_DATA21__GPIO3_IO26    0x80000000
            >;
        };
        pinctrl_can: can {
            fsl,pins = <
                MX6UL_PAD_LCD_DATA19__GPIO3_IO24    0x100b1
            >;
        };

    };
};


3.5 验证

  • 步骤 1:按软件手册编译内核和设备树。注意查看编译完内核之后,是否在 drivers/spi/下生成
    spi-imx.o,是否在 drivers/net/can/下生成 mcp251x.o,如果没生成,查看配置是否出错?生成*.o
    文件说明已经编译进内核。
  • 步骤 2 :替换烧写工具中的设备树和内核,重新烧写。开机选择刚替换的设备树。
  • 步骤 3 :此 ecspi1 驱动加载成功之后,cat /sys/bus/spi/devices/spi1.0/modalias 会出现
    spi:mcp2515。
  • 步骤 4 :查看打印信息是否生成 can0 节点(ifconfig -a),或者直接进入设备目录查看

在这里插入图片描述

四.Nand 单步更新内核

  • 更新 dtb 以及内核,logo,可以使用 nandwrite 命令,该命令也已经打包在文件系统中。使用时,要
    将待烧写的 dtb、logo、 zImage 文件复制到文件系统的某个目录下(本文示例为/root),然后擦除掉对
    应分区中的旧固件,再分别使用 nandwrite 命令将新的固件写到对应的分区中。

4.1 更新内核:

root@fl-imx6ull:~# flash_erase /dev/mtd4 0 0
Erasing 128 Kibyte @ 7e0000 -- 100 % complete
root@fl-imx6ull:~# nandwrite -p /dev/mtd4 /run/media/sda1/target/zImage
Writing data to block 0 at offset 0x0
Writing data to block 1 at offset 0x20000
Writing data to block 2 at offset 0x40000

4.2 更新 dtb:

root@fl-imx6ull:~# flash_erase /dev/mtd3 0 0
Erasing 128 Kibyte @ 2e0000 -- 100 % complete
root@fl-imx6ull:~# nandwrite -p /dev/mtd3
/run/media/sda1/target/imx6ull-S-gpmi-800x480cr7.dtb
Writing data to block 0 at offset 0x0

4.3 更新 logo:

root@fl-imx6ull:~# flash_erase /dev/mtd1 0 0
Erasing 128 Kibyte @ 1e0000 -- 100 % complete
root@fl-imx6ull:~# nandwrite -p /dev/mtd1 /run/media/sda1/target/logo.bmp
Writing data to block 0 at offset 0x0
Writing data to block 1 at offset 0x20000
Writing data to block 2 at offset 0x40000

五.can功能的验证

  • 将板子的can1与can2的H和H相连,L和L相连
  • ifconfig -a 可以查看所有can节点

4.1 设置can服务

root@fl-imx6ull:~# ifconfig can0 down
root@fl-imx6ull:~# ip link set can0 up type can bitrate 125000 triple-sampling on
flexcan 2090000.can can0: writing ctrl=0x0e312085
IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
root@fl-imx6ull:~# ifconfig can0 up
  • 设置 can0 的 can 设备波特率为 125000

4.2 can接收数据

  1. 设置can1为接收状态
root@fl-imx6ull:~# root@fl-imx6ull:~# candump can1 &
[1] 755
  1. 使用上位机发送数据

在这里插入图片描述

  1. 开发板打印信息
root@fl-imx6ull:~# can1 001 [8] 00 01 02 03 04 05 06 07

4.3 使用can发送数据

  1. 设置can0为发送状态
root@fl-imx6ull:~# cansend can0 123#123456789123456789
  1. 使用上位机接收数据
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

elaot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值