米尔i.MX6UL开发板Linux操作系统的应用开发

2018年01月12日 09:16    发布者:myir
硬件:米尔i.MX6UL开发板MYD-Y6ULX
简介:MYD-Y6ULX开发板(i.MX6UL开发板)由MYC-Y6ULX核心板和底板组成,基于NXP i.MX6UL处理器或i.MX6ULL处理器可选,MYD-Y6ULX开发板(i.MX6ULL开发板)提供丰富外设硬件,板载了Mini PCIE接口(用于4G模块)及SIM卡槽、WIFI芯片及天线接口、双百兆网口、LCD液晶接口、音频接口、带隔离的CAN,RS485,RS232等。


linux应用开发
本章主要介绍MYD-Y6ULX开发板底板外围硬件设备应用例程的使用。
使用前,需要先安装Yocto提供的SDK工具链,再编译所有例程代码,并拷贝至开发板目录下。
编译应用例程
加载工具链到当前终端后,可以查看gcc的版本信息,确认当前环境已正确加载。
$source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-\
poky-linux-gnueabi
$ ARM-poky-linux-gnueabi-gcc --version
arm-poky-linux-gnueabi-gcc (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编译示例代码:
$cd $DEV_root/04-Sources
$tar xvf example.tar.gz
$cd example
$make  


LCD测试
本例程演示对Linux的FrameBuffer设备操作,实现液晶输出显示RGB颜色和颜色合成测试。 例程基于Linux FrameBuffer API接口开发。 测试前需要把
LCD连接至J3接口上。
米尔科技提供三种LCD模块,Linux默认配置为MY-TFT043RV2。

型号描述
MY-TFT070CV27寸电容屏
MY-TFT070RV27寸电阻屏
MY-TFT043RV24.3寸电阻屏

执行程序后,LCD液晶屏会出现相应颜色,以下是终端输出信息:
# ./framebuffer_test
The framebuffer device was opened successfully.
vinfo.xres=480
vinfo.yres=272
vinfo.bits_per_bits=16
vinfo.xoffset=0
vinfo.yoffset=0
red.offset=11
green.offset=5
blue.offset=0
transp.offset=0
finfo.line_length=960
finfo.type = PACKED_PIXELS
The framebuffer device was mapped to memory successfully.
color: red rgb_val: 0000F800
color: green rgb_val: 000007E0
color: blue rgb_val: 0000001F
color: r & g rgb_val: 0000FFE0
color: g & b rgb_val: 000007FF
color: r & b rgb_val: 0000F81F
color: white rgb_val: 0000FFFF
color: black rgb_val: 00000000
支持MY-TFT070RV2的配置方法
MYD-Y6ULX开发板中提供的Linux代码已经支持该模块的显示和触摸功能。 MY-TFT070RV2的触摸功能是通过ADC采样方式,dts代码中已配置好,只
需要启用相应功能即要可。
第一步,编辑"arch/arm/boot/dts/myb-y6ull-14x14.dts"文件,修改tsc的status属性为okay。
&tsc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_tsc>;
xnur-GPIO = <&gpio1 3 GPIO_ACTIVE_LOW>;
measure-delay-time = <0xfffff>;
pre-charge-time = <0xffff>;
status = "okay";
};
第二步,将默认的4.3寸屏莫的配置注释,并打开7.0寸的配置。 找到lcfif节点下的display-timings节点,修改如下:
display-timings {
native-mode = <&timing0>;
/*
timing0: timing0 {
clock-frequency = <9200000>
hsync-len = <41>;
vback-porch = <2>;
vfront-porch = <4>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
*/
timing0: timing0 {
clock-frequency = <33000000>;
hactive = <800>;
vactive = <480>;
hfront-porch = <210>;
hback-porch = <46>;
hsync-len = <1>;
vback-porch = <22>;
vfront-porch = <23>;
vsync-len = <20>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <1>;
};  

};
支持MY-TFT070CV2的配置方法
MY-TFT070CV2模块的触摸使用的是I2C方式通讯,丛设备已添加到i2c2控制器上。 使用前禁用tsc控制器,再启用7寸屏的配置参数即可。
第一步,编辑"arch/arm/boot/dts/myb-y6ull-14x14.dts"文件,修改tsc的status属性为disabled。
&tsc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_tsc>;
xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
measure-delay-time = <0xfffff>;
pre-charge-time = <0xffff>;
status = "disabled";
};
第二步,将默认的4.3寸屏莫的配置注释,并打开7.0寸的配置。 找到lcfif节点下的display-timings节点,修改如下:
display-timings {
native-mode = <&timing0>;
/*
timing0: timing0 {
clock-frequency = <9200000>
hsync-len = <41>;
vback-porch = <2>;
vfront-porch = <4>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <0>;
};
*/
timing0: timing0 {
clock-frequency = <33000000>;
hactive = <800>;
vactive = <480>;
hfront-porch = <210>;
hback-porch = <46>;
hsync-len = <1>;
vback-porch = <22>;
vfront-porch = <23>;
vsync-len = <20>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <1>;
};
};

