【Nano Framework ESP32 篇】刷入 nanoCLR 固件以及相關問題

老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因爲那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自制的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子的,帶屏幕,背部可以安裝繼電器,需要自己接線(也不難,把線削出銅絲,然後懟進去,上緊螺絲就行);另一種就類似公牛的那種,無屏幕,一個三腳插孔,不需要引線,程序測試好後直接插電用。第二個給打工仔們用的,買了一塊帶電池接口的 ESP32 板,外殼是他們自己做的,主要是遠程控制,不過那個老周做了兩個版本,一個是 Nano Framework 做的,一個是用官方的 idf 做的(主要是要用到藍牙音x 頻)。

經過實際使用對比,Nano Framework 比 MicroPython 好用。MicroPython 真的太難用了,用來做項目簡直是給後續的維護人員挖墳墓。

好了,上面好像說了無關的鳥話,說回正題。如果你說在 ESP32 上開發應用啥框架最好,那肯定是官方的 idf,C語言直接擼,支持C++。很多人老吐槽 idf 安裝不上。說實話,老周不知道他們是怎麼搞的,老周裝過很多次 idf,在自己家的電腦裝過N次,在樹莓派上裝過,在某辦公室的一臺運行 Deepin 的破電腦上裝過一次,每次都能一步到位。記得老周曾經寫相關水文,直接用離線包裝的。這裏老周就順便扯一下在線安裝的兩個關鍵:

1、安裝Python 後,pip 要改用國內源(比如最高學府源,老週一般用這個);

2、在下載 idf 時,下載來源要選樂鑫的,不要選 github。如果你不會魔法(魔法上網套路多,要小心,可以用託管在國外的虛擬機,安全一點,老周用 Azure 虛擬機下的),github 源容易失敗。

做好上述兩點,基本不會失敗。

也有人吐槽說 idf 很難用,老周反而覺得挺好用的,函數的命名是 *nix 風格,idf 畢竟是官方的,功能也是最多的,如果你要用到的一些功能第三方框架沒有的,那必須上 idf 的。

老周覺得,在國產芯片裏面,樂鑫真的做得不錯了,不然你看看其他的,SDK 全是老鼠屎。這裏點名批評一下嘉楠 Kxxx 芯片,看看你們給的 SDK 都是些啥東東,偷工減料就算了,SDK中還 bug 一串串的。驅動也封裝得雞模狗樣(抄來的,尤其是 spiFlash)。開源程度而言,樂鑫也算可以的了,只有網絡協議部分沒開源。再看看其他的,動不動就是“驅動不開源”,不開源也算了,你爲啥連個接口文檔都不寫?沒寄存器說明,無API說明,調用起來全靠運氣,買這些開發板就是活受罪。

所以,哪怕樹莓派比較貴,但老周堅持用樹莓派。

嗯,又扯遠了,說回 Nano frw。這個框架有一個 .NET 工具——nanoff,主要是用來刷固件和 CLR 的,這個工具直接安裝就能用的。

dotnet tool install -g nanoff

不過,它是基於 .NET 6 的,如果你安裝的 .NET SDK 不是 6.0,無法正常運行,這個簡單,安裝一下 .NET 6 SDK 就完事了,不用找源代碼編譯了,很麻煩的。源碼獲取地址:GitHub - nanoframework/nanoFirmwareFlasher: 🧰 nano firmware flasher nanoff (.NET nanoFramework toolbox)

那我不用 nanoff 工具行不行?可以的喲,樂鑫官方有刷固件工具,下載地址:https://www.espressif.com.cn/sites/default/files/tools/flash_download_tool_3.9.6_2.zip。

現在工具有了,下一步找固件,地址:Cloudsmith - Repositories - .NET nanoFramework (net-nanoframework) - nanoframework-images (nanoframework-images) - Packages

這裏面可是啥都有呢,比如老周這個,ESP32-S3 的,長得像個 U 盤,帶個小屏幕(這款是微雪的)。

  

拆開後是這樣的:

引腳較少,主要是體積小巧,還帶個殼子。殼子沒有螺絲,徒手可以直接拆。

