前言
關(guān)注我的同學都知道,在搞項目方面我一點也不挑食,有啥玩啥,擅于給自己找麻煩。
由于個人本職工作是搞AI的,在不久之前的一個項目中,我用STM32制作了一個小模塊,探討了一下“推理一個實用神經(jīng)網(wǎng)絡最低需要什么樣的算力”這個問題。
在那個項目中,我成功在主頻只有不到100MHz,sram只有32K的單片機上推理了一個自己訓練的CNN-SLR網(wǎng)絡模型,效果甚至還不錯。
而這一次我準備來一波反向操作:盡可能用上算力最強的MCU,來看看在上面能跑多復雜的網(wǎng)絡,因垂絲汀。
注意,我這里指明了使用的是MCU,所以移動設(shè)備上的各種SoC就不在討論范疇了,要說原因的話,是因為移動端SoC之間的battle過于激烈,這個討論留作后話,在這一篇里面就暫時按下不表了;另一方面由于二者不在一個價位段,沒有可比性。
為了引出本篇要使用的MCU型號,首先我們來討論一下嵌入式處理器的一個守恒定律,也即 功耗-價格-性能 不可兼得,如下圖:
稍微解釋一下上圖的話就是,由于物理定律限制我們可以認為:在其他條件一定的情況下,性能和功耗肯定成正比,更強的性能意味著更大的功耗也就會產(chǎn)生更多的熱量;而要想提升性能的同時還能保證功耗不變甚至更低的話,就只能改進芯片的架構(gòu)或者改進制程工藝,這又會帶來成本的提高。因而根據(jù)不同應用方向,我們可以選擇兼顧其中兩者的一些硬件平臺:
成本低,性能弱,功耗也低:代表是各種單片機如STM32/AVR等。
成本低,性能強,但制程不高易發(fā)熱:代表是各種低端SoC比如全志的H系列。
性能強,制程先進,但價格十分不友好,有錢還不一定給賣系列:代表是現(xiàn)在智能手機上使用的各種旗艦SoC,比如高通驍龍/海思麒麟/蘋果A系。
那難道真的就沒有三者兼得的芯片平臺了嗎?
其實還真有,本篇的主角K210就勉強算是一個,這也是我這次選擇折騰這個項目的主要原因,接下來請聽我仔細分析~
K210是個啥
K210是由一家叫做嘉楠的曾經(jīng)做挖礦芯片的公司在去年推出的一款MCU,其特色在于芯片架構(gòu)中包含了一個自研的神經(jīng)網(wǎng)絡硬件加速器KPU,可以高性能地進行卷積神經(jīng)網(wǎng)絡運算。
可不要以為MCU的性能就一定比不上高端SoC,至少在AI計算方面,K210的算力其實是相當可觀的。根據(jù)嘉楠官方的描述,K210的KPU算力有0.8TOPS ,作為對比,擁有128個CUDA單元GPU的英偉達Jetson Nano的算力是0.47TFLOPS ;而最新的樹莓派4只有不到0.1TFLOPS 。
當然了,這個性能跟某些旗艦級別的SoC還是有差距的:A76級別的CPU本身就已經(jīng)很變態(tài),更何況旗艦SoC上面都會搭載用于AI加速的硬件用于異構(gòu)運算,比如高通的Hexagon DSP、蘋果的Neural Engine、華為的達芬奇架構(gòu)NPU等等,這些NPU在某些應用下甚至能達到與數(shù)百W功耗的桌面級GPU接近的算力(順便提一下GTX1080Ti的雙精度浮點算力是11.3 TFLOPS ),可以說是喪心病狂了。
值得注意的是,芯片的算力不一定和模型推理速度成正比,嵌入式AI的另一個核心是inference框架。對于CPU架構(gòu)來說,是否使用SIMD(ARM從v7開始就支持NEON指令了)、是否使用多核多線程、是否有高效的卷積實現(xiàn)方式、是否有做匯編優(yōu)化等等都會極大影響模型運行速度;而對DSP/NPU等硬件架構(gòu)來說,是否對模型進行量化推理、量化的方式、訪存的優(yōu)化等也會有很大影響。
K210的其他參數(shù)如下:
雙核 64-bit RISC-V RV64IMAFDC (RV64GC) CPU / 400MHz(可超頻到600MHz)
雙精度 FPU
8MiB 64bit 片上 SRAM(6MiB通用SRAM+2MiB的AI專用SRAM)
神經(jīng)網(wǎng)絡處理器(KPU) / 0.8TFLOPS
音頻處理器(APU)
可編程 IO 陣列 (FPIOA)
雙硬件512點16位復數(shù)FFT
SPI, I2C, UART, I2S, RTC, PWM, 定時器支持
AES, SHA256 加速器
芯片采用BGA144封裝,28nm制程工藝,芯片功耗低至0.35W,而成本,只要20+RMB。
想一下一塊Arduino的板子要多少錢。..。..Arduino的性能和外設(shè)在K210面前就是個弟中弟(攤手)。
那么K210又能做哪些事情呢?
多到讓你懷疑它是否真的只是個單片機。..。..人臉檢測、物體識別、播放視頻、聲場成像、3D渲染,甚至還能在上面跑FC模擬器玩游戲。..。..
可以去搜一下k210的一些應用視頻演示,相信看完你會愛了的。
好了芯片就吹到這里,下面介紹一下市面上已有的一些K210開發(fā)板。
如何選擇開發(fā)板
如果看完上面的介紹對K210產(chǎn)生了興趣,那么下面我會推薦幾款值得入手的K210開發(fā)板(如果不小心打了廣告麻煩結(jié)一下廣告費:D)。
其實我早在去年很早的時候就收到過K210的開發(fā)板了,當時是別人送的評測套件,只不過我那時不巧剛畢業(yè),沒有太多時間折騰,就一直拖到最近才有空仔細研究。另一方面的原因是,當時K210剛出,軟件生態(tài)還非常的不成熟,而這個情況現(xiàn)在就好多了,不光有官方的IDE(還是develop版本),甚至還有MicroPython這樣的固件的移植,可玩性高了很多,值得折騰一番。
我個人是打算后面自己設(shè)計一塊K210開發(fā)板的,用于滿足我個人的各種變態(tài)要求(主要是要狗迷你)。不過對于普通玩家而言,BGA的芯片可能不太適合自己DIY,所以可以按我下面的推薦進行購買即可,其中很多都是我親自買過試用的。
1. 官方開發(fā)板套件-KD233
這個是嘉楠官方的評估板套件,好處呢在于可以和官方IDE中的例程項目無縫對接(當然如果不打算用官方IDE就無所謂了,這個后面軟件篇會介紹),IDE中下載的例程都可以直接燒錄運行。同時板子上的資源還是挺多的,攝像頭、麥克風、LCD屏幕之類的都有,而且可以看到芯片周圍有一圈跳線帽,把所有的IO都引出來了,也可以自己取掉跳線帽用杜邦線連接其他硬件。
缺點也很明顯,這板子實在是太愛愛愛大了。..。.反正我是看不順眼,雖然買了但是只是用來驗證官方給的原理圖是否無誤,調(diào)試的時候還是用其他的板子。
價格偏貴,對于想自己設(shè)計硬件的同學可以購買,其他的就不推薦了。
2. Widora-AIRV2/BITK210開發(fā)板套件
與第一個板子完全相反,這個是目前市面上能買到的最小的k210開發(fā)板,而且價格非常實惠。
這個開發(fā)板采用了核心板和底板分離的設(shè)計方式,適合那些想自己做硬件但是又無法設(shè)計核心電路的同學。核心板使用的封裝是NGFF(Mini-PCIE)接口,把芯片最小系統(tǒng)和電源IC集成在了核心板,剩下的功能全部由金手指引出至底板。
可以看到核心板背面在K210的正下方布置有很多濾波電容,因為在這么高的運行主頻下對電源的穩(wěn)定性由很高要求,基本就是按照ARM CPU的Layout方式來設(shè)計PCB的。
板子也有帶攝像頭和LCD,但是默認攝像頭的型號和官方開發(fā)板有點區(qū)別,官方的是OV5640,而這個帶的是OV2640。當然了,這兩個攝像頭是完全pin-to-pin的,可以自己更換,修改一下軟件驅(qū)動就行。屏幕也換成了2.4寸的小一點的ST7789驅(qū)動LCD,我個人還是覺得這屏幕太大(傲嬌)。
還有一個缺點就是,這個板子的配套軟件資源很少(可以說沒有),當然了只要是K210的板子其實各家的軟件都是可以用的,只不過由于硬件上的細微差別,需要自己修改一點源碼(比如GPIO編號之類的)。
總的來說非常推薦,性價比也非常的高,適合在玩熟了之后用作以后項目的主力產(chǎn)品。
3. Sipeed Maixduino 開發(fā)板
Sipeed就是之前做荔枝派的那家公司了,他們團隊也推出了一系列的K210開發(fā)板,足以滿足各種需求,Sipeed Maixduino就是其中一款。
看這個開發(fā)板的名字里面還帶個duino,該不會支持Arduino編程吧??
是的,驚不驚喜意不意外。
目前基礎(chǔ)庫的功能都已經(jīng)實現(xiàn)了,感興趣的同學可以去安裝一下IDE先體驗一下。
Maixduino顯然是沖著兼容Arduino接口設(shè)計的,板子是標準的UNO型,相比與上面的兩個開發(fā)板多了一個ESP32模塊(話說ESP32也是一個網(wǎng)紅硬件),官方開發(fā)板有的功能它都有,體型還挺小巧。
值得一提的是這個板子上面搭載的郵票孔核心板是可以單獨購買的,叫做M1 Module,下面會進行介紹。
4. Sipeed M1 開發(fā)板套件
這個板子使用的就是上面的那個M1 Module,采用核心板加底板的方式,比上面的要小巧很多,同時所有IO都有引出,可以看作一個最小系統(tǒng)洞洞板,我個人比較喜歡這種設(shè)計,相比于Widora的板子黑色沉金也更好看一些。
板子不算太貴,Sipeed 系列的K210板子最大的優(yōu)勢是,軟件資源做得非常好,官網(wǎng)WiKi、教程、源碼的開放都很到位,考慮到硬件和軟件雙方面的條件,Sipeed 的開發(fā)板是我最建議大家購買的。
他家還有其他型號的K210開發(fā)板,我就不一一介紹了,大家感興趣的可以自己去某寶搜。
編程環(huán)境
K210是支持好幾種編程環(huán)境的,從最基本的cmake命令行開發(fā)環(huán)境,到IDE開發(fā)環(huán)境,到Python腳本式開發(fā)環(huán)境都支持,下面會進行分別介紹。
這幾種開發(fā)方式?jīng)]有優(yōu)劣之分,有的人喜歡用命令行+vim,有的人喜歡IDE圖形界面,也有的人根本不關(guān)心編譯環(huán)境覺得人生苦短只想寫Python。
一般來說越基礎(chǔ)的開發(fā)方式比如C語言+官方庫會自由度越大,能充分發(fā)揮出芯片的各種外設(shè)功能,但是開發(fā)難度比較高,過程很繁瑣;越頂層的開發(fā)方式比如寫腳本,雖然十分地便捷,甚至連下載程序的過程都不需要了,但是程序功能的實現(xiàn)極度依賴于MicroPython的API更新,且很多高級系統(tǒng)功能無法使用。
1. 命令行開發(fā)環(huán)境
首先說一下,K210的官方SDK支持兩種開發(fā)模式:FreeRTOS和Standalone(裸機)。
具體選擇哪種模式取決于個人喜好,如果你之前用過FreeRTOS的話,應該可以很快熟悉SDK的相關(guān)接口。我個人對于單片機是更愿意使用裸機開發(fā)模式,因為如果要跑OS的話,我會傾向于使用能跑完整Linux系統(tǒng)的開發(fā)板,比如這個我自己做的Linux-Card。
用命令行開發(fā)的話建議在Linux環(huán)境下(Windows下用命令行總感覺怪怪的),下面介紹環(huán)境搭建方式。
1.1 下載SDK
在官網(wǎng)的資源下載頁面下載相應的SDK:
https://kendryte.com/downloads/kendryte.com
1.2 安裝工具鏈
安裝 build-essential 以獲取 make 工具
$ sudo apt install build-essential
安裝cmake
$ sudo apt install cmake
從勘智官網(wǎng)下載Ubuntu版本工具鏈,放到/opt目錄并解壓縮。
$ sudo mv kendryte-toolchain-ubuntu-amd64-8.2.0.tar.gz /opt$ cd /opt$ sudo tar -zxvf kendryte-toolchain-ubuntu-amd64-8.2.0.tar.gz
打開~/.bashrc文件,在文件末尾添加如下一行,將 /opt/kendryte-toolchain/bin 目錄添加到PATH環(huán)境變量
export PATH=$PATH:/opt/kendryte-toolchain/bin
使修改生效
$ source ~/.bashrc
1.3 編譯 hello world 工程
從Kendryte Github下載kendryte-standalone-sdk
$ git clone git@github.com:kendryte/kendryte-standalone-sdk.git
hello world工程在kendryte-standalone-sdk/src/hello_world目錄下。
創(chuàng)建一個build目錄并進入:
$ mkdir build && cd build
運行cmake
$ cmake 。. -DPROJ=hello_world -DTOOLCHAIN=/opt/kendryte-toolchain/bin
編譯
$ make
會在build目錄下生成.bin文件,接下來把這個文件燒錄進芯片就ok了。
1.4 燒錄固件
K210使用的是串口ISP進行下載程序(也支持J-Link調(diào)試不過個人感覺不太必要,這里就不介紹了)。
IO_16 用于boot 模式選擇,上電復位時,拉高進入FLASH 啟動,拉低進入ISP 模式。復位后,IO_0、IO_1、IO_2、IO_3 為JTAG 引腳,IO_4、IO_5 為ISP也就是UART0引腳。
上面介紹的K210的開發(fā)板都會板載USB-TTL串口的芯片,所以板子直接連上電腦,選擇好串口號,就可以下載程序了,跟Arduino一樣的體驗。只不過下載過程需要用到一個下載工具,叫做K-Flash。
K-Flash的軟件同樣可以在上面的官網(wǎng)地址進行下載,軟件操作界面很簡單,選擇bin文件、板子型號、串口號,點擊下載就可以了。
1.5 打包Kfpkg固件
K210 的固件包主要有兩種格式: .bin 和 .kfpkg。
.kfpkg可以包含多個.bin文件或者模型文件,可以方便地把程序固件和網(wǎng)絡模型文件打包到一起一次性燒錄,燒錄方式是和bin文件一樣的,用K-Flash即可。這里介紹如何制作kfpkg文件以及使用:
創(chuàng)建自己的 .kfpkg 文件
.bin文件是固件內(nèi)容,作為參數(shù)傳給燒錄軟件,軟件會默認燒錄到flash的0地址,完成后重啟即可運行。
但是有時候我們需要燒錄其它二進制文件到flash,比如模型、文件系統(tǒng)、或者自己定義的其它數(shù)據(jù),這時需要指定燒錄的地址,光有 .bin文件燒錄工具并不知道我們想把數(shù)據(jù)燒錄到flash的哪里,打包一個.kfpkg格式的文件則是為了解決這個問題的。
kfpkg由3部分組成:
flash-list.json文本文件:用于儲存.bin文件列表以及燒錄地址等信息
.bin固件
其他文件(二進制文件)
比如我們想同時下載名為XXX.bin的固件,以及YYY.bin的其它文件到Flash的0xA00000地址,則需要寫一個 flash-list.json 文件,內(nèi)容如下:
注意sha256Prefix選項, 固件需要校驗,所以為true, 而其它數(shù)據(jù)(比如模型數(shù)據(jù))不需要,所以為false。
最后,將這三個文件(XXX.bin, YYY.bin, flash-list.json)壓縮成zip文件,然后改后綴名為.kfpkg 即可被燒錄工具識別,并按照指定地址燒錄到flash。
2. IDE開發(fā)環(huán)境
對于想在Windows下開發(fā)的同學,可以使用官方提供的IDE,這也是我最常用的開放方式。
官方的IDE是基于Visual Studio Code開發(fā)的,非常好用,最主要是要有代碼自動補全:D。
2.1 下載IDE
在這個地址下載:
Kendryte IDE Downloadskendryte-ide.s3-website.cn-northwest-1.amazonaws.com.cn
下載完啟動會自動聯(lián)網(wǎng)更新組件,按下面的順序點擊下載官方例程:
IDE的好處就是可以自動化執(zhí)行很多依賴項操作,這樣操作:
然后就可以編譯下載了:
如果編譯報錯的話,首先確認已經(jīng)點了安裝所有依賴,另外記得先點一下編譯左邊的垃圾桶圖標進行項目清理,再嘗試編譯。
IDE下面這一排按鈕其實就是頂部菜單欄的Kendryte選項下的內(nèi)容。
另外值得注意的是,如果使用IDE的Flash Manager下載文件,一定要記得勾選交換大小端,否則燒錄進去的格式是有問題的,切記!
3. MicroPython開發(fā)環(huán)境
上面介紹的兩種開發(fā)環(huán)境都是編寫代碼,然后編譯下載,而這里介紹的這種方式只需要下載一次固件,然后就可以用串口的方式進行Python交互,或者也可以把腳本存在SD卡里然后開機運行。
這種腳本式的交互固件式基于一個叫MicroPython的開源項目做的。
MicroPython 是基于 Python3 的語法做的一款解析器,包含了 Python3 的大多數(shù)基礎(chǔ)語法, 主要運行在性能和內(nèi)存有限的嵌入式芯片上(最早開始火的是STM32上),注意 Micropython 不包含 Python3 的所有語法。
MaixPy是將Micropython移植到K210的一個項目, 支持 MCU 常規(guī)操作, 也集成了機器視覺和麥克風陣列等模塊, 以快速開發(fā)智能應用。
MaixPy項目的開源地址:
sipeed/MaixPygithub.com
Micropython 可以讓我們在 K210 上編程更加簡單快捷,比如我們需要尋找I2C總線上的設(shè)備,只需要使用如下代碼即可實現(xiàn):
同樣,實現(xiàn)一個呼吸燈,只需要如下代碼:
實時拍照:
總之就是非常簡單易用,感興趣的同學可以移步官方WiKi和教程網(wǎng)站:
關(guān)于MaixPy · MaixPy 文檔maixpy.sipeed.com
總結(jié)
本文從芯片架構(gòu),到開發(fā)板選型,再到軟件開發(fā)環(huán)境的搭建介紹了關(guān)于K210的基礎(chǔ)ABC,這塊KPU其實有很多有意思的應用,我會在后面的文章中進行更多介紹,包括SDK中各個模塊的使用方式,以及如何將自己的AI模型部署到K210上面去運行。
-
mcu
+關(guān)注
關(guān)注
146文章
17324瀏覽量
352655 -
嵌入式
+關(guān)注
關(guān)注
5093文章
19178瀏覽量
307702 -
AI
+關(guān)注
關(guān)注
87文章
31536瀏覽量
270343 -
稚暉君
+關(guān)注
關(guān)注
6文章
35瀏覽量
5243 -
嵌入式AI
+關(guān)注
關(guān)注
0文章
34瀏覽量
898
發(fā)布評論請先 登錄
相關(guān)推薦
評論