0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElfBoard技术贴|如何在NXP源码基础上适配ELF 1开发板的六轴传感器

ElfBoard 2024-10-30 20:25 次阅读
wKgZomciI1GAO3MfAApwvbTTKdU837.png

本次源码适配项目是基于NXP i.MX6ULL EVK评估板的Linux内核源码(特定版本Linux-imx_4.1.15)展开的。核心目标是调整功能接口及引脚配置,以确保其与ELF 1开发板兼容,接下来将以六轴传感器的适配作为具体示例,深入解析整个适配的流程。

一、 准备工作

NXP源码路径:ELF1开发板资料包\07-NXP 原厂资料\07-1 NXP官方源码\linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2

1、将NXP源码拷贝到开发环境home/root/work目录下解压

elf@ubuntu:~/work$ tar jvxf linux-imx-imx_4.1.15_2.0.0_ga.tar.bz2 elf@ubuntu:~/work$ cd linux-imx-imx_4.1.15_2.0.0_ga/ elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ls

2、添加默认配置文件

将arch/arm/configs路径下的imx_v7_mfg_defconfig复制一份,命名为imx6ull_elf1_defconfig:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/configs/imx_v7_mfg_defconfig arch/arm/configs/imx6ull_elf1_defconfig

3、添加ELF 1设备树

将arch/arm/boot/dts路径下的imx6ull-14x14-evk.dts复制一份,命名为imx6ull-elf1-emmc.dts:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp arch/arm/boot/dts/imx6ull-14x14-evk.dts arch/arm/boot/dts/imx6ull-elf1-emmc.dts

打开arch/arm/boot/dts/Makefile,找到CONFIG_SOC_IMX6ULL,将imx6ull-elf1-emmc.dts添加到Makefile中:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi arch/arm/boot/dts/Makefile

wKgZomciI4KAKyk8AAf8-2niuS0211.png

4、建立交叉编译脚本

建立一个编译脚本build.sh

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vim build.sh

添加以下内容,保存退出:

#!/bin/bash export CPUS=`grep -c processor /proc/cpuinfo` source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi make distclean make imx6ull_elf1_defconfig make -j${CPUS} rm -rf ./.tmp make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/ cd .tmp/rootfs/ tar -jcvf modules.tar.bz2 *

给予脚本权限:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ chmod 777 build.sh

二、适配六轴传感器

SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线。SPI的通信以主从方式工作,一般需要4根线,MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。i.MX6ULL有4路SPI接口,ELF 1开发板使用了SPI1连接到六轴传感器icm20607上。

1、硬件原理

wKgaomciI72AewFRAAUcgFyedYA258.pngwKgaomciI9iAReeBAAm3Q18_C1Y193.png

从原理图中可以看到,六轴传感器相连的引脚分别为:时钟SPI1_SCLK、片选SPI1_SS0、输出SPI1_MOSI、输入SPI1_MISO、中断ICM-20607_INT,分别对应的PAD NAME为LCD_DATA20、LCD_DATA21、LCD_DATA22、LCD_DATA23(六轴传感器的中断引脚没有用到,所以此处不进行配置)。由于ELF 1开发板的LCD采用的是RGB565,空出来的8位数据线可以用作其他功能。

wKgaomciI_iAd_mBAAEZ7saPxRE654.png

2、IOMUX配置

在arch/arm/boot/dts/imx6ul-pinfunc.h中找到相关宏:

MX6UL_PAD_LCD_DATA20__ECSPI1_SCLK MX6UL_PAD_LCD_DATA21__GPIO3_IO26 MX6UL_PAD_LCD_DATA22__ECSPI1_MOSI MX6UL_PAD_LCD_DATA23__ECSPI1_MISO

在设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts的IOMUX节点下添加子节点(暂时先不添加中断引脚,目前没有用到中断):

pinctrl_ecspi1: ecspi1grp { fsl,pins = < MX6UL_PAD_LCD_DATA20__ECSPI1_SCLK 0x10b0 MX6UL_PAD_LCD_DATA21__GPIO3_IO26 0x10b0 MX6UL_PAD_LCD_DATA22__ECSPI1_MOSI 0x10b0 MX6UL_PAD_LCD_DATA23__ECSPI1_MISO 0x10b0 >; };

