作者ID:VR小杰
本次開箱的 D133CBS KunLun Pi 開發(fā)板,正面配備了一塊 4.3 寸的電容觸摸屏,開機(jī)即用,系統(tǒng)內(nèi)置主菜單和豐富的 demo 演示程序,方便用戶快速體驗(yàn)各項(xiàng)功能。
開發(fā)板開箱及介紹

開發(fā)板背面有豐富的接口和模塊布局,便于擴(kuò)展和調(diào)試。

主控芯片為D133CBS,是ArtInChip 推出的高性能RISC-V MCU,具備強(qiáng)大的 2D 圖形加速、豐富的顯示接口和多媒體處理能力,適合工業(yè) HMI、智慧家居等場(chǎng)景。

音頻播放部分采用了 LM4831 音頻功放芯片,能夠?yàn)橥饨永忍峁└哔|(zhì)量音頻輸出。

外置存儲(chǔ)為 Winbond(華邦)25Q128JVSQ 16MB NOR FLASH,支持大容量數(shù)據(jù)存儲(chǔ)和系統(tǒng)固件升級(jí)。

簡(jiǎn)介
D13x是ArtInChip一款基于 RISC-V 的高性能、國(guó)產(chǎn)自主、工業(yè)級(jí)全高清顯示與智能控制 MCU,配備強(qiáng)大的2D圖形加速處理器、PNG解碼、JPEG編解碼引擎、豐富的屏接口,支持工業(yè)寬溫,具有高可靠性、高開放性,可廣泛應(yīng)用于工業(yè)HMI、 網(wǎng)關(guān)、串口屏等泛工業(yè)和智慧家居領(lǐng)域。
D133CBS RISC-V KunLun Pi V1.0 是一款基于 D13x 芯片的人機(jī)交互應(yīng)用開發(fā)板,配備 4.3 寸 LCD 顯示屏以及電容觸摸屏,支持DVP攝像頭。開發(fā)板集成了USB燒錄、TF-Card 升級(jí)燒錄、JTAG、串口打印等調(diào)試接口,方便調(diào)試開發(fā)。開發(fā)板集成 16MB NOR FLASH并可兼容NAND,同時(shí)引出RS485、RS232/TTL、喇叭、SDIO WIFI等功能,方便用戶快速進(jìn)行技術(shù)預(yù)研與產(chǎn)品開發(fā),滿足用戶對(duì)不同人機(jī)交互場(chǎng)景的開發(fā)需求。

開發(fā)板功能特性
開發(fā)板主控為D133CBS (8M PSRAM),可Pin to Pin兼容D133CCS(16M PSRAM);
片上1MB SRAM,片上8MB PSRAM(視主控型號(hào)決定);
NOR FLASH 16MB,可兼容NAND FLASH;
RTC 實(shí)時(shí)時(shí)鐘;
1xUSB2.0 Device燒錄,支持OTG;
1xUART0串口打印,1xJTAG單步調(diào)試;
1xTF-Card 接口;
標(biāo)配4.3寸RGB顯示屏,支持通過排針擴(kuò)展LVDS、MIPI、I8080、QSPI屏等接口;
配電容式觸摸屏,支持電阻式觸摸屏;
1x喇叭、1xDVP攝像頭接口;
1xRS485、1xUART TTL,可兼容RS232;
1xSDIO WIFI;
5V單電源供電(Type-C接口)。
功能框圖
下圖為D133CBS KunLun Pi開發(fā)板的功能框圖,展示了主控芯片與各類外設(shè)( LCD顯示屏、觸摸排線、音頻、攝像頭、存儲(chǔ)、通信接口等)之間的連接關(guān)系,便于理解整體架構(gòu)和功能分布。

開發(fā)板資源
下圖為開發(fā)板資源分布圖,詳細(xì)標(biāo)注了各個(gè)接口、芯片、模塊在PCB上的位置,包括主控、存儲(chǔ)、音頻、顯示、調(diào)試接口等,方便用戶查找和連接。

