Sparkfun_edge--Hello World === # 摘要 * 本文敘述了 tflite-micro 需要部屬的硬體 Sparkfun edge以及其範例程式的編譯、燒錄及驗證畫面, 可參照部奏依序完成實作但 code 硬體不會在此篇文章詳述, 會在下一章[Sparkfun_edge--Hello World 程式解析](https://hackmd.io/_umgk8IfTf-YSei0ewTrKA) * 使用的 source code 為 [tensorflow](https://github.com/tensorflow/tensorflow/tree/v2.3.0-rc2) 中的 v2.3.0-rc2, 硬體選用 Sparkfun edge 主要原因為 tensorflow 官網教程內提及的硬體並範例進行編譯 # 硬體介紹 ## MCU - Sparkfun edge * 完成的程式會燒入此 mcu 中 ![image](https://hackmd.io/_uploads/By64-nNXyg.png ) ## 轉版 - CH340G * 用於做 UART 轉接讓電腦讀到 MCU 的裝置 ![image](https://hackmd.io/_uploads/r1nsen4Qkl.png) # 下載 * 下載tensorflow 並 checkout 到指定分支, 在測試了不同版本後目前v2.3.0-rc2可以完成在 sparkfun edge 的編譯即部屬, 當初在找版本時也是採了幾次坑才找到可使用的版本 * 目前 tensorflow 已將 micro 獨立出來成 tflite-micro 的一個專案, 但當初在使用上編譯不過因此才退而選用 tensorflow 上內的 micro 進行編譯 ```cmake= git clone https://github.com/tensorflow/tensorflow.git cd tensorflow git checkout v2.3.0-rc2 ``` # 編譯 tflitemicro-lite.a * 編譯本地使用的tflitemicro-lite.a ```cmake= make -f tensorflow/lite/micro/tools/make/Makefile microlite ``` * 編譯sparkfunn_edge使用的tflitemicro-lite.a ```cmake= make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge microlite ``` # Hello World 專案介紹 * 這個專案是個簡易的 AI 模型目的是模擬 sin 函數, 並在 Sparkfun edge 的版子上透過 LED 燈秀出 * 在此專案中也有給出簡易的訓練方法來 train 自己的 sin 函數模型, 預設是使用 regression 的方做訓練 * 訓練好的模型會透過 xdd 轉成 c語言的結構, 結構可詳閱```model.cc```, 轉換方式會放在下一篇的筆記中 ![Screenshot from 2024-11-25 22-34-37](https://hackmd.io/_uploads/SJ2Gjbzmkl.png =40%x) # 編譯.bin ## 編譯 hello_world.bin * 執行以下指令編譯 ```cmake= make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin # Binary path # tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/hello_world.bin ``` ## 執行加密 * 在部屬到 Sparkfun edge 時需要針對.bin 進行加密才可執行, 在此透過 Ambiq SDK 進行 ```cmake= # 複製指定加密程式 cp tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info0.py \ tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info.py # 執行加密 python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py \ --bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/hello_world.bin \ --load-address 0xC000 \ --magic-num 0xCB \ -o main_nonsecure_ota \ --version 0x0 ``` * 此時會創建一個 main_nonsecure 需要在透過以下程式創建最終要部屬的檔案 ```cmake= python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_wireupdate_blob.py \ --load-address 0x20000 \ --bin main_nonsecure_ota.bin \ -i 6 \ -o main_nonsecure_wire \ --options 0x1 ``` * main_nonsecure_wire.bin 是最終編譯的 .bin # 燒錄 * 將 USB 燒路線接上 Sparkfun edge 並檢查 com port 序號後設定環境變數 ```cmake= export DEVICENAME=put your device name here export BAUD_RATE=921600 ``` * 長壓住 14 的按鈕並執行以下程式直到燒錄結束 ```cmake= python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/uart_wired_update.py \ -b ${BAUD_RATE} ${DEVICENAME} \ -r 1 \ -f main_nonsecure_wire.bin \ -i 6 ``` * 看到以下畫面 Show 出Sending Reset Command. Done. 及表示燒錄完成可直接按RST重啟 ![image](https://hackmd.io/_uploads/H1ea2qVQ1x.png) ## 成果畫面 * 可以看到底下 LED 燈配合 Sin 函數的變化也跟著亮燈號 ![image](https://imgur.com/W5MF27n.gif) # 總結 * 在本文完成了 Sparkfun edge 的 hello world 專案燒錄, 內容紀錄著程式編譯, 燒錄, 成果展示的畫面 * 程式碼的 Trace 會放在下一篇的筆記內容[Sparkfun_edge--Hello World 程式解析](https://hackmd.io/_umgk8IfTf-YSei0ewTrKA) source : https://github.com/tensorflow/tensorflow/tree/v2.3.0-rc2 https://learn.sparkfun.com/tutorials/sparkfun-edge-hookup-guide/all ###### tags : `AI`, `AI 部屬`