触摸测试
MYD-Y6ULX支持两种触摸方式,电容和电阻。 米尔科技可提供两种带触摸的液晶,7寸电容MY-TFT070CV2和4.3寸电阻MY-TFT043RV2。
触摸测试可以使用ts_calibrate和ts_test命令,ts_calibrate用于触摸校验,ts_test用于测试。 其中,命令需要变量"TSLIB_TSDEVICE"来找到触摸设
备,不同触摸方式的设备节点不一定相同,请对应设备填写。
# export TSLIB_TSDEVICE=/dev/input/event1
# ts_calibrate
//测试触摸屏
# ts_test

Ethernet 测试
本例使用Linux sokect API,实现简单的C/S结构的程序,两个程序通过TCP/IP协议栈通信。 将可执行程序arm_CLIent拷贝至开发板,pc_server拷贝
至PC,将开发板和PC接入网络。
在 PC 上配置IP并运行服务程序:
$ sudo ifconfig eth0 192.168.1.111
$ ./pc_server
REC FROM: 192.168.1.222
在开发板上运行客户程序,将看到所发送的信息:
# ifconfig eth0 192.168.1.222
# ./arm_client 192.168.1.111
form server: Make Your idea Real!  


GPIO-KEY 测试
本例演示如何在Linux用户空间读取按键状态和键值。 运行gpio_key程序后,按下或释放S2按键,串口会输出相应按键的状态信息。 按下"Ctrl-C"可
退出程序。
在开发板的控制终端上执行程序:
# ./gpio_key /dev/input/event2
Hit any key on board ......
key 2 Pressed
key 2 Released
key 2 Pressed
key 2 Released  


GPIO-LED 测试
本例程演示使用Linux系统API操作开发板上的LED灯,D30。 运行程序后,D30闪烁。 按下"Ctrl-C"可结束程序。
# ./gpio_led /sys/class/leds/user/brightness  


USB Host 测试
使用USB存储设备插入USB HOST(J6)接口,调试串口会输出检测设备信息。 同时,使用将此存储设备挂载至linux系统下对其读写。
# usb 1-2: USB disconnect, device number 6
usb 1-2: new high-speed USB device number 7 using atmel-ehci
usb 1-2: New USB device found, idVendor=0bda, idProduct=0316
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-2: Product: USB3.0-CRW
usb 1-2: Manufacturer: Generic
usb 1-2: SerialNumber: 20120501030900000
usb-storage 1-2:1.0: USB Mass Storage device detected
scsi host5: usb-storage 1-2:1.0
scsi 5:0:0:0: Direct-Access Generic- SD/MMC 1.00 PQ:
0 ANSI: 4
sd 5:0:0:0: 31116288 512-byte logical blocks: (15.9 GB/14.8
GiB)
sd 5:0:0:0: Write Protect is off
sd 5:0:0:0: Write cache: disabled, read cache: enabled, doesn't
support DPO or FUA
sda: sda1 sda2
sd 5:0:0:0: Attached SCSI removable disk
# mount /dev/sda1 /mnt/
# echo "hello" > /mnt/hello.txt
# cat /mnt/hello.txt
hello  