所以,老周選擇的固件就是 ESP32_S3_BLE,不用低功耗藍牙的話,也可以選 ESP32_S3,然後下載一個 zip 包,解壓后里面就是基礎固件和 CLR 固件了,另外有幾個分區表,針對不同大小的 Flash 的。老周買的這個,微雪自己說是 16MB 的板載 Flash。

認識一下這幾個固件:

1、bootloader.bin:就是 BootLoader了,沒什麼好介紹的,就是用官方 idf 編譯的引導程序;

2、nanoCLR.bin:.NET CLR ,大家都是 .NET 老油條了,就不用介紹 CLR 吧;

3、partitions_Xmb.bin:分區表,csv 格式的分區不能直接刷進去的,要二進制文件纔行,Xmb 就是 Flash 大小,如 8mb、16mb 等。

聰明絕頂的你一定猜到了,我們就是把這三個東西刷進去就行。但問題來了,直接在二進制層面寫存儲器,不是有偏移地址嗎?啥東西?就是哪個分區放哪裏唄,偏移的地址就是字節(這樣理解沒問題,不要擡槓),就是把幾個分區排隊,不能有重疊,重疊就會覆蓋數據了。

比如,第一個分區假定從第 16 起,大小是100,那麼它的終點是 16+100;然後,第二分區可以在116後的地址開始,依此類推。

現在,關鍵問題來了,咱們要弄清這幾個固件的起始地址,不能亂刷。亂刷可能運行不了的。

1、bootloader:ESP32-C3 和 ESP32-S3 是特殊羣體,它們的 bootload 起始地址是 0x00,就是從 0 開始;其他的從 0x1000 開始。

2、partition:分區表從 0x8000 開始;

3、Nano CLR:運行時的起始地址是 0x10000。

可能有人又要擡槓了,老周,你是怎麼知道這些的?Nano Framework 自己說的唄,不信你自己找。而且這個也可以參考 idf 的 hello world 示例的分區表,一樣的。只是把工廠固件換成 nanoCLR 罷了。

其實還有一個地址,我們寫的 .NET 程序被燒錄到 0x1B0000 處,不過刷固件時我們不用管它。

好了,該準備的都準備好了,幹活吧各位。打開 flash download tool,在彈出的小對話框中選你的 ESP 型號,比如我的是 ESP32-S3,工作模式就是 develop,不要選工廠模式,那個是大批量開刷,等會兒界面會出現密密麻麻的刷機狀態。刷寫方式保留 UART 就行,點OK。

然後出現主界面,我們依次選好固件文件,填好正確的地址。

注意:每個固件前面的對勾要打上,勾上才表示要刷進去的;窗口底部,選擇正確的串口號。

最後,點擊 START,閉上眼睛等着刷完吧。

要驗證能不能用,到 VS 上,菜單欄執行【擴展】>【管理擴展】,搜索 nano framework。

拼命裝它就是了。如果下載很慢,可以用 https://nanoframework.gallerycdn.vsassets.io/extensions/nanoframework/nanoframework-vs2022-extension/2022.3.0.78/1712863972341/nanoFramework.Tools.VS2022.Extension.vsix,放到迅雷上下就很快。下載完成後,直雙擊運行安裝就行了。

擴展雖然裝好了,但還沒真正應用,此時你要以管理員身份打開 VS,等待幾秒鐘讓擴展更新配置。然後在菜單欄上執行【視圖】>【其他窗口】>【Device Explorer】,打開查看設備的窗口。如果沒有別的問題,你會看到 ESP32 設備了(沒看到的話,可以拔掉重新插上)。

這時你會發現,窗口上的一排奇葩按鈕看不見,不管它,反正不影響使用。

當然,如果你剛纔刷錯了固件,也可能無法運行。沒什麼大不了的,多刷幾個試試就是了。

 新建一個項目,選擇“Blank Application”(空白應用程序)。

然後,就會看到熟悉的代碼了。咱們把 Main 方法中的代碼改一下:

public static void Main()
{
    int id = 0;
    while(true)
    {
        id++;
        Debug.WriteLine($"Hello, Gay{id}!");
        Thread.Sleep(2000);
    }
}

然後,運行。要在輸出窗口中看到內容,要用 Debug 類來輸出。結果如下:

取消調試。咱們在 id++ 那裏設一個斷點,再次運行。

可以斷點調試,是不是比 MicroPython 要強很多呢?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章