i.MX6ULL Linux阿尔法开发板硬件与调试

1. 硬件


1.1 驱动与开发软件

  • 调试软件:SecureCRT

1.2 拨码开关

根据个人核心板上的存储介质类型,选择不同的方式启动动系统。
在这里插入图片描述
其中OFF 为 0,ON 为 1.

  • USB OTG 烧写设置:0100 0000
  • SD 卡启动设置:1000 0010
  • EMMC 启动设置:1010 0110
  • NAND FLASH 启动设置:1000 1001

2. 调试与测试


2.1 登录开发板

根据个人核心板上的存储介质类型,选择不同的方式启动动系统后,在调试终端敲入root获取最高权限。

2.2 输入控制

2.2.1 查看按键所对应的输入事件

敲入 lsinput
返回信息如下:

/dev/input/event0
   bustype : BUS_HOST
   vendor  : 0x0
   product : 0x0
   version : 0
   name    : "20cc000.snvs:snvs-powerkey"
   phys    : "snvs-pwrkey/input0"
   bits ev : EV_SYN EV_KEY

/dev/input/event1
   bustype : BUS_I2C
   vendor  : 0x0
   product : 0x0
   version : 0
   name    : "EP0820M09"
   bits ev : EV_SYN EV_KEY EV_ABS

/dev/input/event2
   bustype : BUS_HOST
   vendor  : 0x1
   product : 0x1
   version : 256
   name    : "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 -xhexdump表示以十六进制形式打印信息。

0001040 06ef 5d54 7186 0001 0001 0072 0001 0000
0001060 06ef 5d54 7186 0001 0000 0000 0000 0000
0001100 06ef 5d54 0de1 0002 0001 0072 0000 0000
0001120 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/triggerecho 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
  • 屏幕触摸测试:
    1. 使用psplash.sh文件关闭 UI 桌面程序:/etc/init.d/psplash.sh
    2. 触摸屏测试开始:ts_test
    3. 点击或拖动触摸屏,调试软件打印信息如下:
    4. 测试结束后,敲击键盘Ctrl+c结束指令功能。
    5. 重启桌面程序:/opt/qt5.5.1/apps/QDesktop/QDesktop &
1565789885.202699:    559    370    255
1565789885.212566:    559    370    255
1565789885.216374:    559    370    255
1565789885.223272:    559    370    255
1565789885.227069:    559    370    255
1565789885.233829:    559    370    255
1565789885.237626:    559    370    255
1565789885.244181:    559    370    255
1565789885.247748:    559    370    255
1565789885.254948:    559    370    255
1565789885.258735:    559    370    255
1565789885.265564:    559    370    255
1565789885.269363:    559    370    255
1565789885.277486:    559    370      0
  • 显示屏睡眠/唤醒:
    • 睡眠: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 G
  • ITERATIONS 测试的次数,默认是无限
    如具申请 8MB 内存数量测试做 1 次 DDR 测试,指令为:memtester 8M 1,返回内容如下:
memtester version 4.3.0 (32-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffff000
want 8MB (8388608 bytes)
got  8MB (8388608 bytes), trying mlock ...locked.
Loop 1/1:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid 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 "2019-7-9 10:00:00"
    • 将系统时钟同步到硬件时钟:hwclock -w

2.9 查看系统信息

  • 显示操作系统的内核版本号:uname -a
  • 查看系统主机名:cat /etc/hostname
  • 查看系统登录欢迎信息:cat /etc/issue
  • 查看 CPU 相关信息:cat /proc/cpuinfo,返回信息如下:
processor	: 0
model name	: ARMv7 Processor rev 5 (v7l)
BogoMIPS	: 12.00
Features	: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x0
CPU part	: 0xc07
CPU revision	: 5

Hardware	: Freescale i.MX6 Ultralite (Device Tree)
Revision	: 0000
Serial		: 0000000000000000
  • 查看内存相关信息:cat /proc/meminfo,返回信息如下:
MemTotal:         506876 kB
MemFree:          362352 kB
MemAvailable:     355116 kB
Buffers:            5196 kB
Cached:            52744 kB
SwapCached:            0 kB
Active:            55900 kB
Inactive:          38848 kB
Active(anon):      36996 kB
Inactive(anon):      120 kB
Active(file):      18904 kB
Inactive(file):    38728 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:             0 kB
HighFree:              0 kB
LowTotal:         506876 kB
LowFree:          362352 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         36804 kB
Mapped:            26612 kB
Shmem:               312 kB
Slab:               9824 kB
SReclaimable:       3404 kB
SUnreclaim:         6420 kB
KernelStack:         544 kB
PageTables:          748 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      253436 kB
Committed_AS:      76256 kB
VmallocTotal:    1548288 kB
VmallocUsed:        3832 kB
VmallocChunk:    1367948 kB
CmaTotal:         131072 kB
CmaFree:           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,在为接入网络时,返回如下:
eth0      Link encap:Ethernet  HWaddr 56:05:64:2f:c8:56  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1      Link encap:Ethernet  HWaddr 6a:24:68:bb:7e:2e  
          UP BROADCAST MULTICAST DYNAMIC  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions: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.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:66 errors:0 dropped:0 overruns:0 carrier:0
          collisions: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 的特点如下:

  1. I2C 接口,快速模式下波特率可以到 400Kbit/S
  2. 多种工作模式选择:ALS、PS+IR、ALS+PS+IR、PD 等等。
  3. 内建温度补偿电路。
  4. 宽工作温度范围(-30°C ~ +80°C)。
  5. 超小封装,4.1mm x 2.4mm x 1.35mm
  6. 环境光传感器具有 16 为分辨率。
  7. 接近传感器和红外传感器具有 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 特性如下:

  1. 陀螺仪支持 X,Y 和 Z 三轴输出,内部集成 16 位 ADC,测量范围可设置:±250,±
    500,±1000 和±2000°/s。
  2. 加速度计支持 X,Y 和 Z 轴输出,内部集成 16 位 ADC,测量范围可设置:±2g,±
    4g,±4g,±8g 和±16g。
  3. 用户可编程中断。
  4. 内部包含 512 字节的 FIFO。
  5. 内部包含一个数字温度传感器。
  6. 耐 10000g 的冲击。
  7. 支持快速 I2C,速度可达 400KHz。
  8. 支持 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_SW
PAD_CTL_PAD_GPIO1_IO00
在这里插入图片描述
在这里插入图片描述

它们都是跟 GPIO_IO00 有关的寄存器,前者MUX见3.1.2节,后者寄存器图如下,可见其寄存器地址为0X020E02E8,是个32位寄存器,但只用了其中的低 17 位。它是用来配
置 GPIO1_IO00 的,包括速度设置、驱动能力设置、压摆率设置等等。
在这里插入图片描述

  • HYS(bit16):用于使能迟滞比较器,当 IO 作为输入功能的时候有效,用于设置输入接收器的施密特触发器是否使能。如果需要对输入波形进行整形的话可以使能此位。此位为 0 的时候禁止迟滞比较器,为 1 的时候使能迟滞比较器。
  • PUS(bit15:14):用来设置上下拉电阻的,一共有四种选项可以选择:
位设置含义
00100K 下拉
0147K 上拉
10100K 上拉
1122K 上拉
  • PUE(bit13):图中没给出来,当 IO 作为输入的时候,这个位用来设置 IO 使用上下拉还是状态保持器。当为 0 的时候使用状态保持器,当为 1 的时候使用上下拉。状态保持器在IO 作为输入的时候才有用,顾名思义,就是当外部电路断电以后此 IO 口可以保持住以前的状态。
  • PKE(bit12):用来使能或者禁止上下拉/状态保持器功能,为0 时禁止上下拉/状态保持器,为 1 时使能上下拉和状态保持器。
  • ODE(bit11):当 IO 作为输出的时候,此位用来禁止或者使能开路输出,此位为 0 的时候禁止开路输出,当此位为 1 的时候就使能开路输出功能。
  • SPEED(bit7:6):当 IO 用作输出的时候,此位用来设置IO 速度,设置如下表所示:
位设置速度
00低速 50M
01中速 100M
10中速 100M
11最大速度 200M
  • DSE(bit5:3):当 IO 用作输出的时候用来设置 IO 的驱动能力,总共有 8 个可选选项:
位设置速度
000输出驱动关闭
001R0(3.3V 下 R0 是 260Ω,1.8V 下 R0 是 150Ω,接 DDR 的时候是 240Ω)
010R0/2
011R0/3
100R0/4
101R0/5
110R0/6
111R0/7
  • SRE(bit0):设置压摆率,当此位为 0 的时候是低压摆率,当为 1的时候是高压摆率。这里的压摆率就是 IO 电平跳变所需要的时间,比如从 0 到 1 需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如果你的产品要过 EMC 的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO做高速通信的话就可以使用高压摆率。

综上,当 IO 用作 GPIO 的时候需要设置的寄存器,一共有八个:DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和 ISR.

附录


*. 解决中文乱码问题

串口调试终端需要设置为 UTF-8 编码以防止打印时有中文乱码。
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Truffle7电子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值