USB Device测试
本例程演示使用开发板的MICro USB接口(J26)作为Device模式,可以将指定的文件或设备模拟为设备,连接到其它USB HOST设备。 这里把内存作为
存储设备提供给HOST设备。
开发板上使用modprobe加载驱动:
#mkfs.vfat /dev/ram1
#modprobe g_mass_storage file=/dev/ram1 removable=1 \
iSerialNumber="1234"
[ 3048.950498] Mass Storage Function, version: 2009/09/11
[ 3048.982245] LUN: removable file: (no medium)
[ 3048.997849] LUN: removable file: /dev/ram1
[ 3049.000674] Number of LUNs=1
[ 3049.002272] Number of LUNs=1
[ 3049.023990] g_mass_storage gadget: Mass Storage Gadget,
version: 2009/09/11
[ 3049.029682] g_mass_storage gadget: g_mass_storage ready
[ 3094.766373] g_mass_storage gadget: high-speed config
#1: Linux File-Backed Storage
Linux PC机上查看到有USB设备接入,SerialNumber为"1234",Manufacturer是内核构建版本号:
#dmesg | tail -n 20
usb 1-1: USB disconnect, device number 102
sd 3:0:0:0: Synchronizing SCSI cache
sd 3:0:0:0: Synchronize Cache(10)
failed: Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
usb 1-1: new high-speed USB device number 103
using xhci_hcd
usb 1-1: New USB device found, idVendor=0525,
idProduct=a4a5
usb 1-1: New USB device strings: Mfr=3, Produ
ct=4, SerialNumber=5
usb 1-1: Product: Mass Storage Gadget
usb 1-1: Manufacturer: Linux 4.1.15-1.2.0+g8d9
8da6 with 2184000.usb
usb 1-1: SerialNumber: 1234
usb-storage 1-1:1.0: USB Mass Storage device
detected
usb-storage 1-1:1.0: Quirks match for vid 0525
pid a4a5: 10000
scsi host3: usb-storage 1-1:1.0
scsi 3:0:0:0: Direct-Access Linux FileStor Gadget 0401 PQ: 0 ANSI: 2
sd 3:0:0:0: Attached scsi generic sg1 type 0
sd 3:0:0:0: 131072 512-byte logical blocks:
(67.1 MB/64.0 MiB)
sd 3:0:0:0: Write Protect is off
sd 3:0:0:0: Mode Sense: 0f 00 00 00
sd 3:0:0:0: Write cache: enabled, read cache:
enabled, doesn't support DPO or FUA
sdb:
sd 3:0:0:0: Attached SCSI removable disk  


RS485 测试
本例程演示如何使用 Linux Serial API编程,使用RS485接口,实现数据发送和接收,详细请参考源码。
硬件连接
MYD-Y6ULX上有一个RS485接口(J10),可以将A,B信号线与另外的RS485设备相连接。 或者是USB转RS485的转换器设备。
软件测试
将编译出来的可执行程序拷贝至MYD-Y6ULX开发板系统内。 MYD-Y6ULX作为发送端执行以下命令,另外一端的设备可以接数据。
# ./rs485_write -d /dev/ttymxc3 -b 4800 -e 1
SEND: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
SEND: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
SEND: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
SEND: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
另一个设备作为接收端:
# ./rs485_read -d /dev/ttymxc3 -b 4800 -e 1
RECV: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
RECV: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
RECV: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
RECV: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14  


RS232 测试
本例程演示如何使用 Linux Serial API编程,使用RS232接口,实现数据发送和接收,详细请参考源码。
硬件连接
MYD-Y6ULX上有一个RS232接口(J10),可以将TXD,RXD信号线与另外的RS232设备相连接。 或者是USB转RS232的转换器设备,此处使用USB转
RS232设备连接到PC。
软件测试
将编译出来的可执行程序拷贝至MYD-Y6ULX开发板系统内。 MYD-Y6ULX作为发送端执行以下命令,PC端接收数据。
# ./UART_test -d /dev/ttymxc1 -b 115200
/dev/ttyS1 RECV 10 total
/dev/ttyS1 RECV: 1234567890
/dev/ttyS1 RECV 10 total
/dev/ttyS1 RECV: 1234567890
/dev/ttyS1 RECV 10 total
/dev/ttyS1 RECV: 1234567890
/dev/ttyS1 RECV 10 total
/dev/ttyS1 RECV: 1234567890
在PC端可以使用串口工具查看接收的数据。  


CAN Bus 测试
本例程演示使用Linux socket CAN API,使用MYD-Y6ULX上的CAN总线接口发送和接收数据。 将can_send和can_receive拷贝至开发板。 执行以下步
骤:
硬件连接
MYD-Y6ULX开发板有一个CAN总线接口(J10),将H,L信号线与另外的CAN通讯设备或USB CAN转换器相连接。
软件测试
配置开发板上CAN0通信波特率都设置为 50kbps,并使能CAN0设备
Linux上可以使用两种工具来配置CAN设备,canconfig和ip,MYD-Y6ULX附带的系统默认使用ip命令。 canconfig命令配置:
# canconfig can0 bitrate 50000 ctrlmode triple-sampling on
# canconfig can0 start
ip命令配置
# ip link set can0 type can bitrate 50000 triple-sampling on
# ifconfig can0 up
CAN收发测试可以使用系统附带的cansend、 candump命令,也可以使用资源包中CAN收发例程。
MYD-Y6ULX作为发送端:
使用cansend发送数据到CAN总线:
# cansend can0 100#01.02.03.04.05.06.07.08
can_send例程运行后会一直发送数据,直到ctrl + c结束。
# ./can_send -d can0 -i 100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
其他设备作为接收端:
使用candump接收CAN数据:
# candump can0
# can0 100 01 02 03 04 05 06 07 08
can_receive例程接收来自CAN总线的数据:
# ./can_receive -d can0
can0 0x100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
can0 0x100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
can0 0x100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
can0 0x100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88  


