文章目录
1. 硬件1.1 驱动与开发软件1.2 拨码开关2. 调试与测试2.1 登录开发板2.2 输入控制2.2.1 查看按键所对应的输入事件2.2.2 查看按键触发事件打印信息2.3 输出控制2.3.1 LED灯DS02.3.2 蜂鸣器2.3.4 LCD 触摸屏2.4 串口调试2.5 DDR 内存测试2.6 SD卡读写测试2.7 NAND FLASH 读写速度测试2.8 系统时钟与 RTC 时钟2.9 查看系统信息2.10 网口测试2.11 FlexCAN 测试2.12 USB 接口测试2.13 环境传感器AP3216C2.14 6轴MEMS传感器ICM-206083. 实验记录3.1 LED控制(GPIO)3.1.1 IO简介3.1.2 IO 复用3.1.3 IO 参数配置附录*. 解决中文乱码问题1. 硬件
1.1 驱动与开发软件
调试软件:SecureCRT1.2 拨码开关
根据个人核心板上的存储介质类型,选择不同的方式启动动系统。
其中OFF 为 0,ON 为 1.
USB OTG 烧写设置:0100 0000SD 卡启动设置:1000 0010EMMC启动设置:1010 0110NAND FLASH 启动设置:1000 1001
2. 调试与测试
2.1 登录开发板
根据个人核心板上的存储介质类型,选择不同的方式启动动系统后,在调试终端敲入root
获取最高权限。
2.2 输入控制
2.2.1 查看按键所对应的输入事件
敲入lsinput
返回信息如下:
/dev/input/event0bustype : BUS_HOSTvendor : 0x0product : 0x0version : 0name : "20cc000.snvs:snvs-powerkey"phys : "snvs-pwrkey/input0"bits ev : EV_SYN EV_KEY/dev/input/event1bustype : BUS_I2Cvendor : 0x0product : 0x0version : 0name : "EP0820M09"bits ev : EV_SYN EV_KEY EV_ABS/dev/input/event2bustype : BUS_HOSTvendor : 0x1product : 0x1version : 256name : "gpio_keys@0"phys : "gpio-keys/input0"bits ev : EV_SYN EV_KEY EV_REP
2.2.2 查看按键触发事件打印信息
敲入od -x /dev/input/event2
,触发KEY0按钮,打印信息如下:
其中
od -x
或hexdump
表示以十六进制形式打印信息。
0001040 06ef 5d54 7186 0001 0001 0072 0001 00000001060 06ef 5d54 7186 0001 0000 0000 0000 00000001100 06ef 5d54 0de1 0002 0001 0072 0000 00000001120 06ef 5d54 0de1 0002 0000 0000 0000 0000
结束后,敲击键盘Ctrl+c结束指令功能。
2.3 输出控制
2.3.1 LED灯DS0
熄灭 LED:echo none > /sys/class/leds/sys-led/trigger
或echo 0 > /sys/class/leds/sys-led/brightness
点亮LED:echo 1 > /sys/class/leds/sys-led/brightness
2.3.2 蜂鸣器
蜂鸣器鸣叫:echo 1 > /sys/class/leds/beep/brightness
蜂鸣器关闭:echo 0 > /sys/class/leds/beep/brightness
2.3.4 LCD 触摸屏
查看LCD背光最高亮度等级:cat /sys/devices/platform/backlight/backlight/backlight/max_brightness
查看LCD背光当前亮度等级:cat /sys/devices/platform/backlight/backlight/backlight/actual_brightness
修改LCD背光亮度等级(如熄灭LCD屏幕则为0级):echo 0 > /sys/class/backlight/backlight/brightness
屏幕触摸测试: 使用psplash.sh文件关闭 UI 桌面程序:/etc/init.d/psplash.sh
触摸屏测试开始:ts_test
点击或拖动触摸屏,调试软件打印信息如下:测试结束后,敲击键盘Ctrl+c结束指令功能。重启桌面程序:/opt/qt5.5.1/apps/QDesktop/QDesktop &
1565789885.202699: 559 370 2551565789885.212566: 559 370 2551565789885.216374: 559 370 2551565789885.223272: 559 370 2551565789885.227069: 559 370 2551565789885.233829: 559 370 2551565789885.237626: 559 370 2551565789885.244181: 559 370 2551565789885.247748: 559 370 2551565789885.254948: 559 370 2551565789885.258735: 559 370 2551565789885.265564: 559 370 2551565789885.269363: 559 370 2551565789885.277486: 559 3700
显示屏睡眠/唤醒: 睡眠:echo "4" > /sys/class/graphics/fb0/blank
唤醒:echo "0" > /sys/class/graphics/fb0/blank
2.4 串口调试
Linux硬件系统与PC连接,若通过串口连接以调试Linux硬件,须在PC端安装串口CH340
.
i.MX6ULL Linux阿尔法开发板串口通信协议配置:
波特率:115200数据位:8奇偶检验:无停止位:1
串口线直接接入开发板USB_TTL或通过RS232转接头转接到开发板DB9上。
PC端设备管理器查看端口是否连接成功。
完成上述硬件连接和通信协议配置后,在调试软件输入
setsid getty 115200 /dev/ttymxc2
以测试串口是否连接成功。若有返回,则表示连接成功。
2.5 DDR 内存测试
命令格式:memtester [-p PHYSADDR] <MEMORY> [ITERATIONS]
其中:
Memtester 为系统内置的内存测试工具,主要是捕获内存错误和一直处于很高或者很低的坏位, 其测试的主要项目有随机值,异或比较,减法,乘法,除法,与或运算等等。 通过给定测试内存的大小和次数,可以对系统现有的内存进行上面项目的测试。MEMORY: 申请测试内存的数量,单位默认是 megabytes(兆),也可以是 B K M GITERATIONS 测试的次数,默认是无限
如具申请 8MB 内存数量测试做 1 次 DDR 测试,指令为:
memtester 8M 1
,返回内容如下:
memtester version 4.3.0 (32-bit)Copyright (C) 2001- Charles Cazabon.Licensed under the GNU General Public License version 2 (only).pagesize is 4096pagesizemask is 0xfffff000want 8MB (8388608 bytes)got 8MB (8388608 bytes), trying mlock ...locked.Loop 1/1:Stuck Address : ok Random Value : okCompare XOR : okCompare SUB : okCompare MUL : okCompare DIV : okCompare OR: okCompare AND : okSequential Increment: okSolid Bits: ok Block Sequential : ok Checkerboard : ok Bit Spread: ok Bit Flip : ok Walking Ones : ok Walking Zeroes: ok Done.
2.6 SD卡读写测试
2.7 NAND FLASH 读写速度测试
2.8 系统时钟与 RTC 时钟
Linux 系统有两个时钟:
system time(软件时钟,又叫系统时钟),使用date
查看系统时钟,它掉电即会消失,但它会在系统启动时与 RTC 时钟同步,而RTC 时钟在有电池的情况下会长期运行。hardware clock(硬件时钟),使用hwclock
查看硬件时钟。
设置时钟:
设置系统时钟:如date -s "-7-9 10:00:00"
将系统时钟同步到硬件时钟:hwclock -w
2.9 查看系统信息
显示操作系统的内核版本号:uname -a
查看系统主机名:cat /etc/hostname
查看系统登录欢迎信息:cat /etc/issue
查看 CPU 相关信息:cat /proc/cpuinfo
,返回信息如下:processor: 0model name: ARMv7 Processor rev 5 (v7l)BogoMIPS: 12.00Features: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae CPU implementer: 0x41CPU architecture: 7CPU variant: 0x0CPU part: 0xc07CPU revision: 5Hardware: Freescale i.MX6 Ultralite (Device Tree)Revision: 0000Serial: 0000000000000000
查看内存相关信息:cat /proc/meminfo
,返回信息如下:
MemTotal: 506876 kBMemFree:362352 kBMemAvailable:355116 kBBuffers: 5196 kBCached: 52744 kBSwapCached: 0 kBActive: 55900 kBInactive:38848 kBActive(anon):36996 kBInactive(anon):120 kBActive(file):18904 kBInactive(file): 38728 kBUnevictable: 0 kBMlocked:0 kBHighTotal: 0 kBHighFree: 0 kBLowTotal: 506876 kBLowFree:362352 kBSwapTotal: 0 kBSwapFree: 0 kBDirty: 0 kBWriteback: 0 kBAnonPages: 36804 kBMapped: 26612 kBShmem:312 kBSlab:9824 kBSReclaimable: 3404 kBSUnreclaim: 6420 kBKernelStack: 544 kBPageTables:748 kBNFS_Unstable:0 kBBounce:0 kBWritebackTmp:0 kBCommitLimit:253436 kBCommitted_AS:76256 kBVmallocTotal: 1548288 kBVmallocUsed: 3832 kBVmallocChunk: 1367948 kBCmaTotal: 131072 kBCmaFree: 97244 kB
查看芯片温度:cat /sys/class/thermal/thermal_zone0/temp
,返回56165,即56.165°(56165/1000)(单位:摄氏度)
I.MX6 芯片内部内置有温度传感器,可以实时反映 I.MX6 此 CPU 的内部温度。
2.10 网口测试
ALPHA 开发板有 eth0、eth1 两路百兆网卡。eth0 对应底板上 ENET2,eth1 对应底板上的ENET1.
查看网络信息:ifconfig
,在为接入网络时,返回如下:
eth0Link encap:Ethernet HWaddr 56:05:64:2f:c8:56 UP BROADCAST MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)eth1Link encap:Ethernet HWaddr 6a:24:68:bb:7e:2e UP BROADCAST MULTICAST DYNAMIC MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:66 errors:0 dropped:0 overruns:0 frame:0TX packets:66 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:4556 (4.4 KiB) TX bytes:4556 (4.4 KiB)
插上网线到 ENET2 处可以看到如下信息,系统自动获取了 ip,eth1 同理。
如果对应网卡没有自动获取到 IP,使用指令udhcpc -i eth0
获取。-i
是指定网卡名称,如不指定,会使用默认会使用 eth0.
关闭与打开网口:如关闭etht1的网口的指令为ifconfig eth1 down
,打开为ifconfig eth1 up
.测试网口是否通信成功:以连接到地址196.168.1.31为例,发送指令ping 196.168.1.31 -I eth0
.
查看网关:其中
-I
表示指定网口,后面加要指定的网口,若不加-I
则使用默认网口。
route
,由下图可知网关为 192.168.1.1,根据路由器不同,网关可能不同。ping 网关可测试内网与开发板连接是否正常,ping 192.168.1.1
.网络通信速度测试:【未验证】
2.11 FlexCAN 测试
2.12 USB 接口测试
2.13 环境传感器AP3216C
ALPHA 开发板上通过 I2C1 连接了一个三合一环境传感器:AP3216C,支持环境光强度(ALS)、接近距离(PS)和红外线强度(IR)这三个环境参数检测。AP3216C 的特点如下:
I2C 接口,快速模式下波特率可以到 400Kbit/S多种工作模式选择:ALS、PS+IR、ALS+PS+IR、PD 等等。内建温度补偿电路。宽工作温度范围(-30°C ~ +80°C)。超小封装,4.1mm x 2.4mm x 1.35mm环境光传感器具有 16 为分辨率。接近传感器和红外传感器具有 10 为分辨率 读取环境光强度值(ALS):cat /sys/class/misc/ap3216c/als
读取接近距离(PS):cat /sys/class/misc/ap3216c/ps
读取红外线强度(IR):cat /sys/class/misc/ap3216c/ir
2.14 6轴MEMS传感器ICM-20608
ICM-20608 是 InvenSense 出品的一款 6 轴 MEMS 传感器,包括 3 轴加速度和 3 轴陀螺仪。陀螺仪的量程范围可以编程设置,可选择±250,±500,±1000 和±2000°/s,加速度的量程范围也可以编程设置,可选择±2g,±4g,±4g,±8g 和±16g。陀螺仪和加速度计都是 16 位的 ADC,并且支持 I2C 和 SPI 两种协议,使用 I2C 接口的话通信速度最高可以达到 400KHz,使用 SPI 接口的话通信速度最高可达到 8MHz.
ICM-20608 特性如下:
陀螺仪支持 X,Y 和 Z 三轴输出,内部集成 16 位 ADC,测量范围可设置:±250,±
500,±1000 和±2000°/s。加速度计支持 X,Y 和 Z 轴输出,内部集成 16 位 ADC,测量范围可设置:±2g,±
4g,±4g,±8g 和±16g。用户可编程中断。内部包含 512 字节的 FIFO。内部包含一个数字温度传感器。耐 10000g 的冲击。支持快速 I2C,速度可达 400KHz。支持 SPI,速度可达 8MHz。
3. 实验记录
3.1 LED控制(GPIO)
3.1.1 IO简介
通过查看I.MX6U芯片参考手册的如下章节,可见其IO的定义如下。
注意
IOMUXC_SW_MUX_CTL_PAD_XXX_XXX
为IO定义而不是GPIO,GPIO 是一个 IO 众多复用功能中的一种。
其中“IOMUXC_SW_MUC_CTL_PAD_XX_XX”,后面的“XX_XX”就是 GPIO 的命名。
I.MX6U 的 GPIO并不像 STM32 那样以 PA0~15 命名,而是根据某个 IO 所拥有的功能来命名。比如看到 GPIO1_IO01 就知道这个肯定能做 GPIO,看到 UART1_TX_DATA 肯定就知道这个 IO肯定能做为 UART1 的发送引脚。
I.MX6U 的 GPIO 一共有 5 组:GPIO1、GPIO2、GPIO3、GPIO4 和 GPIO5,其中 GPIO1 有 32 个 IO,GPIO2 有 22 个 IO,GPIO3 有 29 个 IO、GPIO4 有 29 个 IO,GPIO5有 12 个 IO,一共有 124 个 GPIO。其中部分端口默认为GPIO端口,但大部分需通过配置端口复用实现。
3.1.2 IO 复用
以端口”IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00“为例,以下为其参考手册中的寄存器介绍,可见,该端口的寄存器地址为 0X020E005C,寄存器大小为 32 位,但只用了最低的 5 位,其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的。
可见GPIO1_IO00 一共可复用为 9种功能 IO,分别对应 ALT0~ALT8,其中 ALT5 就是作为 GPIO1_IO00.
I.MX6U 的 GPIO 不止 GPIO1_IO00~GPIO1_IO09 这 10 个,其它的 IO 都可以复用为 GPIO 来使用。比如下面的UART1_TX_DATA端口,可通过配置其复用寄存器"MUX_MODE"来将端口复用为 GPIO1_IO16.
如果只想看每个 IO 能复用什么外设的话可以直接查阅《IMX6UL 参考手册》的第 4 章“Chapter 4 External Signals and Pin Multiplexing”。设置某个 IO 的复用功能的话就需要查阅第 30 章“Chapter 30: IOMUX Controller(IOMUXC)”,第 30 章详细的列出了所有 IO 对应的复用配置寄存器。
3.1.3 IO 参数配置
在《 I.MX6UL 参考手册》 第 30 章“ Chapter 30: IOMUX Controller(IOMUXC)”中,每一个 IO会出现两次,它们的名字差别很小:
IOMUXC_SW_MUXCTL_PAD_GPIO1_IO00
IOMUXC_SWPAD_CTL_PAD_GPIO1_IO00
它们都是跟 GPIO_IO00 有关的寄存器,前者MUX见3.1.2节,后者寄存器图如下,可见其寄存器地址为0X020E02E8,是个32位寄存器,但只用了其中的低 17 位。它是用来配
置 GPIO1_IO00 的,包括速度设置、驱动能力设置、压摆率设置等等。
HYS(bit16):用于使能迟滞比较器,当 IO 作为输入功能的时候有效,用于设置输入接收器的施密特触发器是否使能。如果需要对输入波形进行整形的话可以使能此位。此位为 0 的时候禁止迟滞比较器,为 1 的时候使能迟滞比较器。PUS(bit15:14):用来设置上下拉电阻的,一共有四种选项可以选择:PUE(bit13):图中没给出来,当 IO 作为输入的时候,这个位用来设置 IO 使用上下拉还是状态保持器。当为 0 的时候使用状态保持器,当为 1 的时候使用上下拉。状态保持器在IO 作为输入的时候才有用,顾名思义,就是当外部电路断电以后此 IO 口可以保持住以前的状态。PKE(bit12):用来使能或者禁止上下拉/状态保持器功能,为0 时禁止上下拉/状态保持器,为 1 时使能上下拉和状态保持器。ODE(bit11):当 IO 作为输出的时候,此位用来禁止或者使能开路输出,此位为 0 的时候禁止开路输出,当此位为 1 的时候就使能开路输出功能。SPEED(bit7:6):当 IO 用作输出的时候,此位用来设置IO 速度,设置如下表所示:DSE(bit5:3):当 IO 用作输出的时候用来设置 IO 的驱动能力,总共有 8 个可选选项:SRE(bit0):设置压摆率,当此位为 0 的时候是低压摆率,当为 1的时候是高压摆率。这里的压摆率就是 IO 电平跳变所需要的时间,比如从 0 到 1 需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如果你的产品要过 EMC 的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO做高速通信的话就可以使用高压摆率。
综上,当 IO 用作 GPIO 的时候需要设置的寄存器,一共有八个:DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和 ISR.
附录
*. 解决中文乱码问题
串口调试终端需要设置为 UTF-8 编码以防止打印时有中文乱码。
如果觉得《i.MX6ULL Linux阿尔法开发板硬件与调试》对你有帮助,请点赞、收藏,并留下你的观点哦!