總結(jié):本次評(píng)測(cè)的D133CBS KunLun Pi開發(fā)板集成度高,接口豐富,適合工業(yè)控制、智能家居等多種應(yīng)用場(chǎng)景。開箱體驗(yàn)良好,配套資源齊全,便于開發(fā)者快速上手和功能驗(yàn)證,是一款極具性價(jià)比和實(shí)用性的國(guó)產(chǎn) RISC-V 開發(fā)平臺(tái)。
SDK下載+環(huán)境搭建
Luban-Lite SDK介紹
Luban-Lite是ArtInChip基于RT-Thread系統(tǒng)深度優(yōu)化的RTOS SDK。本次評(píng)測(cè)就只使用該SDK進(jìn)行開發(fā)。
準(zhǔn)備代碼
使用git客戶端下載代碼(https://gitee.com/artinchip/luban-lite.git)。
安裝VSCode擴(kuò)展-LubanLite
在VSCode中打開剛剛下載的Luban-Lite文件夾;
在VSCode的插件商店搜索LubanLite,安裝。

左側(cè)會(huì)出現(xiàn)匠芯創(chuàng)的LOGO,點(diǎn)開它,就有了一堆快捷操作。

創(chuàng)建項(xiàng)目
點(diǎn)擊Open Project,可以按標(biāo)簽進(jìn)行篩選Defconfig配置文件。

最終我們選擇這個(gè):d13x_kunlunpi88-nor_rt-thread_helloworld_defconfig

配置項(xiàng)目文件
點(diǎn)擊config project

首次打開 Menuconfig 時(shí),界面加載速度可能較慢,導(dǎo)致頁面長(zhǎng)時(shí)間停留在 “Loading Project Configuration ...”,需要耐心等待加載完成。加載速度與機(jī)器性能相關(guān)。

我們可以修改配置文件,但現(xiàn)在暫時(shí)不改,需要先把編譯下載流程跑通后,在下一個(gè)實(shí)驗(yàn)任務(wù)中再進(jìn)行修改。
編譯
接下來編譯,點(diǎn)擊側(cè)邊欄的 Build Project 圖標(biāo)。

編譯開始后,等待片刻,出現(xiàn)【Image file is generated:】表示生成鏡像,可以下載到開發(fā)板了。

下載鏡像
不知道什么原因,VSCode插件的燒錄按鈕,點(diǎn)完了之后并不能開始下載,因此我使用的是AiBurn燒錄工具。
AiBurn工具下載:
https://aicdoc.artinchip.com/topics/product/download-doc-tool-zip.html
將開發(fā)板通過USB數(shù)據(jù)線連接電腦,按住開發(fā)板背面的BOOT按鍵,然后按下RESET按鍵,等待電腦端有設(shè)備接入的提示,松開BOOT按鍵,此時(shí)開發(fā)板進(jìn)入了燒寫模式。先選擇文件,再點(diǎn)擊開始。

燒錄中

燒錄完成

運(yùn)行LVGL Benchmark Demo
LVGL簡(jiǎn)介:LVGL是一個(gè)C語言編寫的免費(fèi)的開源圖形庫,提供了用于嵌入式GUI的各種元素。用戶可以利用豐富的圖形庫資源,在消耗極低內(nèi)存的情況下構(gòu)建視覺效果豐富多彩的GUI。
配置項(xiàng)目Config
打開上次實(shí)驗(yàn)創(chuàng)建好的測(cè)試工程,點(diǎn)擊工具欄的Config,按下面幾張圖來進(jìn)行配置。

選用LVGL V9

這里我想跑個(gè)Benchmark測(cè)一下性能,所以將LVGL Demo選擇為L(zhǎng)VGL Demo Benchmark,其他的保持默認(rèn)即可。

最后記得點(diǎn)擊下面的Save按鈕保存,并關(guān)閉Config頁面。
分析報(bào)錯(cuò)原因
如果修改好了上面的配置文件,直接編譯,會(huì)報(bào)如下錯(cuò)誤。

花了點(diǎn)時(shí)間,自己研究了下,大概弄明白了配置文件的運(yùn)作邏輯。
在aic_ui.c中的 aic_ui_init() 函數(shù)內(nèi),定義了這三句:
lvgl_data_check();externvoidui_init(void);ui_init();
通過查找ui_init()的引用能發(fā)現(xiàn),如果我們運(yùn)行的LVGL Demo是匠芯創(chuàng)官方寫好的,那么會(huì)通過ui_init()調(diào)用【packages\artinchip\lvgl-ui\aic_demo*】下特定Demo的源代碼。
例如elevate_ui中就有實(shí)現(xiàn)了ui_init()

當(dāng)我們切換到LVGL官方的Demo時(shí),例如我們這里使用的是Benchmark Demo,那么在Config中CONFIG_AIC_LVGL_ELEVATOR_DEMO就會(huì)被注釋掉,而CONFIG_AIC_LVGL_DEMO_ BENCHMARK被啟用。

對(duì)應(yīng)著在rtconfig.h中就沒有定義AIC_LVGL_ELEVATOR_DEMO ,取而代之的是AIC_LVGL_DEMO_BENCHMARK,如下圖所示。

問題來了,編譯的時(shí)候是如何來進(jìn)行條件編譯的呢?
這里就用到了SConscript 文件,SCons 是一套由 Python 語言編寫的開源構(gòu)建系統(tǒng),類似于 GNU Make。
每個(gè)Demo文件夾下都有SConscript,例如在elevator_demo目錄下就能看到。

對(duì)照著文件解釋一下
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 定義了一個(gè)源碼組,名字叫 LVGL-port,包含 src 里的所有源碼文件。
重點(diǎn)是 Depend 參數(shù):depend = ['AIC_LVGL_ELEVATOR_DEMO']

Depend 的作用是:只有當(dāng) AIC_LVGL_ELEVATOR_DEMO 這個(gè)宏(或配置項(xiàng))被打開時(shí),這個(gè)源碼組才會(huì)被編譯。如果在 config 里把 AIC_LVGL_ELEVATOR_DEMO 關(guān)掉了,這個(gè)源碼組就不會(huì)被加入編譯流程,elevator_ui.c 也就不會(huì)被編譯。
自然地,現(xiàn)在就能回答最開始的問題了,ui_init()找不到引用的原因正是沒有任何一個(gè)aic_demo(即匠芯創(chuàng)官方寫的LVGL Demo)被編譯進(jìn)來。
修改aic_ui.c代碼
將aic_ui_init()函數(shù)的下面這兩行注釋掉
// extern void ui_init(void);// ui_init();
新增一行
lv_demo_benchmark();
在aic_ui.c文件包含部分之后,新增代碼
#ifdefAIC_LVGL_DEMO_BENCHMARK#include"lvgl_v9/lvgl/demos/benchmark/lv_demo_benchmark.h"#endif
啟用CPU監(jiān)視
要跑Benchmark,需要給系統(tǒng)一個(gè)性能監(jiān)視器,否則會(huì)在跑Benchmark時(shí),屏幕顯示LV_USE_PERF_MONITOR is not enabled提示,結(jié)果頁面也不會(huì)顯示FPS和CPU占用率。
在packages\artinchip\lvgl-ui\lvgl_v9\lv_conf.h 找到【LV_USE_PERF_MONITOR】,將值改為1。

實(shí)驗(yàn)結(jié)果:編譯、下載,進(jìn)入系統(tǒng)后就能看到正在運(yùn)行的benchmark了。

可以看到大部分場(chǎng)景穩(wěn)定60FPS以上,而且CPU占用率都不高。
新建LVGL應(yīng)用-控制顯示屏亮度
匠芯創(chuàng)AiUIBuilder簡(jiǎn)介
AiUIBuilder是基于LVGL(Light and Versatile Embedded Graphics Library) 開發(fā)的UI設(shè)計(jì)工具,可以通過拖拽的方式進(jìn)行UI界面的設(shè)計(jì),能夠加速基于ArtInChip嵌入式平臺(tái)的圖形應(yīng)用的開發(fā)。
使用UiBuilder進(jìn)行設(shè)計(jì)的流程如下

用AiUIbuilder在電腦上進(jìn)行UI設(shè)計(jì),并模擬運(yùn)行,可以反復(fù)的對(duì)設(shè)計(jì)進(jìn)行修改;
AiUIbuilder設(shè)計(jì)導(dǎo)出的代碼也可以在VSCode環(huán)境下進(jìn)行代碼的修改,并可以在電腦上單步調(diào)試;
AiUIbuilder導(dǎo)出的UI代碼或者經(jīng)過在VSCode環(huán)境下修改過的UI代碼,放在SDK編譯環(huán)境相應(yīng)目錄下進(jìn)行編譯,然后燒錄固件,在真實(shí)硬件環(huán)境下運(yùn)行。
下載安裝AiUIbuilder
前往官網(wǎng)下載安裝:
https://aicdoc.artinchip.com/topics/product/download-doc-tool-zip.html
創(chuàng)建UI工程
在AiUiBuilder工具中,新建一個(gè)名為【test1】的項(xiàng)目,注意選擇顏色深度為16bit,分辨率為【480*272】。

設(shè)計(jì)UI
這個(gè)實(shí)驗(yàn)是為了通過UI調(diào)整屏幕亮度,所以需要一個(gè)滑動(dòng)條組件,如下圖:

調(diào)整滑動(dòng)條的范圍為10~100,默認(rèn)值70。

還要兩個(gè)標(biāo)簽組件

label_2標(biāo)簽是用于顯示滑動(dòng)條的數(shù)值。
滑動(dòng)條事件設(shè)置
滑動(dòng)條組件介紹
參考LVGL文檔:
https://lvgl.100ask.net/9.1/widgets/slider.html
滑動(dòng)條對(duì)象看起來像是在進(jìn)度條增加了一個(gè)可以調(diào)節(jié)的旋鈕,使用時(shí)可以通過拖動(dòng)旋鈕來設(shè)置一個(gè)值。就像進(jìn)度條(bar)一樣,Slider可以是垂直的或水平的(當(dāng)設(shè)置進(jìn)度條的寬度小于其高度,就可以創(chuàng)建出垂直擺放的滑動(dòng)條)。
使用事件LV_EVENT_VALUE_CHANGED,它是在拖動(dòng)滑塊或使用按鍵更改滑塊時(shí),會(huì)發(fā)送事件,拖動(dòng)滑塊時(shí),會(huì)連續(xù)發(fā)送事件。
設(shè)置滑動(dòng)事件
右鍵點(diǎn)擊滑動(dòng)條,選擇設(shè)置事件。

打開的窗口中,選擇事件Value changed-自定義代碼-勾選方法名右側(cè)的復(fù)選框。

設(shè)置screen加載事件
右鍵screen,選擇【設(shè)置事件】。

事件名為 load start,方法名右側(cè)的復(fù)選框打勾。

編寫自定義代碼
打開項(xiàng)目文件夾下的 ui_builder/custom/custom.c文件,新增代碼如下:
#ifndefSIMULATOR#include"lv_tpc_run.h"voidbacklight_pwm_config(unsignedint channel, unsignedint level){structrt_device_pwm *pwm_dev;pwm_dev = (structrt_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);#ifndefSIMULATORbacklight_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】是滑動(dòng)條事件回調(diào)函數(shù),【screen_custom_load_start】是屏幕加載回調(diào)函數(shù)。它們都先獲取了屏幕的對(duì)象,然后讀取滑動(dòng)條當(dāng)前值,再將該數(shù)值格式化為字符串,設(shè)置為標(biāo)簽label_2的顯示文本。
【backlight_pwm_config】用于設(shè)置背光的 PWM(脈寬調(diào)制)參數(shù),實(shí)現(xiàn)調(diào)節(jié)屏幕亮度的功能。
【#ifndefSIMULATOR ...#endif】,在模擬器環(huán)境下,是找不到lv_tpc_run.h頭文件及其他函數(shù)的,這些是在luban-lite SDK中使用的,因此需要注釋掉,避免編譯報(bào)錯(cuò),在模擬器下只需要關(guān)心UI設(shè)計(jì)和基本邏輯是否正確即可。
導(dǎo)出AiUiBuilder生成的代碼
在UiBuilder的右上角,點(diǎn)擊生成代碼。

代碼生成在項(xiàng)目目錄下的ui_builder目錄內(nèi)。

先記住該路徑,這部分文件代碼等會(huì)要用到。
搭建VSCode編譯仿真環(huán)境
在VSCode中,安裝如下插件:
C/C++
C/C++ Extension Pack
CMake
CMake Tools
使用VSCode打開AiUiBuilder項(xiàng)目工程test1文件夾下的simulator.code-workspace文件,這是vscode的工作區(qū)文件。
編譯時(shí),會(huì)讓我們選編譯器,這里選擇未指定,因?yàn)樵诠ぷ鲄^(qū)配置文件中已經(jīng)自動(dòng)指定好了。