效果如下:

wKgaoWciJCCASR5qAAILID-j77c770.png

在添加IOMUX之后,需要检查设备树是否有其它地方复用了LCD_DATA20,LCD_DATA21,LCD_DATA22,LCD_DATA23。

打开arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,搜索引脚PAD NAME,在&iomux的子节点pinctrl_lcdif_dat节点下搜索到以下几个引脚的复用,将其注释掉:

/* 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 */

效果如下:

wKgaoWciJECAS3mZAARI9s5dX7o132.png

3、设备节点配置

在arch/arm/boot/dts/imx6ull.dtsi中已经存在了spi接口的相关节点ecspi1-ecspi4,只需要在arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件中引用相关节点,并在该节点下添加子节点spidev0:

&ecspi1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ecspi1>; fsl,spi-num-chipselects = <1>; cs-gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; status = "okay"; spidevicm: icm20607@0{ compatible = "elf,icm20607"; spi-max-frequency = <8000000>; reg = <0>; }; };

效果如下:

wKgZoWciJHWAcw6sAAQ3gIEmVX8695.png

4、添加icm20607驱动

(1)将ELF1开发板资料包\02-Linux 源代码\02-1 驱动源码\01_icm20607\icm20607.c拷贝到内核源码的drivers/misc/路径下。

wKgZoWciJI-AAW2AAAJNgDqwjqs978.png

(2)将ELF1开发板资料包\02-Linux 源代码\02-1 驱动源码\01_icm20607\icm20607.h拷贝到内核源码的include/linux路径下。

wKgaoWciJJ2AYkITAAJYip6pnxA863.png

(3)修改Kconfig

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/misc/Kconfig

添加以下内容:

config ICM20607 tristate "SPI device ICM20607" depends on SPI && SYSFS help If you say yes here,you get support for the icm20607

效果如下:

wKgaoWciJL6AEZWGAAL9RFNIdZk123.png

(4)修改Makefile

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/misc/Makefile

添加以下内容:

obj-$(CONFIG_ICM20607) += icm20607.o

效果如下:

wKgaoWciJNCAauGRAAJ-L1E2Tk0723.png

(5)将icm20607驱动编译进内核使用make menuconfig打开图形化配置界面:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig

找到以下位置,选择Y编译进内核:

Device Drivers -> Misc devices

wKgZomciJOqAHLPwAAZBJjlggbo475.png

(6)替换配置文件通过make menuconfig修改的内容写入到了.config文件,当使用make imx6ull_elf1_defconfig配置内核源码时,.config文件会被覆盖,因此,需要替换原有的imx6ull_elf1_defconfig。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp .config arch/arm/configs/imx6ul\l_elf1_defconfig

wKgaomciJPmAS0X3AAIsj5I7Czw341.png

5、编译

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh

将编译生成的zImage和imx6ull-elf-emmc.dtb拷贝到ELF 1开发板的/run/media/mmcblk1p1 路径下:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage root@172.16.0.175:/run/media/mmcblk1p1/ elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

保存并重启开发板:

root@ELF1~# sync root@ELF1~# reboot

三、六轴传感器测试

1、查看/dev下是否生成了设备节点,若生成则表示驱动适配成功

wKgZomciJSWALkZgAACsU8HTcmw855.png

2、使用以下测试程序测试六轴传感器是否可以正确读到数据。

root@ELF1:~# elf1_cmd_icm20607

wKgaomciJTmAK4EEAANwWkpHtZw589.png

可以看到,六轴传感器能够成功读取原始数据并将其转换为有效的实际值。所有传感器的读数均在合理范围内,表明设备功能正常。

至此,就完成了基于NXP源码对ELF 1开发板六轴传感器的适配工作。希望这份详尽指南能够为各位小伙伴提供实际的帮助,在探索嵌入式技术的旅程中,让我们一同开启无限可能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6029

    文章

    44480

    浏览量

    631588
  • 嵌入式
    +关注

    关注

    5056

    文章

    18950

    浏览量

    301467
  • NXP
    NXP
    +关注

    关注

    60

    文章

    1259

    浏览量

    182714
  • 开发板
    +关注

    关注

    25

    文章

    4872

    浏览量

    96971
