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

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

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

音頻播放部分采用了 LM4831 音頻功放芯片,能夠為外接喇叭提供高質(zhì)量音頻輸出。

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

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

開發(fā)板功能特性
開發(fā)板主控為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單步調(diào)試;
1xTF-Card 接口;
標配4.3寸RGB顯示屏,支持通過排針擴展LVDS、MIPI、I8080、QSPI屏等接口;
配電容式觸摸屏,支持電阻式觸摸屏;
1x喇叭、1xDVP攝像頭接口;
1xRS485、1xUART TTL,可兼容RS232;
1xSDIO WIFI;
5V單電源供電(Type-C接口)。
功能框圖
下圖為D133CBS KunLun Pi開發(fā)板的功能框圖,展示了主控芯片與各類外設(shè)( LCD顯示屏、觸摸排線、音頻、攝像頭、存儲、通信接口等)之間的連接關(guān)系,便于理解整體架構(gòu)和功能分布。

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

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

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

創(chuàng)建項目
點擊Open Project,可以按標簽進行篩選Defconfig配置文件。

最終我們選擇這個:d13x_kunlunpi88-nor_rt-thread_helloworld_defconfig

配置項目文件
點擊config project

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

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

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

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

燒錄中

燒錄完成

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

選用LVGL V9

這里我想跑個Benchmark測一下性能,所以將LVGL Demo選擇為LVGL Demo Benchmark,其他的保持默認即可。

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

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

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

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

問題來了,編譯的時候是如何來進行條件編譯的呢?
這里就用到了SConscript 文件,SCons 是一套由 Python 語言編寫的開源構(gòu)建系統(tǒng),類似于 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 參數(shù):depend = ['AIC_LVGL_ELEVATOR_DEMO']

Depend 的作用是:只有當 AIC_LVGL_ELEVATOR_DEMO 這個宏(或配置項)被打開時,這個源碼組才會被編譯。如果在 config 里把 AIC_LVGL_ELEVATOR_DEMO 關(guān)掉了,這個源碼組就不會被加入編譯流程,elevator_ui.c 也就不會被編譯。
自然地,現(xiàn)在就能回答最開始的問題了,ui_init()找不到引用的原因正是沒有任何一個aic_demo(即匠芯創(chuàng)官方寫的LVGL Demo)被編譯進來。
修改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)一個性能監(jiān)視器,否則會在跑Benchmark時,屏幕顯示LV_USE_PERF_MONITOR is not enabled提示,結(jié)果頁面也不會顯示FPS和CPU占用率。
在packages\artinchip\lvgl-ui\lvgl_v9\lv_conf.h 找到【LV_USE_PERF_MONITOR】,將值改為1。

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

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

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

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

調(diào)整滑動條的范圍為10~100,默認值70。

還要兩個標簽組件

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

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

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

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

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

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

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

點擊工具欄的build按鈕,進行編譯。完成后點擊調(diào)試或運行,即可查看仿真效果。
新增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"...
在項目配置中,【select LVGL Demo】選擇剛剛的【LVGL demo of test1】,保存。

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

配置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'))# 資源安裝的目標路徑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')
實驗結(jié)果:通過觸摸屏拉拽滑動條,實現(xiàn)了屏幕亮度的調(diào)節(jié)。
以上內(nèi)容來源:電子發(fā)燒友論壇
-
嵌入式
+關(guān)注
關(guān)注
5208文章
20620瀏覽量
336672 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6398瀏覽量
120446 -
匠芯創(chuàng)
+關(guān)注
關(guān)注
0文章
64瀏覽量
215
發(fā)布評論請先 登錄
【匠芯創(chuàng)科技】D13X-DOC
【新品體驗】匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗
匠芯創(chuàng)D133CBS RISC-V KunLun Pi V1.0開發(fā)板開發(fā)資料
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】《匠芯創(chuàng)D133CBS RISC-V KunLun Pi 》 開箱及搭建vscode開發(fā)環(huán)境
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】1、開發(fā)板開箱及介紹
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】2、SDK下載+環(huán)境搭建
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】+環(huán)境搭建
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】開箱評測
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】介紹、環(huán)境搭建
【免費試用】匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗
匠芯創(chuàng)D13x系列通過工業(yè)和信息化部重點實驗室測試
賦能兩輪車新國標 | 匠芯創(chuàng)D13x系列芯片為手機無線投屏與導航提供核心支持
探索KunLun Pi | 基于匠芯創(chuàng)D13x系列開發(fā)板分享
探索 KunLun Pi | 基于匠芯創(chuàng)D13x系列開發(fā)板分享(三)
評論