【說(shuō)在前面的話】
按照樹(shù)莓派基金會(huì)的說(shuō)法:
Raspberry Pi Pico is a tiny, fast, and versatile board built using RP2040, a brand new microcontroller chip designed by Raspberry Pi in the UK.
https://www.raspberrypi.org/products/raspberry-pi-pico/
樹(shù)莓派 Pico是一個(gè)小巧、“迅速”且多功能的開(kāi)發(fā)板,基于獨(dú)家定制的RP2040芯片打造,是在英國(guó)的樹(shù)莓派團(tuán)隊(duì)設(shè)計(jì)的全新微控制器。
以30RMB左右的價(jià)格來(lái)看,Pico作為一個(gè)開(kāi)發(fā)板具有非常吸引人的特性:
搭載了設(shè)計(jì)最大頻率為133MHz的雙核Cortex-M0+
實(shí)際可以輕松超頻到250MHz,甚至是400MHz
256K + 8K 的SRAM
由多個(gè)SRAM總線從機(jī)接口構(gòu)成,從而保證了多總線主機(jī)訪問(wèn)時(shí)不易出現(xiàn)沖突的問(wèn)題——雙向八車道的高速,幾乎不會(huì)堵車——吞吐量杠杠的
大量充滿奇思妙想的外設(shè)(這里就不做贅述)
在開(kāi)發(fā)環(huán)境上,Pico身為單片機(jī),卻有著Linux般豪華的富貴病——這么說(shuō)吧,你要是沒(méi)玩過(guò)cmake、gcc、沒(méi)用過(guò)命令行、沒(méi)搞過(guò)OpenOCD,你都不好意思說(shuō)你是Pico的C玩家。
在Pico官方論壇上,曾經(jīng)有一個(gè)帶節(jié)奏的帖子叫做《Pi Pico - the most user un-friendly MCU?》(中文:樹(shù)莓派Pico——對(duì)用戶最不友好的MCU)?如果你可以看懂英文,建議去觀摩下這個(gè)13頁(yè)的熱帖。其中你可以看到:
Pico-SDK團(tuán)隊(duì)開(kāi)發(fā)者下場(chǎng)撕逼親切的與各種暴躁老哥用戶交流使用經(jīng)驗(yàn)
Pico-SDK開(kāi)發(fā)者談Pico開(kāi)發(fā)環(huán)境的設(shè)計(jì)思路,總結(jié)如下:
不會(huì)玩cmake的請(qǐng)學(xué)習(xí)cmake,用不了你多少時(shí)間
Windows我們也支持啊,你裝個(gè)Linux模擬環(huán)境……
我們推薦所有用戶都應(yīng)該用樹(shù)莓派4的Linux環(huán)境來(lái)開(kāi)發(fā)Pico這個(gè)MCU
別人都玩得好好的,你玩不好一定是你不熟悉cmake
makefile玩家、IAR玩家、MDK玩家請(qǐng)自尋出路(“on your own”)
我們團(tuán)隊(duì)廟小,4美元的開(kāi)發(fā)板你還要啥自行車?
……
然而,MCU的開(kāi)發(fā)并不同于MPU的開(kāi)發(fā)。我的觀察中,樹(shù)莓派這類能跑Linux的系統(tǒng),基本上使用的是Linux生態(tài),在這一生態(tài)下,很多工具比如cmake、命令行、GDB或者OpenOCD之類都是如空氣和水一樣自然的東西。然而,樹(shù)莓派團(tuán)隊(duì)在處理Pico這類MCU時(shí)可能多少有點(diǎn)“屁股決定腦袋”了,仍然按照自己的習(xí)慣照搬了Linux的那套開(kāi)發(fā)習(xí)慣到MCU環(huán)境中。
我經(jīng)常說(shuō),拋開(kāi)正態(tài)分布的中央主極大、用兩端的個(gè)案來(lái)舉反例,就是耍流氓。
對(duì)MCU開(kāi)發(fā)環(huán)境來(lái)說(shuō),雖然也有不少人使用gcc、cmake之類的工具,但主體的大多數(shù)人還是以IDE等“一站式”開(kāi)發(fā)工具為主體的。RP2040無(wú)論多么優(yōu)秀,它本質(zhì)上就是個(gè)裝了兩個(gè)Cortex-M0+的大號(hào)MCU,憑什么非要上Linux環(huán)境才能開(kāi)發(fā)?
MDK雖然老舊、不支持多級(jí)工程管理、偶爾閃退、語(yǔ)法提示經(jīng)常出錯(cuò)、被破解的爹媽都不認(rèn)識(shí)……被人罵了那么多,但Cortex-M用MDK開(kāi)發(fā)仍然是主流。但無(wú)奈,人家的孩子人家說(shuō)了算,官方明確態(tài)度說(shuō)暫時(shí)不支持Arm Compiler 6,也不支持用MDK這樣的不帶cmake支持的IDE,你也沒(méi)辦法啊。
好在Pico-SDK是一個(gè)基于BSD 3-Clause協(xié)議的開(kāi)源項(xiàng)目;RP2040的數(shù)據(jù)手冊(cè)寫的也很清晰。官方說(shuō)不支持,我們就自己來(lái)唄?于是就有了這個(gè)MDK專屬的Pico-Template開(kāi)源項(xiàng)目。
實(shí)際上:
Pico-Template 是目前世界上第一個(gè)用MDK配合Arm Compiler 6開(kāi)發(fā)Pico的模板;
使用該模板你可以使用Pico-SDK來(lái)訪問(wèn)全部的外設(shè)
實(shí)際使用中 Pico-Template 具有以下特點(diǎn):
支持Arm Compiler 6
可以使用RTE和Pack-Installer獲得各類中間件軟件包
告別純匯編編寫的startup文件,使用純C語(yǔ)言進(jìn)行開(kāi)發(fā)
配置棧和堆的大小更為簡(jiǎn)單
支持使用JLINK進(jìn)行調(diào)試
默認(rèn)搭載了perf_counter服務(wù)
一鍵切換不同的地址空間布局
在外部Flash里執(zhí)行代碼
在SRAM里執(zhí)行代碼(代碼仍保存在外部Flash里)
在SRAM里調(diào)試
【裸機(jī)思維】對(duì)該開(kāi)源項(xiàng)目提供持續(xù)的維護(hù)和更新
【Pico-Template的部署】
一個(gè)合格的工程模板,應(yīng)該做到只要成功的下載到了本地,就能夠立即使用——Pico-Template也是這樣。因此,所謂的Pico-Template的部署,實(shí)際上有三種方式:它們主要圍繞著如何處理Pico-Template所依賴的第三方倉(cāng)庫(kù)而有所區(qū)別。
第一種方式:使用git工具進(jìn)行下載
1、新建一個(gè)目錄,比如叫做 pico-mdk來(lái)保存模板,并進(jìn)入該目錄
mkdir pico-mdkcd pico-mdk
2、使用git工具clone模板到本地:
git clone https://github.com/GorgonMeducer/Pico_Template 。
3、將Pico-Template所依賴的其它倉(cāng)庫(kù)以submodule的形式更新到本地:
git submodule update --remote --init
至此,我們已經(jīng)成功的將Pico-Template同步到了本地一個(gè)叫做pico-mdk的目錄下。
第二種方式:手工下載壓縮包
1、打開(kāi)Pico-Template在Github上的Release頁(yè)面,下載最新版本的壓縮包。
https://github.com/GorgonMeducer/Pico_Template/releases
完成下載后,解壓縮到本地。
2、打開(kāi)Pico-SDK在Github上的Release頁(yè)面,下載最新的壓縮包:
https://github.com/raspberrypi/pico-sdk/releases
完成下載后,解壓縮到本地。打開(kāi)解壓后的目錄,應(yīng)該看到類似下圖的內(nèi)容:
全選上述目錄列表中的內(nèi)容后,將它們拷貝到Pico-Template的pico-sdk目錄內(nèi)
3、打開(kāi)perf_counter在github上的Release頁(yè)面,下載最新的壓縮包:
https://github.com/GorgonMeducer/perf_counter/releases
完成下載后,解壓縮到本地。打開(kāi)解壓后的目錄,應(yīng)該看到類似下圖的內(nèi)容:
全選上述目錄列表中的內(nèi)容后,將它們拷貝到Pico-Template/project/mdk/perf_counter目錄內(nèi):
至此,我們成功的完成了Pico-Template的合體工作。恭喜恭喜!
第三種方式:網(wǎng)盤見(jiàn)
如果你覺(jué)得上述方法都挺麻煩的,尤其是你無(wú)法穩(wěn)定的訪問(wèn)Github,那么可以在訂閱【裸機(jī)思維】公眾號(hào)后發(fā)送關(guān)鍵字 “Pico”來(lái)獲取網(wǎng)盤鏈接。下載成功后立即可以使用。
這一方法唯一的缺點(diǎn)是:我可能會(huì)忘記更新網(wǎng)盤上的壓縮包。
【如何編譯和下載】
當(dāng)你獲得了Pico-Template后,可以通過(guò)路徑project/mdk找到工程文件:
雙擊后,就可以見(jiàn)到我們熟悉的界面:
單擊編譯,應(yīng)該可以順利的看到類似如下的結(jié)果:
可以看到,在工程目錄下(project/mdk/) 生成了一個(gè)名為 template.uf2 的文件——這就是Pico專用的鏡像文件:
此時(shí),我們可以按住Pico上的白色按鈕不放、將Pico的USB接口連接PC。當(dāng)我們?cè)谖募芾砥髦邪l(fā)現(xiàn)一個(gè)新的叫做 PRI-RP2 的U盤時(shí),說(shuō)明Pico已經(jīng)成功進(jìn)入燒錄準(zhǔn)備狀態(tài)。
將template.uf2拖放到U盤中即可。
如果一切順利,可以看到Pico上的LED以大約0.5Hz的頻率進(jìn)行呼吸。
【如何配置棧和堆的大小】
一個(gè)實(shí)用的工程模板,最繞不開(kāi)的問(wèn)題之一就是:如何設(shè)置棧和堆的大小。Pico-Template提供了極其簡(jiǎn)單的方法。步驟如下:
1、打開(kāi)Options for Target窗口,進(jìn)入Linker選項(xiàng)卡:
單擊圖中紅圈內(nèi)選中的“Edit”按鈕。
這里宏STACK_0_SIZE和HEAP_0_SIZE就是我們要配置的棧與堆的尺寸。請(qǐng)暫時(shí)無(wú)視其它宏的內(nèi)容,也不要修改它們。
完成修改后,保存、重新編譯即可。
【如何在SRAM中執(zhí)行代碼】
由于RP2040芯片并沒(méi)有片內(nèi)Flash,因此通常會(huì)像Pico那樣使用外部Flash來(lái)保存程序。由于RP2040的XIP已經(jīng)將外部Flash的內(nèi)容映射到了Cortex-M0+的地址空間中(從0x10000000開(kāi)始),因此可以直接在外部Flash上執(zhí)行代碼。眾所周知,外部Flash是通過(guò)SPI或者QSPI來(lái)連接的,其速度肯定無(wú)法媲美芯片內(nèi)部的Flash,因此即便 XIP有cache來(lái)提高速度,直接從0x1000-0000的地址上運(yùn)行程序(或者是讀取數(shù)據(jù))顯然存在性能上的瓶頸。為了解決這一問(wèn)題,在SRAM富余的情況下(RP2040帶了264KB的SRAM)對(duì)一些小的應(yīng)用來(lái)說(shuō),完全允許用戶直接在SRAM中執(zhí)行代碼。為了提供這一功能,Pico-Template貼心的提供了對(duì)應(yīng)的工程配置:我們可以在下拉列表中直接一鍵切換:
這一操作的本質(zhì)實(shí)際上是更換了對(duì)應(yīng)的scatter-script腳本。所有用到的鏈接腳本都保存在工程目錄下:
有興趣的小伙伴可以自行把玩。
【如何使用MDK進(jìn)行調(diào)試】
在眾多的商業(yè)調(diào)試工具中,Segger 的J-Link很迅捷的就添加了對(duì)RP2040的調(diào)試支持,具體細(xì)節(jié)可以通過(guò)下面的網(wǎng)址來(lái)了解:
https://wiki.segger.com/Raspberry_Pi_Pico
Pico-Template默認(rèn)已經(jīng)選擇J-Link作為調(diào)試工具。需要注意的是,并非所有的J-Link都能支持RP2040的調(diào)試,按照官方的說(shuō)法,只有v9版本的J-Link硬件才有對(duì)應(yīng)的功能。如果你手頭正好有符合要求的J-Link,恭喜你,獲得了完整的MDK體驗(yàn)——基本告別了手動(dòng)拖放uf2文件,調(diào)試全靠LED的生活。
【elf2uf2轉(zhuǎn)換工具】
最后,值得特別說(shuō)明的是,在Pico_Template的tool目錄下有一個(gè)我親手定制過(guò)的elf2uf2.exe——增加了自動(dòng)計(jì)算0x1000-0000地址開(kāi)始的252個(gè)字節(jié)的CRC32校驗(yàn)碼,并將校驗(yàn)結(jié)果追加其后的功能——如果不這么做,生成的uf2將無(wú)法通過(guò)stage2-boot的校驗(yàn)。
工程模板會(huì)在每次編譯完成后執(zhí)行 axf2uf2.bat,將生成的elf/axf文件轉(zhuǎn)換成Pico可以直接使用的uf2文件,方便用戶進(jìn)行U盤拖放操作。
【說(shuō)在后面的話】
說(shuō)句實(shí)話,我挺喜歡樹(shù)莓派Pico的——即便我對(duì)官方的“Pico官方只支持用cmake開(kāi)發(fā)不然自己想辦法”的態(tài)度有些許不滿,但仍然架不住它的小巧和魅力。這個(gè)模板已經(jīng)涵蓋了除tinyUSB支持以外的幾乎大部分功能,成功的將Pico以普通Cortex-M0+的身份拉回了國(guó)內(nèi)大部分嵌入式工程師所熟悉的開(kāi)發(fā)環(huán)境中。
最后的最后,我一定要把心里憋了很久的那句話吐出來(lái):
就一個(gè)M0+而已,干嘛開(kāi)發(fā)它我還要去用命令行、用Linux、學(xué)cmake?憑什么?
你們Linux玩家人均cmake、命令行、OpenOCD、GDB、gcc,所以就不管單片機(jī)玩家的死活了么?
跟我這兒玩啥凡爾賽?
老子就不想用cmake……你還不讓我玩了?
就一個(gè)M0+而已,我就要用MDK來(lái)開(kāi)發(fā)!怎么地吧!
責(zé)任編輯:haq
-
mcu
+關(guān)注
關(guān)注
146文章
17324瀏覽量
352662 -
MPU
+關(guān)注
關(guān)注
0文章
375瀏覽量
48959 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5121瀏覽量
98218 -
樹(shù)莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105882
原文標(biāo)題:【獨(dú)家】我就要用MDK來(lái)開(kāi)發(fā)樹(shù)莓Pico,怎么地吧!
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32、Arduino、樹(shù)莓派開(kāi)發(fā)方式差異大嗎
Raspberry Pi Pico 2 W 發(fā)布
![Raspberry Pi <b class='flag-5'>Pico</b> 2 W 發(fā)布](https://file1.elecfans.com//web1/M00/F5/D5/wKgaoWdEUHqAHMNaAAEAAFdyIUI290.jpg)
樹(shù)莓派開(kāi)發(fā)的最佳編程語(yǔ)言選擇
新唐科技率先發(fā)布免費(fèi)版Arm Keil MDK,助力嵌入式開(kāi)發(fā)
ARM開(kāi)發(fā)板與樹(shù)莓派的比較
什么是樹(shù)莓派?樹(shù)莓派是什么架構(gòu)的
【BearPi-Pico H3863星閃開(kāi)發(fā)板體驗(yàn)連載】開(kāi)發(fā)環(huán)境搭建
【BearPi-Pico H3863星閃開(kāi)發(fā)板體驗(yàn)連載】BearPi-Pico H3863星閃開(kāi)發(fā)板初體驗(yàn)
我用了3分鐘,從零實(shí)現(xiàn)了單片機(jī)的點(diǎn)燈開(kāi)發(fā)!
樹(shù)莓派gui開(kāi)發(fā)用什么ide
樹(shù)莓派和arm開(kāi)發(fā)板的區(qū)別
linux開(kāi)發(fā)板與樹(shù)莓派的區(qū)別
樹(shù)莓派Pico 2發(fā)布,搭載RP2350雙核RISC-V和Arm Cortex-M33微控制器!
如何恢復(fù)ESP32-PICO-DevKitM-2開(kāi)發(fā)板的出廠固件?
STR-1KW-MDK-GEVK 工業(yè)電機(jī)開(kāi)發(fā)套件數(shù)據(jù)手冊(cè)
![STR-1KW-<b class='flag-5'>MDK</b>-GEVK 工業(yè)電機(jī)<b class='flag-5'>開(kāi)發(fā)</b>套件數(shù)據(jù)手冊(cè)](https://file1.elecfans.com/web2/M00/C9/0E/wKgaomYZAYmAV6EbAAEh67ptomA505.png)
評(píng)論