作者ID:VR小杰
本次开箱的 D133CBS KunLun Pi 开发板,正面配备了一块 4.3 寸的电容触摸屏,开机即用,系统内置主菜单和丰富的 demo 演示程序,方便用户快速体验各项功能。
开发板开箱及介绍

开发板背面有丰富的接口和模块布局,便于扩展和调试。

主控芯片为D133CBS,是ArtInChip 推出的高性能RISC-V MCU,具备强大的 2D 图形加速、丰富的显示接口和多媒体处理能力,适合工业 HMI、智慧家居等场景。

音频播放部分采用了 LM4831 音频功放芯片,能够为外接喇叭提供高质量音频输出。

外置存储为 Winbond(华邦)25Q128JVSQ 16MB NOR FLASH,支持大容量数据存储和系统固件升级。

简介
D13x是ArtInChip一款基于 RISC-V 的高性能、国产自主、工业级全高清显示与智能控制 MCU,配备强大的2D图形加速处理器、PNG解码、JPEG编解码引擎、丰富的屏接口,支持工业宽温,具有高可靠性、高开放性,可广泛应用于工业HMI、 网关、串口屏等泛工业和智慧家居领域。
D133CBS RISC-V KunLun Pi V1.0 是一款基于 D13x 芯片的人机交互应用开发板,配备 4.3 寸 LCD 显示屏以及电容触摸屏,支持DVP摄像头。开发板集成了USB烧录、TF-Card 升级烧录、JTAG、串口打印等调试接口,方便调试开发。开发板集成 16MB NOR FLASH并可兼容NAND,同时引出RS485、RS232/TTL、喇叭、SDIO WIFI等功能,方便用户快速进行技术预研与产品开发,满足用户对不同人机交互场景的开发需求。

开发板功能特性
开发板主控为D133CBS (8M PSRAM),可Pin to Pin兼容D133CCS(16M PSRAM);
片上1MB SRAM,片上8MB PSRAM(视主控型号决定);
NOR FLASH 16MB,可兼容NAND FLASH;
RTC 实时时钟;
1xUSB2.0 Device烧录,支持OTG;
1xUART0串口打印,1xJTAG单步调试;
1xTF-Card 接口;
标配4.3寸RGB显示屏,支持通过排针扩展LVDS、MIPI、I8080、QSPI屏等接口;
配电容式触摸屏,支持电阻式触摸屏;
1x喇叭、1xDVP摄像头接口;
1xRS485、1xUART TTL,可兼容RS232;
1xSDIO WIFI;
5V单电源供电(Type-C接口)。
功能框图
下图为D133CBS KunLun Pi开发板的功能框图,展示了主控芯片与各类外设( LCD显示屏、触摸排线、音频、摄像头、存储、通信接口等)之间的连接关系,便于理解整体架构和功能分布。

开发板资源
下图为开发板资源分布图,详细标注了各个接口、芯片、模块在PCB上的位置,包括主控、存储、音频、显示、调试接口等,方便用户查找和连接。

