收到飞凌嵌入式OK3568-C
开发板已经三个星期了,这段时间有空的时候一直研究这块板子,中间遇到了一些问题,也有不少心得,就作为献给飞凌嵌入式和
电子发烧友的一份满意答卷,这个帖子我会尽可能详细地从我自己的各个方面去评测这块板子。
首先在上电之前介绍一下OK3568-C开发板的各个接口,HDMI显示接口一个,USB2.0 HOST接口两个,USB3.0 HOST/OTG接口一个,网口两个,WIFI模块一个,PCIE接口两个,其中一个与NVME固态硬盘接口复用。值得注意的是,飞凌的大多数开发板都喜欢用板载WIFI模块+3个USB接口的布局,这一点真的非常赞,因为在嵌入式开发尤其是多板
通信中,USB接口用的场合是非常多的,比如可以用一个USB接口连接HIDRAW设备,一个接口连接UVC免驱摄像头,或者是USB触摸屏,或者是USB声卡等,小小的USB接口可以实现绝大多数设备的互联,而OK3568-C开发板的USB3.0接口更是可以切换HOST或OTG模式,烧录系统的时候用OTG侧的接口,连接设备的时候用HOST侧的接口,非常人性化。
通电之后,开发板会自动进入烧录于EMMC的系统,是用YOCTO方式搭建的,HDMI可以直接输出正在运行的Demo程序:
直接用板上写着DEBUG字样的USB Typec接口即可进入串口终端,使用使用串口终端的uname -r指令查看内核版本:
- fltest_spidev_test -D /dev/spidev2.0
- fltest_uarttest -d /dev/ttyS3
- fltest_uarttest -d /dev/ttyS4
- fltest_uarttest -d /dev/ttyS5
复制代码
分别运行SPI2 UART3串口 UART4串口的回环收发,注意要先用跳帽短接板上的SPI2的MISO MOSI,UART4的TX RX,UART5的TX RX:
其中未短接的UART3没有数据,SPI2 UART4 UART5均有数据:
然后是蓝牙模块测试,这个测试主要是测试蓝牙图片传输功能,依次在终端中输入指令:
- [root@ok3568:/]# bluetoothctl //打开 bluez 蓝牙工具
- Agent registered
- [bluetooth]# power on //启动蓝牙设备
- Changing power on succeeded
- [bluetooth]# pairable on //设置为配对模式
- Changing pairable on succeeded
- [bluetooth]# discoverable on //设置为可发现模式
- Changing discoverable on succeeded
- [CHG] Controller B4:8C:9D:73:C7:60 Discoverable: yes
- [bluetooth]# agent on //启动代理
- Agent is already registered
- [bluetooth]# default-agent
- Default agent request successful
- //此时,打开手机蓝牙进行扫描,如果长时间未扫描到请重复执行
- [bluetooth]# discoverable on //设置当前代理为默认
复制代码
在手机上连接蓝牙设备:
使用蓝牙传输图片:
为了方便蓝牙图片测试,我这里先使用eth1网口连接电脑,以便进行SSH登录,可以看到图片传输成功了:
蓝牙模块测试完毕之后,还有一个重头戏就是NPU功能测试了:
- fltest_opencv_rknn_ssd /userdata/model/ssd_inception_v2.rknn /userdata/model/road.bmp
复制代码
可以看到准确度真的非常高,即使是像素点非常小的人们,也能轻易识别:
- Loading model ...
- rknn_init ...
- model input num: 1, output num: 2
- input tensors:
- index=0 name=Preprocessor/sub:0 n_dims=4 dims=[1 300 300 3] n_elems=270000 size=270000 fmt=0 type=3 qnt_type=2 fl=0 zp=0 scale=0.007812
- output tensors:
- index=0 name=concat:0 n_dims=4 dims=[1 1917 1 4] n_elems=7668 size=30672 fmt=0 type=0 qnt_type=2 fl=0 zp=53 scale=0.089455
- index=1 name=concat_1:0 n_dims=4 dims=[1 1917 91 1] n_elems=174447 size=697788 fmt=0 type=0 qnt_type=2 fl=0 zp=53 scale=0.143593
- rknn_run
- loadLabelName
- ssd - loadLabelName /userdata/model/coco_labels_list.txt
- loadBoxPriors
- person @ (13 125 59 212) 0.984696
- person @ (110 119 152 197) 0.969119
- bicycle @ (171 165 278 234) 0.969119
- person @ (206 113 256 216) 0.964519
- car @ (146 133 216 170) 0.959264
- person @ (49 133 58 156) 0.606060
- person @ (83 134 92 158) 0.606060
- person @ (96 135 106 162) 0.464163
复制代码
效果非常好,不仅对飞凌OK358-C开发板点赞,更对RK3568处理器点赞!这个Demo例程还会在/root路径下生成NPU Tensorflow处理完毕后的结果图,名为output.jpg,上面清晰地用蓝框和标签文字描绘了图像物体识别的结果:
最后就是针对于USB摄像头的测试了,这个相比之下就很常见,但是正因为常见,所以更要重视,使用例程为
再加上一个有关多媒体和智能家居相关应用的测试,使用HDMI屏播放音乐:
- gst-play-1.0/userdata/media/test.mp3 --audiosink="alsasink device=hw:1,0"
复制代码
这个演示效果需要发B站视频。
Demo中的大部分常用功能测试完毕,接下来就是内核源码编译和系统烧录的事情了,内核源码编译过程可以说顺利,也可以说不顺利,说是顺利,那就是中途没遇到太多障碍,也没有出现编译报错的现象,说是不顺利,那就是内核源码不能进行二次编译,不然还是会出错。飞凌OK358-C开发板的内核源码非常非常大,分为多个压缩分卷,内核源码压缩包合并后大小达到7.57GB,编译完成后更是达到了可怕的70多GB:
编译内核源码时需要安装多个软件:
- apt install device-tree-compiler bison flex libssl-dev liblz4-tool git time expect g++ rsync cmake texinfo fakeroot
- export FORCE_UNSAFE_CONFIGURE=1
复制代码
编译完成之后,会在内核源码路径的IMAGE目录生成对应的镜像文件:
这些个镜像文件不是给SD卡直接复制黏贴用的,需要用OTG方式烧录,具体可看本帖下一环节,OTG方式烧录系统。
OTG方式烧录系统需要安装瑞芯微厂家给出的USBOTG驱动,在资料压缩包里面有:
官方给出的方式是烧录整个update.img文件,文件位置是在这里:
当然我们也可以进行分步烧录,这个环节可以在后面单独开帖子进行说明——值得注意的是,如果不想使用整体镜像打包的方式,那就必须进行分步烧录,将rootfs.img也就是文件系统的镜像文件压缩包区别开来。
开机时同时按下reset和recovery按键,然后松开reset按键,电脑安装了相应驱动之后就会识别OTG设备为loader设备:
然后使用一键烧录方式即可完成烧录:
本帖的最后,再放上官方给出的例程,有关于在电脑虚拟机环境下搭建QT交叉编译工程,需要在任意虚拟机下安装qtcreator和qt5核心软件:
- apt install qtcreator qt5-default
复制代码
打开qt5开发环境之后,在选项->Kits->编译器界面下,设置内核源码路径下的GCC和G++交叉编译链:
- /home/OK3568-linux-source/buildroot/output/OK3568/host/bin/aarch64-linux-gcc
- /home/OK3568-linux-source/buildroot/output/OK3568/host/bin/aarch64-linux-g++
复制代码
用同样的方式添加qmake和Kits:
最后编译生成可执行文件:
运行效果:
0