點(diǎn)擊工具欄的build按鈕,進(jìn)行編譯。完成后點(diǎn)擊調(diào)試或運(yùn)行,即可查看仿真效果。
新增LVGL應(yīng)用配置
首先需要在application/Kconfig 中下方所示部分添加代碼:
...config AIC_LVGL_USB_OSD_DEMObool"LVGL usb osd demo"selectLPKG_LVGL_USING_DEMOSselectLPKG_USING_CJSONselectAIC_PWM_BACKLIGHT_BYPASSifAIC_PWM_BACKLIGHTconfig AIC_LVGL_IMAGE_DEMObool"LVGL image demo"config AIC_LVGL_TEST1_DEMO# 添加 AIC_LVGL_TEST1_DEMO,以便在 menuconfig 菜單中選擇bool"LVGL demo of test1"...
在項(xiàng)目配置中,【select LVGL Demo】選擇剛剛的【LVGL demo of test1】,保存。

導(dǎo)入代碼
在【packages\artinchip\lvgl-ui\aic_demo】下新建【test_demo_1】文件夾,將導(dǎo)出的代碼全部復(fù)制到這里。

配置SConscript
在test_demo_1目錄下新建SConscript文件,添加如下代碼:
frombuilding import *import oscwd = GetCurrentDir()group= []# 源文件路徑src = Glob('*.c')src += Glob('./custom/*.c')# 頭文件路徑CPPPATH = [cwd]CPPPATH.append(cwd+'/custom')list = os.listdir(cwd)fordinlist:path = os.path.join(cwd, d)ifos.path.isfile(os.path.join(path,'SConscript')):group=group+ SConscript(os.path.join(d,'SConscript'))# 資源安裝的目標(biāo)路徑ins_dst='rodata/lvgl_data'# 資源安裝的源路徑為當(dāng)前SConscript所在路徑的相對(duì)路徑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')
實(shí)驗(yàn)結(jié)果:通過觸摸屏拉拽滑動(dòng)條,實(shí)現(xiàn)了屏幕亮度的調(diào)節(jié)。
以上內(nèi)容來源:電子發(fā)燒友論壇
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20434瀏覽量
333885 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6288瀏覽量
117989 -
匠芯創(chuàng)
+關(guān)注
關(guān)注
0文章
57瀏覽量
189
發(fā)布評(píng)論請(qǐng)先 登錄
【匠芯創(chuàng)科技】D13X-DOC
【新品體驗(yàn)】匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)
匠芯創(chuàng)D133CBS RISC-V KunLun Pi V1.0開發(fā)板開發(fā)資料
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】《匠芯創(chuàng)D133CBS RISC-V KunLun Pi 》 開箱及搭建vscode開發(fā)環(huán)境
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】1、開發(fā)板開箱及介紹
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】2、SDK下載+環(huán)境搭建
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板串口使用
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】+環(huán)境搭建
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】開箱評(píng)測(cè)
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)】介紹、環(huán)境搭建
【免費(fèi)試用】匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗(yàn)
匠芯創(chuàng)D13x系列通過工業(yè)和信息化部重點(diǎn)實(shí)驗(yàn)室測(cè)試
賦能兩輪車新國(guó)標(biāo) | 匠芯創(chuàng)D13x系列芯片為手機(jī)無線投屏與導(dǎo)航提供核心支持
探索KunLun Pi | 基于匠芯創(chuàng)D13x系列開發(fā)板分享
探索 KunLun Pi | 基于匠芯創(chuàng)D13x系列開發(fā)板分享(三)
評(píng)論