收藏 人收藏

    评论

    相关推荐

    ELF 1技术|在NXP源码基础上适配开发板的按键功能

    ELF1开发板。接下来,我们将详细阐述适配过程中关于按键功能实现的完整步骤。值得一提的是,ELF1开发板
    的头像 发表于 03-08 16:58 898次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>开发板</b>的按键功能

    何在NXP源码基础上适配ELF 1开发板的PWM功能

    本次源码适配项目是在NXP i.MX6ULL EVK评估所搭载的Linux内核源码(版本为Linux-imx_4.1.15)
    的头像 发表于 09-10 10:00 848次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的PWM功能

    ElfBoard技术|如何在NXP源码基础上适配ELF 1开发板的UART功能

    UART即通用异步收发,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理平台上,该处理原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF
    的头像 发表于 09-25 13:56 2204次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的UART功能

    嵌入式学习-ElfBoard ELF 1板卡-在nxp源码基础上适配ELF 1开发板的LED功能

    源码适配即在NXP i.MX6ULL EVK评估对应的Linux内核源码(linux-imx_4.1.15 版本)
    发表于 01-05 14:35

    飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能

    的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 至此,就完成了在NXP源码基础上适配ELF
    发表于 07-03 09:07

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能

    的键值是103,KEY3上报的键值是108,与在设备树中配置的键值一致。 至此,就完成了在NXP源码基础上适配ELF
    发表于 07-04 09:11

    ELF 1开发板试用】+ 1.开箱+前话

    在备用WIFI,蓝牙,USB,IMU等丰富传感器的同时,其核心使用了NXP公司的IMX6ULL这款广泛用于工控领域,汽车电子等领域,可
    发表于 11-21 20:56

    ELF 1开发板试用】+传感器检测

    ELF 1开发板通过几种传感器的测试,如温湿度、传感器
    发表于 11-29 11:59

    ELF 1开发板试用】板载资源测试2:体验传感器

    飞凌嵌入式ELF1开发板(以下简称为“开发板”)将传感器
    发表于 12-15 00:02

    ELF 1开发板试用】板载资源测试4:体验温湿度传感器

    命令行操作界面。 3、传感器测试(1)温湿度传感器AHT20在
    发表于 12-18 11:09

    ELF 1技术|在NXP源码基础上适配ELF 1开发板的LED功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目
    的头像 发表于 12-29 10:04 769次阅读
    <b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的LED功能

    ELF技术|如何在开发板实现对Java的支持

    Java作为一种功能强大且广泛应用的编程语言,具有广泛的适应性和实用性。在ELF1开发板上集成Java支持,无疑将赋予嵌入式开发者更广阔的选择空间,今天就为各位小伙伴详细解析如何在
    的头像 发表于 03-13 16:47 448次阅读
    <b class='flag-5'>ELF</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>实现对Java的支持

    ElfBoard技术|在NXP源码基础上适配ELF 1开发板的按键功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目
    的头像 发表于 07-10 09:54 500次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b><b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的按键功能

    ElfBoard技术|如何在ELF 1开发板搭建流媒体服务

    流媒体服务是一种专门用于传输实时数据流的服务软件,广泛用于视频直播、视频会议、音频播放等应用场景。在嵌入式开发领域,将流媒体服务部署到开发板
    的头像 发表于 08-20 14:48 477次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如<b class='flag-5'>何在</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b><b class='flag-5'>上</b>搭建流媒体服务<b class='flag-5'>器</b>

    NXP源码基础上如何适配ELF 1开发板的UART功能

    UART即通用异步收发,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理平台上,该处理原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF
    的头像 发表于 09-29 11:49 240次阅读
    在<b class='flag-5'>NXP</b><b class='flag-5'>源码</b><b class='flag-5'>基础上</b>如何<b class='flag-5'>适配</b><b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>开发板</b>的UART功能