总结:本次评测的D133CBS KunLun Pi开发板集成度高,接口丰富,适合工业控制、智能家居等多种应用场景。开箱体验良好,配套资源齐全,便于开发者快速上手和功能验证,是一款极具性价比和实用性的国产 RISC-V 开发平台。
SDK下载+环境搭建
Luban-Lite SDK介绍
Luban-Lite是ArtInChip基于RT-Thread系统深度优化的RTOS SDK。本次评测就只使用该SDK进行开发。
准备代码
使用git客户端下载代码(https://gitee.com/artinchip/luban-lite.git)。
安装VSCode扩展-LubanLite
在VSCode中打开刚刚下载的Luban-Lite文件夹;
在VSCode的插件商店搜索LubanLite,安装。

左侧会出现匠芯创的LOGO,点开它,就有了一堆快捷操作。

创建项目
点击Open Project,可以按标签进行筛选Defconfig配置文件。

最终我们选择这个:d13x_kunlunpi88-nor_rt-thread_helloworld_defconfig

配置项目文件
点击config project

首次打开 Menuconfig 时,界面加载速度可能较慢,导致页面长时间停留在 “Loading Project Configuration ...”,需要耐心等待加载完成。加载速度与机器性能相关。

我们可以修改配置文件,但现在暂时不改,需要先把编译下载流程跑通后,在下一个实验任务中再进行修改。
编译
接下来编译,点击侧边栏的 Build Project 图标。

编译开始后,等待片刻,出现【Image file is generated:】表示生成镜像,可以下载到开发板了。

下载镜像
不知道什么原因,VSCode插件的烧录按钮,点完了之后并不能开始下载,因此我使用的是AiBurn烧录工具。
AiBurn工具下载:
https://aicdoc.artinchip.com/topics/product/download-doc-tool-zip.html
将开发板通过USB数据线连接电脑,按住开发板背面的BOOT按键,然后按下RESET按键,等待电脑端有设备接入的提示,松开BOOT按键,此时开发板进入了烧写模式。先选择文件,再点击开始。

烧录中

烧录完成

运行LVGL Benchmark Demo
LVGL简介:LVGL是一个C语言编写的免费的开源图形库,提供了用于嵌入式GUI的各种元素。用户可以利用丰富的图形库资源,在消耗极低内存的情况下构建视觉效果丰富多彩的GUI。
配置项目Config
打开上次实验创建好的测试工程,点击工具栏的Config,按下面几张图来进行配置。

选用LVGL V9

这里我想跑个Benchmark测一下性能,所以将LVGL Demo选择为LVGL Demo Benchmark,其他的保持默认即可。

最后记得点击下面的Save按钮保存,并关闭Config页面。
分析报错原因
如果修改好了上面的配置文件,直接编译,会报如下错误。

花了点时间,自己研究了下,大概弄明白了配置文件的运作逻辑。
在aic_ui.c中的 aic_ui_init() 函数内,定义了这三句:
lvgl_data_check();extern void ui_init(void);ui_init();
通过查找ui_init()的引用能发现,如果我们运行的LVGL Demo是匠芯创官方写好的,那么会通过ui_init()调用【packages\artinchip\lvgl-ui\aic_demo*】下特定Demo的源代码。
例如elevate_ui中就有实现了ui_init()

当我们切换到LVGL官方的Demo时,例如我们这里使用的是Benchmark Demo,那么在Config中CONFIG_AIC_LVGL_ELEVATOR_DEMO就会被注释掉,而CONFIG_AIC_LVGL_DEMO_ BENCHMARK被启用。

对应着在rtconfig.h中就没有定义AIC_LVGL_ELEVATOR_DEMO ,取而代之的是AIC_LVGL_DEMO_BENCHMARK,如下图所示。

问题来了,编译的时候是如何来进行条件编译的呢?
这里就用到了SConscript 文件,SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。
每个Demo文件夹下都有SConscript,例如在elevator_demo目录下就能看到。

对照着文件解释一下
src += Glob('./elevator_ui.c')
这行把 elevator_ui.c 文件加入源码列表 src。

group=group+DefineGroup('LVGL-port',src,depend= ['AIC_LVGL_ELEVATOR_DEMO'], CPPPATH = CPPPATH, INSTALL = install)
这行用 DefineGroup 定义了一个源码组,名字叫 LVGL-port,包含 src 里的所有源码文件。
重点是 Depend 参数:depend = ['AIC_LVGL_ELEVATOR_DEMO']

Depend 的作用是:只有当 AIC_LVGL_ELEVATOR_DEMO 这个宏(或配置项)被打开时,这个源码组才会被编译。如果在 config 里把 AIC_LVGL_ELEVATOR_DEMO 关掉了,这个源码组就不会被加入编译流程,elevator_ui.c 也就不会被编译。
自然地,现在就能回答最开始的问题了,ui_init()找不到引用的原因正是没有任何一个aic_demo(即匠芯创官方写的LVGL Demo)被编译进来。
修改aic_ui.c代码
将aic_ui_init()函数的下面这两行注释掉
// extern void ui_init(void);// ui_init();
新增一行
lv_demo_benchmark();
在aic_ui.c文件包含部分之后,新增代码
#ifdef AIC_LVGL_DEMO_BENCHMARK#include "lvgl_v9/lvgl/demos/benchmark/lv_demo_benchmark.h"#endif
启用CPU监视
要跑Benchmark,需要给系统一个性能监视器,否则会在跑Benchmark时,屏幕显示LV_USE_PERF_MONITOR is not enabled提示,结果页面也不会显示FPS和CPU占用率。
在packages\artinchip\lvgl-ui\lvgl_v9\lv_conf.h 找到【LV_USE_PERF_MONITOR】,将值改为1。

实验结果:编译、下载,进入系统后就能看到正在运行的benchmark了。

可以看到大部分场景稳定60FPS以上,而且CPU占用率都不高。
新建LVGL应用-控制显示屏亮度
匠芯创AiUIBuilder简介
AiUIBuilder是基于LVGL(Light and Versatile Embedded Graphics Library) 开发的UI设计工具,可以通过拖拽的方式进行UI界面的设计,能够加速基于ArtInChip嵌入式平台的图形应用的开发。
使用UiBuilder进行设计的流程如下

用AiUIbuilder在电脑上进行UI设计,并模拟运行,可以反复的对设计进行修改;
AiUIbuilder设计导出的代码也可以在VSCode环境下进行代码的修改,并可以在电脑上单步调试;
AiUIbuilder导出的UI代码或者经过在VSCode环境下修改过的UI代码,放在SDK编译环境相应目录下进行编译,然后烧录固件,在真实硬件环境下运行。
下载安装AiUIbuilder
前往官网下载安装:
https://aicdoc.artinchip.com/topics/product/download-doc-tool-zip.html
创建UI工程
在AiUiBuilder工具中,新建一个名为【test1】的项目,注意选择颜色深度为16bit,分辨率为【480*272】。

设计UI
这个实验是为了通过UI调整屏幕亮度,所以需要一个滑动条组件,如下图:

调整滑动条的范围为10~100,默认值70。

还要两个标签组件

label_2标签是用于显示滑动条的数值。
滑动条事件设置
滑动条组件介绍
参考LVGL文档:
https://lvgl.100ask.net/9.1/widgets/slider.html
滑动条对象看起来像是在进度条增加了一个可以调节的旋钮,使用时可以通过拖动旋钮来设置一个值。就像进度条(bar)一样,Slider可以是垂直的或水平的(当设置进度条的宽度小于其高度,就可以创建出垂直摆放的滑动条)。
使用事件LV_EVENT_VALUE_CHANGED,它是在拖动滑块或使用按键更改滑块时,会发送事件,拖动滑块时,会连续发送事件。
设置滑动事件
右键点击滑动条,选择设置事件。

打开的窗口中,选择事件Value changed-自定义代码-勾选方法名右侧的复选框。

设置screen加载事件
右键screen,选择【设置事件】。

事件名为 load start,方法名右侧的复选框打勾。

编写自定义代码
打开项目文件夹下的 ui_builder/custom/custom.c文件,新增代码如下:
#ifndef SIMULATOR#include "lv_tpc_run.h"voidbacklight_pwm_config(unsignedint channel, unsignedint level){ structrt_device_pwm *pwm_dev; pwm_dev = (struct rt_device_pwm *)rt_device_find("pwm"); /* pwm frequency: 1KHz = 1000000ns */rt_pwm_set(pwm_dev, channel, 1000000, 10000 * level);}#endifvoidscreen_slider_1_custom_value_changed(){ screen_t*scr = screen_get(&ui_manager); intvalue = lv_slider_get_value(scr->slider_1); charbuf[8]; snprintf(buf,sizeof(buf), "%d%%", value);lv_label_set_text(scr->label_2, buf);#ifndef SIMULATORbacklight_pwm_config(2, value);#endif}voidscreen_custom_load_start(){ screen_t*scr = screen_get(&ui_manager); intvalue = lv_slider_get_value(scr->slider_1); charbuf[8]; snprintf(buf,sizeof(buf), "%d%%", value);lv_label_set_text(scr->label_2, buf);}
其中【screen_slider_1_custom_value_changed】是滑动条事件回调函数,【screen_custom_load_start】是屏幕加载回调函数。它们都先获取了屏幕的对象,然后读取滑动条当前值,再将该数值格式化为字符串,设置为标签label_2的显示文本。
【backlight_pwm_config】用于设置背光的 PWM(脉宽调制)参数,实现调节屏幕亮度的功能。
【#ifndef SIMULATOR ... #endif】,在模拟器环境下,是找不到lv_tpc_run.h头文件及其他函数的,这些是在luban-lite SDK中使用的,因此需要注释掉,避免编译报错,在模拟器下只需要关心UI设计和基本逻辑是否正确即可。
导出AiUiBuilder生成的代码
在UiBuilder的右上角,点击生成代码。

代码生成在项目目录下的ui_builder目录内。

先记住该路径,这部分文件代码等会要用到。
搭建VSCode编译仿真环境
在VSCode中,安装如下插件:
C/C++
C/C++ Extension Pack
CMake
CMake Tools
使用VSCode打开AiUiBuilder项目工程test1文件夹下的simulator.code-workspace文件,这是vscode的工作区文件。
编译时,会让我们选编译器,这里选择未指定,因为在工作区配置文件中已经自动指定好了。

点击工具栏的build按钮,进行编译。完成后点击调试或运行,即可查看仿真效果。
新增LVGL应用配置
首先需要在application/Kconfig 中下方所示部分添加代码:
...config AIC_LVGL_USB_OSD_DEMO bool "LVGL usb osd demo" selectLPKG_LVGL_USING_DEMOS selectLPKG_USING_CJSON selectAIC_PWM_BACKLIGHT_BYPASS if AIC_PWM_BACKLIGHTconfig AIC_LVGL_IMAGE_DEMO bool "LVGL image demo"config AIC_LVGL_TEST1_DEMO # 添加 AIC_LVGL_TEST1_DEMO,以便在 menuconfig 菜单中选择 bool "LVGL demo of test1"...
在项目配置中,【select LVGL Demo】选择刚刚的【LVGL demo of test1】,保存。

导入代码
在【packages\artinchip\lvgl-ui\aic_demo】下新建【test_demo_1】文件夹,将导出的代码全部复制到这里。

配置SConscript
在test_demo_1目录下新建SConscript文件,添加如下代码:
from building import *import oscwd = GetCurrentDir()group = []# 源文件路径src = Glob('*.c')src += Glob('./custom/*.c')# 头文件路径CPPPATH = [cwd]CPPPATH.append(cwd+ '/custom')list = os.listdir(cwd)ford in list: path = os.path.join(cwd, d) ifos.path.isfile(os.path.join(path, 'SConscript')): group = group + SConscript(os.path.join(d, 'SConscript'))# 资源安装的目标路径ins_dst='rodata/lvgl_data'# 资源安装的源路径为当前SConscript所在路径的相对路径ins_src = 'assets'install = [(ins_src + '/font/', ins_dst + '/font/'),]# AIC_LVGL_TEST1_DEMO 宏需要与 application/Kconfig 中添加的宏一致group = group + DefineGroup('LVGL-port', src, depend = ['AIC_LVGL_TEST1_DEMO'], CPPPATH = CPPPATH, INSTALL = install)Return('group')
实验结果:通过触摸屏拉拽滑动条,实现了屏幕亮度的调节。
以上内容来源:电子发烧友论坛
全部0条评论
快来发表一下你的评论吧 !