一、连接测试
在上一章测试了飞凌OKMX93的linux环境配置功能。我主要是通过TF烧录程序然后通过TF卡启动。
1.串口登录
串口登录,文件给出了是通过putty进行串口登录,按照手册给的指示登录连接开发板。需要注意的是串口登录要安装串口驱动,不然无法识别串口。我举得串口登录还是很不方便,我还是习惯通过网络登录。
2.网络登录
该开发板支持SSH网络登录,支持FTP文件传输。通过网线把电脑和开发板连接起来。开发板连接的口是边上的口。开发板上电,这时注意蓝色的灯心跳闪烁。然后电脑进入cmd界面,输入ping指令查看电脑和开发板的网络连接状态。
上面是飞凌资料中的图片,我没截图。可以看到有数据返回,表示网络连接正常。
下面通过putty软件通过SSH与开发板的网络进行连接。安装资料连接后就可以正常测试了。关于一系列问题在资料中也有解决办法我就不赘述了。
二、界面功能测试
为了方便提高逼格,我把我之前买的飞凌套件中的屏幕拿来用了。这样更方便测试飞凌资料提供的录音和播放音乐等。插入耳机,然后安装资料提示,测试录音和播放音乐都正常。下面介绍一些命令行工具的使用。
1.点灯测试
无论哪一款开发板到手的第一件事就是点灯(点灯大师属实了)。因为核心板子上有一个蓝色的LED位可控的灯(底板也有一个,我用核心板作为演示即可),前面也提到过这也是心跳灯,我们要想控制这个灯就得把心跳这个功能取消。
修改源码中的设备树文件即可,即OKMX93-linux-sdk/OKMX93-linux-kernel/arch/arm64/boot/dts/freescale/OK-MX9352-C.dts打开。将将 led-0 节点属性 state=”on”改为”off”, linux,default-trigger = "heartbeat"改为”none”。至此修改完成,下面点灯,
程序如下:
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_led>;
led-0 {
label = "heartbeat";
linux,default-trigger = "heartbeat";
gpios = <&gpio4 29 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
led-1 {
label = "led1";
linux,default-trigger = "timer";
gpios = <&gpio4 28 GPIO_ACIVE_HIGH>;
default-state = "on";
};
};
如此实现了灯的闪烁。
还有一种方法就是手动修改LED状态,这也是飞凌资料给的方法。
进入命令行查看出发条件
root@ok-mx93:/# cat /sys/class/leds/heartbeat/trigger
none bluetooth-power rfkill-any rfkill-none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock
kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock
kbd-ctrlrlock timer disk-activity disk-read disk-write ide-disk [heartbeat] cpu cpu0 cpu1 mmc0
default-on panic mmc1 hci0-power rfkill0 rfkill1
其中[heartbeat]表示当前的触发条件为系统心跳灯,往 trigger 中写上述字符串,可以修改触发条件。
下面就是我们进行控制了,
将led的出发条件设置位none,我们就可以通过命令来控制led的亮灭了。
root@ok-mx93:/# echo none > /sys/class/leds/heartbeat/trigger //设置触发条件
root@ok-mx93:/# echo 1 > /sys/class/leds/heartbeat/brightness //点亮 led 灯
root@ok-mx93:/# echo 0 > /sys/class/leds/heartbeat/brightness //熄灭 led 灯
控制完成后,我们需要把这个灯改为心跳灯。即
root@ok-mx93:/# echo heartbeat > /sys/class/leds/heartbeat/trigger //设置触发条件为 heartbeat
2.串口测试
按照飞凌的资料,目前进行USB串口的测试
在测试前,关闭电源,短接 P19 的第 5 脚和第 8 脚,使 ttyUSB1 的接收引脚和 ttyUSB2 的发送引脚相连。
进入命令窗口,设置ttyUSB1 为接收模式
root@ok-mx93:~# fltest_uarttest -d /dev/ttyUSB1 r &
[1] 499
Welcome to uart test
设置 ttyUSB2 为发送模式
root@ok-mx93:~# fltest_uarttest -d /dev/ttyUSB2 w
Welcome to uart test
recv data:F2JgWJfEWGOvSOjY5uulRQzDbJ7wG
send data:F2JgWJfEWGOvSOjY5uulRQzDbJ7wG
recv data:zeYc5YNZh3pb7Ubf9O6QjVAXW8FFA
send data:zeYc5YNZh3pb7Ubf9O6QjVAXW8FFA
recv data:G9c4xfHFFbk7hyiJeGLrj2rwMtdQU
send data:G9c4xfHFFbk7hyiJeGLrj2rwMtdQU
recv data:SwQ1wGSMwhvOQ6znGjvI8iERqIroV
send data:SwQ1wGSMwhvOQ6znGjvI8iERqIroV
recv data:coHL6O8e6uCM9BEyhF9flnQUb3lYs
^C //停止发送
root@ok-mx93:~#
ttyUSB1 收到了 ttyUSB2 发送的数据,测试成功。
接下来测试RS485串口
ttyUSB0 和 ttyUSB3 被设计为 485 串口。连接两个 485 串口,需要 A 引脚和 A 引脚相连, B 引脚和 B 引脚相连,即: P27 的 8 脚连接 11 脚, 9 脚连接 12 脚。原理图如下所示:
进入命令行串口,设置 ttyUSB0 为接收模式
root@ok-mx93:~# fltest_uarttest -d /dev/ttyUSB0 r &
[1] 493
Welcome to uart test
设置 ttyUSB3 为发送模式
root@ok-mx93:~# fltest_uarttest -d /dev/ttyUSB3 w
Welcome to uart test
recv data:bbLolQiCfhrTq02H3JY9ia0cJYzhx
send data:bbLolQiCfhrTq02H3JY9ia0cJYzhx
recv data:FJHEZWgtQ7tHKBcWT1TIG1FV5L38z
send data:FJHEZWgtQ7tHKBcWT1TIG1FV5L38z
recv data:CPzKsWvmr1fLLyRNdECsws7TxzMdH
send data:CPzKsWvmr1fLLyRNdECsws7TxzMdH
recv data:DSkpCnMVEN7A3ZXbBYpODqkZvDMKq
send data:DSkpCnMVEN7A3ZXbBYpODqkZvDMKq
recv data:W9kQgO9ldb7lFNcrYN1CyBu7Ei6js
send data:W9kQgO9ldb7lFNcrYN1CyBu7Ei6js
recv data:rAFYIuN73PennZAZ75UCf6amRvHcY
send data:rAFYIuN73PennZAZ75UCf6amRvHcY
recv data:MB1x8106kVIz3Ep3D6hjzicQ24jQR
send data:MB1x8106kVIz3Ep3D6hjzicQ24jQR
recv data:IO1XPPs9O5XQ2n7GbPXDckXBnKkJH
send data:IO1XPPs9O5XQ2n7GbPXDckXBnKkJH
^C //停止发送
root@ok-mx93:~#
可以看到ttyUSB0 收到了 ttyUSB3 发送的数据,测试成功。
3.摄像头测试
OV5645 MIPI 摄像头, 同时也支持 UVC 摄像头。首先来测试一下 UVC 摄像头,将 USB 摄像头插入开发板,将自动安装 uvc 添加设备节点。
我们查看是否能够识别UVC Camera设备节点,进入命令行
root@ok-mx93:~# v4l2-ctl --list-devices
[ 22.100156] usb 2-1.2: reset high-speed USB device number 4 using ci_hdrc
UVC Camera (046d:0825) (usb-ci_hdrc.1-1.2):
/dev/video0
/dev/video1
/dev/media0
可以看到,识别成功。接下来进行摄像头预览
root@ok-mx93:~# gst-launch-1.0 v4l2src device=/dev/video0 io-mode=2 ! \
video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! \
autovideosink
[ 183.497378] usb 1-1.1: reset high-speed USB device number 5 using xhci-hcd
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
通过屏幕就可以看到摄像头的画面了。下面是拍照功能
root@ok-mx93:~# gst-launch-1.0 v4l2src device=/dev/video0 io-mode=2 num-buffers=1 ! \
video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! jpegenc ! filesink \
location=pic.jpeg
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
Got EOS from element "pipeline0".
Execution ended after 0:00:01.183575708
Setting pipeline to NULL ...
Freeing pipeline ...
root@ok-mx93:~# ls
pic.jpeg
这个并不能直接预览,而是需要将pic.jpeg这个文件拷贝的电脑上,打开就能够看到。
4.GPIO测试
需要注意的是飞凌的GPIO是底板的P6引出的,和RGB屏冲突了。所以智能不用屏幕了。因为刚开始,我们就是用的RGB显示屏,即P6的GPIO已经被RGB的显示驱动占用了,所以需要将 OK-MX9352-C.dts 中 board_gpio 的 status 改为status = “okay”,再编译替换设备树。
查看所有的GPIO设备
root@ok-mx93:~# gpiodetect
gpiochip0 [43810080.gpio] (32 lines)
gpiochip1 [43820080.gpio] (32 lines)
gpiochip2 [43830080.gpio] (32 lines)
gpiochip3 [47400080.gpio] (32 lines)
P6对应的GPIO为设备树中的gpio@43810080,即gpiochip0。
GPIO0为p6的第28脚,其他可以参考原理图。设置高电平
root@ok-mx93:~# gpioset gpiochip0 0=1
可以拿万用表测量该引脚是否为高电平,也可以直接获取改引脚的状态。
root@ok-mx93:~# gpioget gpiochip0
1
设置引脚为低电平
root@ok-mx93:~# gpioset gpiochip0 0=0
5.按键测试
图中的K1即为用户按键
首先我们需要查看,当按键按下去时,系统识别的事件是什么
root@ok-mx93:~# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="44440000.bbnsm:pwrkey"
P: Phys=bbnsm-pwrkey/input0
S:
Sysfs=/devices/platform/soc@0/44000000.bus/44440000.bbnsm/44440000.bbnsm:pwrkey/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/keys/input/input1
U: Uniq=
H: Handlers=kbd event1
B: PROP=0
B: EV=3
B: KEY=8000000000 0
事件为event1
接下来可以进行测试了
root@ok-mx93:~# evtest /dev/input/event1
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "keys"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 103 (KEY_UP)
Properties:
Testing ... (interrupt to exit)
Event: time 1664183390.337706, type 1 (EV_KEY), code 103 (KEY_UP), value 1
Event: time 1664183390.337706, -------------- SYN_REPORT ------------
Event: time 1664183390.511901, type 1 (EV_KEY), code 103 (KEY_UP), value 0
Event: time 1664183390.511901, -------------- SYN_REPORT ------------
当按键按下去和抬起来时,不同的信息如上所示。测试成功
三、网上其他大佬的测试
这一部分我主要是看到网上有一位大佬的测试,我感觉很牛逼,就借鉴了。这个大佬在CSDN有一个账号名字为码农爱学习,在B站也有一个账号叫作码农爱学习-B站
这个大佬实现了通过web界面进行电灯的,我看了感觉很牛逼。
这里使用html语言设计一个LED的控制界面。
OK-MX9352开发板上有两个可以控制的LED,一个位于核心板上,另一个位于底板上,在设置html时,可以使用select功能实现一个下拉选项,选择要控制的LED。
另外,LED也有多种控制模式,如基础的开关模式(设置开,或关),心跳灯模式,定时器模式(设置亮的时间和灭的时间),也使用下拉选项的方式。
选择不同的控制模式后,为了能动态展示不同模式下的操作功能,比如开关模式下需要显示开和关的按钮,心跳灯模式则不需要额外的配置,定时器模式则需要两个输入框来设置亮的时间和灭的时间。这里使用script功能,来实现此功能,通过读取网页中当前LED模式的值,来进行对应控件的显示或隐藏。
完整的html代码如下,led.html:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>led control</title>
</head>
<body background="background.png"
style="background-repeat:no-repeat;
background-size:100% 100%;
background-attachment: fixed;">
<center><br><br><br><br>
<h1 align="center">基于飞凌OK-MX9352的web控制LED灯</h1>
<!--新建一个表单,动作链接到开发板的/cgi-bin/led.cgi,采用的方法为GET-->
<form action="led.cgi" method="get">
<p align="center">LED选择:
<select name="led_id">
<option value="LED0" selected>核心板LED</option>
<option value="LED1">底板LED</option>
</select></p>
<p align="center">模式选择:
<select name="led_mode" onclick="select_event(this.options[this.selectedIndex].value);">
<option value="ONOFF" selected>开关模式</option>
<option value="HEARTBEAT">心跳灯模式</option>
<option value="TIMER">定时器灯模式</option>
</select></p>
<p align="center" id = "id_led_time_on" >亮时间:<input type="text" value=500 name="led_time_on"/></p>
<p align="center" id = "id_led_time_off" >灭时间:<input type="text" value=500 name="led_time_off"/></p>
<p align="center" id = "id_led_onoff">LED开关:
<input type="radio" name="led_val" value="ON" checked>开
<input type="radio" name="led_val" value="OFF">关
</p><br><br>
<p align="center">
<input type="submit" value="确认"/>
<input type="reset" value="返回"/>
</p>
</form>
</center>
<script>
document.getElementById("id_led_time_on").style.display = "none";
document.getElementById("id_led_time_off").style.display = "none";
</script>
<script>
function select_event(value)
{
document.getElementById("id_led_onoff").style.display = "none";
document.getElementById("id_led_time_on").style.display = "none";
document.getElementById("id_led_time_off").style.display = "none";
if (value === "ONOFF")
{
document.getElementById("id_led_onoff").style.display = "";
}
else if (value === "TIMER")
{
document.getElementById("id_led_time_on").style.display = "";
document.getElementById("id_led_time_off").style.display = "";
}
}
</script>
</body>
</html>
————————————————
版权声明:本文为CSDN博主「码农爱学习」的原创文章,遵循CC 4.0 BY-SA版权协议,原文链接:https://blog.csdn.net/hbsyaaa/article/details/130118278
上面时他的一部分web页面设计。我就不多抄了。
总结
到这里,对于飞凌OK-iMX9352-C测评到此结束。开发板很强大,提供的学习资料我也走了一遍(个别在我的电脑上有问题的,我也给出了相应的解决办法)。我个人认为,飞凌系列的产品有一定的入学门槛,初学者需要做好准备。当然学会了飞凌开发,也很牛逼。因为飞凌还可以web等一系列开发真的很有前景。