Audio 测试
硬件连接
本例程演示使用Linux系统中的arecord/aplay命令对音频接口录音和放音。 需要使用两头3.5mm的音频AUX线,从电脑音频输出孔和开发板的LINE
IN(J5)接口连接,HEADERPHONE(J4)连接耳机。
软件操作
在电脑中播放音频文件,执行arecord命令会先将LINE IN中的音频录制并保存为test.wav文件。 运行一分钟后再按ctrl + c来停止。
# arecord -f cd test.wav
执行aplay命令来播放上面录制好的音频文件。
# aplay test.wav  


CAMERA 测试
MYD-Y6ULX上提供一个并行Camera接口(J9),可以连接MY-CAM011B型号的Camera模块,模块之间使用FPC线连接。 由于信号序列影响,请勿直接
将其它型号的Camera的模块插入,否则会引起模块或开发板的损坏。
本例程演示使用一款开源的视频流软件uvc_stream,可以将Camera设备捕捉的数据显示在web页面。
硬件连接
使用FPC数据线将MYB-CAM011B模块和MYD-Y6ULX板上的J9接口相连接。
软件操作
uvc_stream是通过的网络传输数据,需要先设置好MYD-Y6ULX板的以太网IP地址,对应系统中的eth0设备。 Linux系统中的MY-CAM011B模块的设
备,可通通过v4l2-ctl命令来查询到,输出信息的i.MX6S_CSI表示Camera控制器,对应设备是/dev/video1。 uvc_stream参数中'-y'是使用yuyv方
式,'-P'后面是设置web界面的登录密码,用户名默认为uvc_user。 '-r'是指定分辨率,当前仅支持800x600。 可以用ctrl + c来停止。
# ifconfig eth1 192.168.1.42
# v4l2-ctl --list-devices
i.MX6S_CSI (platform:21c4000.csi):
/dev/video1
pxp (pxp_v4l2):
/dev/video0
# ./uvc_stream -d /dev/video1 -y -P 123456 -r 800x600
uvc_stream提供两种web功能,snapshot和streaming。 snapshot的请求URL是snapshot.jpeg,streaming的请求URL是stream.mjpeg。 PC和开发板
在同一网络内时,打开流览器,输入地址:,可以看到有登录框,输入用户名为uvc_user,密码为
123456,就可以看到从MY-CAM011B实时采集到的图像了。  


wifi测试
MYD-Y6ULX开发板提供一个WiFi模块(J11),支持Client模式。
硬件连接
将附带SMA接口的天线安装在开发板的J12位置。
Client模式
Client模式是用于将WiFi模块作为客户端设备,主动连接于路由器或其它提供无线热点的设备。
系统中已经加入WiFi模块的驱动,启动后会自动加载相应驱动。 驱动加载成功后会出现对应的wlan0网络设备,使用ifconfig命令来确认。
# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr a0:2c:36:60:ee:e0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3388 errors:0 dropped:10 overruns:0 frame:0
TX packets:37 errors:0 dropped:3 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:395459 (386.1 KiB) TX bytes:6074 (5.9 KiB)
下面使用wpa_passphrase生成对应WiFi热点SSID的密码,然后由wpa_supplicant命令实现WiFi模块与WiFi热点的连接。
# wpa_passphrase "MYiRTech" >> wifi.conf
12345678
# cat wifi.conf
network={
ssid="MYiRTech"
#psk="12345678"
psk=b96d9a5de2d9480ad5f987857e20216b47a0c4bf43397825ba909438bc52aaff
} #
wpa_supplicant -D wext -B -i wlan0 -c wifi.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
R8188EU: Firmware Version 11, SubVersion 1, Signature 0x88e1
MAC Address = a0:2c:36:60:ee:e0
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
ioctl: Operation not permitted
R8188EU: INFO indicate disassoc
连接成功后,使用udhcpc获取IP地址后,就可以使用了。
# udhcpc -b -i wlan0 -R
# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr a0:2c:36:60:ee:e0
inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5577 errors:0 dropped:15 overruns:0 frame:0
TX packets:46 errors:0 dropped:3 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:651690 (636.4 KiB) TX bytes:7472 (7.2 KiB)  


4G模块 测试
MYD-Y6ULX开发板提供一个支持4G模块的PCI-E插槽,此插槽使用USB数据线与4G模块通讯。 当前仅支持移远EC20型号。
注意:移远EC20模块为选购配件,请向米尔科技购买。
硬件连接
安装移远EC20模块到PCI-E插槽(U12)。
将两头I-PEX接口的天线安装在移远EC20模块和开发板的J25位置。
安装SMA天线到开发板的J24位置。
系统中已经加入4G模块的驱动,启动后会自动加载相应驱动,驱动加载成功后会出现对应的/dev/ttyUSB*设备,查看: