常見問題¶
每題先給結論,需要操作時列出命令與預期結果,細節連到對應頁面。範例以 IPRO7AI Reef EVK V4.0 為準。錯誤訊息的對照表見除錯與疑難排解。
建置¶
SDK、燒錄工具與工具鏈從哪裡取得?¶
-
SDK V2.2.1:從 GitHub Release 下載
IPRO-SDK-V2.2.1.tar.gz,核對頁面上的 SHA-256 後解開:shasum -a 256 IPRO-SDK-V2.2.1.tar.gz # Linux:sha256sum;與 Release 頁面上的值相同 tar xzf IPRO-SDK-V2.2.1.tar.gz cat IPRO-SDK-V2.2.1/VERSION.txtVERSION.txt印出IPRO7: IPRO-SDK-V2.2.1、IPRO6: IPRO-SDK-V2.2.1與Release Date: 2026-11-10。 - RISC-V 工具鏈:未包含於 V2.2.1,請洽 INTELPRO。預設安裝於/opt/toolchain/riscv_ipro7/。 - IntelProCube 命令列燒錄工具(ipro_iot_tool_macos、ipro_iot_tool_linux、ipro_iot_tool.exe):未包含於 V2.2.1,從 GitHub 下載 0.7.0.1,見準備開發環境。 - Windows 線上安裝程式 3.6.0 與 VS Code Extension 3.3.0:目前版本,從 ipro-sdk-releases 下載;安裝程式會直接安裝 SDK V2.2.0 與 Windows 版工具鏈,見 Windows 安裝與 VS Code。 - IPRO AI Studio:不在 SDK 內,從 GitHub 下載。
build_freertos.sh 與 make -C 有什麼不同?¶
make -C apps/<分類>/<應用> 只建置一個應用,必須寫完整路徑。build_freertos.sh 在 make 之外加上 clean、flash、monitor、size 與 test,可只寫應用名稱並串接動作:
兩者產出相同,都在 <應用>/build/build_out/。build_freertos.sh flash 會依設定檔自動替 Reef 選 --chip-variant IPRO7AI,以 -P 指定分割表,monitor 以應用自己的主控台鮑率開啟。它無法傳 --boot2 與 --mfg,也不能燒錄 IPRO6S;這些情況直接使用 IntelProCube 工具,見工具命令列。
哪些應用能在 Reef 上執行?要選哪個設定檔?¶
40 個應用中有 9 個附 Reef 設定。只有 ipro7ai_reef_demo、ipro_reef_teach 與 ipro_agora_sentino 直接 make 就是 Reef 版本;其他應用的 .config 是 IPRO7 EVB 或 IPRO7AI EVK 的設定,要以 DEFCONFIG= 選 Reef 設定:
| 應用 | 建置命令(在 SDK 根目錄) |
|---|---|
ipro7ai_reef_demo |
make -C apps/platform/ipro7ai_reef_demo |
ipro7ai_reef_demo(Wi-Fi 與 RTSP) |
make -C apps/platform/ipro7ai_reef_demo DEFCONFIG=defconfig_wifi_ipro6s |
ipro_reef_teach |
make -C apps/ai/ipro_reef_teach |
ipro_ble_remote |
make -C apps/bluetooth/ble/ipro_ble_remote DEFCONFIG=defconfig_reef |
ipro_throughput_test |
make -C apps/bluetooth/ble/ipro_throughput_test DEFCONFIG=defconfig_reef |
ipro_le_audio_headset |
make -C apps/bluetooth/le_audio/ipro_le_audio_headset DEFCONFIG=defconfig_reef |
ipro7_uvc_cam(網路攝影機) |
make -C apps/multimedia/ipro7_uvc_cam DEFCONFIG=defconfig_reef_ov5640 |
ipro7_uvc_cam(剪刀石頭布) |
make -C apps/multimedia/ipro7_uvc_cam DEFCONFIG=defconfig_reef_rps |
ipro7_jpeg_decode |
make -C apps/multimedia/ipro7_jpeg_decode DEFCONFIG=defconfig_reef(主控台 921600) |
ipro_ai_link |
make -C apps/test/ipro_ai_link DEFCONFIG=defconfig_reef |
ipro_agora_sentino |
make -C apps/multimedia/ipro_agora_sentino |
DEFCONFIG=defconfig_<名稱> 的輸出放在 build_<名稱>/build_out/,例如 defconfig_reef 在 build_reef/build_out/,.config 不會被改動。要確認一個設定檔是不是 Reef 版本:
印出 CONFIG_IPRO7AI_REEF=y 即是。各應用的分割表、--boot2、--mfg 與 USB 識別見 IPRO7AI Reef EVK,其餘應用需要的板子見範例。
改了 .config,相依的設定卻沒有生效?¶
建置照原樣讀取 .config,由 cmake/generate_autoconf.cmake 產生 autoconf.h。Kconfig 檔只是說明,select、depends on 與預設值都不會自動套用,相依設定必須自己寫進 .config。例如啟用 CONFIG_AI_SUPPORT=y 時,也要寫入 CONFIG_USE_PSRAM=y。唯一的例外是 Reef 的晶體微調:設定檔沒寫 CONFIG_IPRO7_XTAL_CAPCODE 時,建置會加入 95。
make menuconfig 需要的 tools/kconfig/menuconfig.py 與 make defconfig 使用的 configs/ 目錄都未隨附,請直接編輯 .config,或另存成 defconfig_<名稱> 以 DEFCONFIG= 建置。詳見建置系統與設定。
找不到工具鏈,或工具鏈不在預設路徑?¶
工具鏈前綴依序取自:環境或命令列的 CROSS_COMPILE、設定檔的 CONFIG_CROSS_COMPILE、project.build 的預設路徑 /opt/toolchain/riscv_ipro7/bin/riscv64-unknown-elf-(Windows 沒有預設值)。40 個 .config 中有 30 個寫了 CONFIG_CROSS_COMPILE。工具鏈放在其他位置時:
CMake 設定階段印出 [toolchain] Vendor toolchain detected … 表示找到了 INTELPRO 的工具鏈。.config 中的 CONFIG_CPU_ID="intelpro_ipro7" 請保留。build_freertos.sh size 固定使用預設路徑的 size。
可以在 Windows 上建置嗎?¶
可以。以 IPRO SDK Online Setup 安裝的 SDK 已修正 Windows 上的建置問題,並加入 PowerShell 版的 build_freertos.ps1,可以在 PowerShell 或 VS Code 建置、燒錄與開啟主控台,見 Windows 安裝與 VS Code。
直接使用從 GitHub 下載的套件時,命令列流程以 macOS 與 Linux 為主:build_freertos.sh 是 bash 腳本,tools/serial_monitor.py 使用 termios,兩者都不能在 Windows 執行。project.build 有 Windows 分支,條件如下:
- 每次建置都要指定
CROSS_COMPILE,因為 Windows 沒有預設的工具鏈路徑,而.config中的CONFIG_CROSS_COMPILE是 Unix 路徑:make -C apps/platform/ipro7ai_reef_demo CROSS_COMPILE=<工具鏈路徑>/bin/riscv64-unknown-elf-。 cmake與python(不是python3)必須在PATH上;隨附的tools/cmake/只有 Linux 版。- 燒錄用
ipro_iot_tool.exe,序列埠為COM5這類名稱;主控台用任一 Windows 序列埠終端程式開啟。
套件本身沒有說明 Windows 上使用哪一種 shell 與 make;建議改用 Online Setup 安裝的環境。
Flash 或 RAM 不夠用?¶
先看連結器在建置最後印出的記憶體區段使用量,再用 ./build_freertos.sh size <應用> 與 .map 檔找出最大的占用者,方法見大小與記憶體分析。OCRAM 為 256 KB,BLE 控制器的 Exchange Memory(CONFIG_EM_SIZE)由其中劃出;同時啟用 CONFIG_AI_SUPPORT 與 CONFIG_MM_SUPPORT 時,OCRAM 區段縮為 64 KB 或 48 KB。關閉不需要的元件,或把大型緩衝區放到 PSRAM(CONFIG_USE_PSRAM=y)。Flash 預設以 1 MB 版面連結,設 CONFIG_IPRO7_FLASH_2M=y 改用 2 MB 版面;Reef 各設定的情況見 IPRO7AI Reef EVK。
燒錄與主控台¶
燒錄失敗怎麼辦?¶
依序確認:
- 看結果字串:工具輸出中有沒有
[All Success];工具失敗時也以 0 結束。 - 晶片設定:Reef 用
--chip-variant IPRO7AI。工具會記住上一次的設定,換板子時務必重新指定。輸出出現flash jedec id: 00000000或IPRO FLASH MATCH TYPE FAIL就是這個原因。 - 下載模式:按住 SW1(BOOT),按一下 SW2(RESET),放開 SW1,主控台應保持靜默;或在主控台輸入
reboot_dl,畫面印出reboot to download mode。其他方法見進入下載模式。 - 序列埠:關閉其他監看程式;macOS 用
/dev/cu.*;IPRO Debug Probe 用名稱以02結尾的埠。 - 分割表:
ipro7ai_reef_demo與ipro7_uvc_cam用--pt chips/ipro7/partition/partition_cfg_2M.toml;ipro_ble_remote的 OTA 版本第一次要帶--boot2與partition_cfg_2M_remote_ab.toml;ipro_reef_teach用自己的partition_reef_teach.toml、--skip-ota與--mfg。各應用見 IPRO7AI Reef EVK。
燒完按 SW2 重置,主控台出現應用的開機訊息即成功。完整步驟見燒錄與序列埠。
主控台是亂碼或沒有輸出?¶
亂碼多半是鮑率不符。鮑率由設定檔的 CONFIG_PLATFORM_UART_BAUDRATE 決定,未設定時為 115200;Reef 的設定都是 115200,只有 ipro7_jpeg_decode 的 defconfig_reef 是 921600。build_freertos.sh monitor 會自動使用應用的鮑率;自己開啟時指定 --baud:
沒有輸出時:板子可能還在下載模式(按 SW2 重置)、U6 的 TX/RX 接反(U6 第 3 腳是 Reef 的 TX),或開的是 Debug Probe 的 04 埠。serial_monitor.py 只能讀取與送出一行指令;要逐行輸入,請用 screen /dev/cu.usbserial-XXXX 115200 或其他序列埠終端程式。
macOS 的 /dev/cu.* 與 /dev/tty.* 有什麼差別?¶
同一個序列裝置在 macOS 上有兩個節點:/dev/cu.* 直接開啟;/dev/tty.* 會等待載波偵測(DCD)訊號,程式因此卡住。一律使用 /dev/cu.*。
出現 Resource busy 表示其他程式(另一個監看程式、IDE 或 stty -f)正占用序列埠。以 lsof /dev/cu.usbserial-XXXX 找出並關閉它,同一時間只開一個監看程式。
BLE¶
該選哪一個 BLE 控制器函式庫?¶
由 .config 的三個設定選出函式庫:CONFIG_IPRO_BLE_CTLR_LIB(link1_periph 只做 peripheral 與 broadcaster;需要 central 或多條連線時用 link1、link2、link4)、CONFIG_IPRO_BLE_CTLR_FEATURE(bt54_iso2 加入 ISO/LE Audio,需要 CONFIG_EM_SIZE=32)與 CONFIG_IPRO_BLE_CTLR_CFG_DBG(未設定時使用 _release 函式庫)。CONFIG_BT_CONN 不可超過所選函式庫的連線數。建置時 CMake 印出 [ipro_ble_controller] Using prebuilt <檔名>,可確認實際連結的函式庫。完整規則見 BLE 開發;從最接近需求的 Reef 設定(例如 ipro_ble_remote/defconfig_reef)開始修改。
有 BLE 控制器原始碼嗎?¶
沒有。IPRO BLE 控制器只以預編譯函式庫提供,位於 components/wireless/bluetooth/ipro_ble_controller/lib/,共 16 個 IPRO7 函式庫:4 種連線配置 × 2 種功能配置 × debug/release。本版沒有 IPRO6S 的 BLE 控制器函式庫,IPRO6S 應用只有 Wi-Fi。
下列設定會改為從原始碼建置控制器,在本套件中無法建置:CONFIG_IPRO_BLE_CTLR_FORCE_SOURCE_BUILD、CONFIG_IPRO_BLE_CTLR_SUBRATING、CONFIG_IPRO_BLE_CTLR_CSSA、CONFIG_IPRO_PM_BLE、CONFIG_IPRO_PM_PDS_CONNECTED。需要其他函式庫組合或這些功能時,請洽 INTELPRO。
配對資料在重置後消失?¶
配對金鑰由 Host 的 Settings 儲存。參考 ipro_le_audio_headset 的 defconfig_reef:
在 bt_enable() 的就緒回呼中,先呼叫 ipro_ble_ctlr_hcitl_host_ready(),再於開始廣播前呼叫 settings_load_subtree("bt") 並檢查回傳值;先廣播的話,已配對的手機連上時會找不到金鑰而重新配對。ipro_ble_remote 的設定不儲存配對資料。若板子上已沒有配對資料而手機仍保留舊配對,請在手機的藍牙設定中刪除該裝置後重新配對。
BLE 吞吐量能到多少?¶
ipro_throughput_test 在兩片 IPRO7AI Reef EVK 之間的實測(預編譯 link2 控制器、ATT MTU 247、DLE 251 位元組、每包 244 位元組、連線間隔 50 ms、CONFIG_IPRO7_BLE_HOTCODE=y、單向傳送 8 秒):2M PHY 約 1.34 Mbps,1M PHY 約 747 kbps。數值對應該測試條件,不代表所有情境。
大量資料建議使用 2M PHY、30–50 ms 連線間隔與 244 位元組的資料包。步驟與完整結果見 BLE 吞吐量測試。
如何做 OTA 韌體更新?¶
在 Reef 上,ipro_ble_remote 的 defconfig_reef 提供 BLE OTA(GATT 服務 0xFF60),需要 boot2 與 A/B 分割表 partition_cfg_2M_remote_ab.toml:
- 以
--boot2與--pt …/partition_cfg_2M_remote_ab.toml第一次燒錄,開機訊息先出現[BOOT2] IPRO7 Boot2 v0.6.0。 - 以
make_reef_ota.sh產生build_reef/build_out/ipro_ble_remote_reef.xz.ota。 - 以
reef_ota.py或 Android 示範 Appipro_remote_demo.apk傳送套件;板子重新開機後執行新韌體。
不要在以標準 partition_cfg_2M.toml 燒錄的 Reef 上做 OTA,板子會完全沒有輸出,只能進下載模式重燒。命令見 Reef 的 OTA 工具,整體流程見 OTA 更新。
平台與連網¶
V2.2.1 支援 IPRO6S 嗎?¶
支援 Wi-Fi。V2.2.1 隨附 3 個 IPRO6S 應用:ipro6_demo(Wi-Fi 6 station/soft-AP)、ipro6_if_wifi(經 SDIO 或 USB 給主機用的 Wi-Fi 橋接)與 ipro6_fmac(Linux 主機用的 FullMAC 韌體)。本版沒有 IPRO6S 的 BLE 控制器函式庫與 BLE/BR/EDR 應用。
在 Reef 上,IPRO6S 是插在 microSD 卡座的 FIN Wi-Fi 卡,卡上韌體是 ipro6_if_wifi 的 SDIO 設定:
產出 apps/platform/ipro6_if_wifi/build_ipro6_sdio/build_out/ipro6_if_wifi_IPRO6.bin。IPRO6S 映像以 IntelProCube 的 --chipname ipro6 燒錄,build_freertos.sh flash 不適用。可用的設定檔與燒錄方式見 IPRO6S。
IPRO7 要怎麼連網?¶
IPRO7 以外接無線電連上 Wi-Fi,Reef 上是經 SDIO 連接的 IPRO6S FIN 卡:
- IPRO6S(SDIO):IPRO7 端元件
components/network/ipronet_host,lwIP 網路介面iproeth0。Reef 上就是 FIN 卡:ipro7ai_reef_demo的defconfig_wifi_ipro6s(含 RTSP 相機串流)與ipro_agora_sentino。步驟見 Wi-Fi 與 RTSP 串流。 - 其他:ATBM6162(SDIO)、AIC8800(SDIO)與 ESP32(UART AT 指令)的元件也在套件中。
- 有線網路:EMAC(RMII)驅動(
CONFIG_ETHERNET)。
詳見網路。
SDK 支援哪些 RTOS?BLE Host 是 Zephyr 嗎?¶
40 個應用全部是 FreeRTOS(核心 V11.1.0):37 個 IPRO7、3 個 IPRO6S。BLE Host 來自 Zephyr v4.4.0,透過 SDK 的移植層在 FreeRTOS 上執行,應用使用 Zephyr 的 bt_* API,但不需要安裝 Zephyr。
SDK 也是 Zephyr v4.4.0 模組,板型為 ipro7_evb 與 ipro7ai_evk,沒有 Reef 的板型;SoC 的 Kconfig 說明指出 Reef 執行 ipro7_evb 映像時要設 CONFIG_SOC_IPRO7_XTAL_CAPCODE=95。詳見 Zephyr RTOS。
可以使用 Thread 或 Matter 嗎?¶
Thread 只在 Zephyr 下提供:Zephyr 的 IEEE 802.15.4 驅動加上 OpenThread,以 Zephyr 的 samples/net/openthread/shell 搭配 SDK 的 zephyr/samples/ieee802154_shell/ot.conf 與 app.overlay 建置。FreeRTOS 應用不含 Thread,本版也不含 Matter。詳見 Thread 與 Matter。
如何調整晶體頻率偏移(CFO)?¶
在 .config 設定 CONFIG_IPRO7_XTAL_CAPCODE=<1–255>。開機時 board_init() 套用它並印出 [XTAL] capcode <開機值> -> <設定值>,之後每次 RF 初始化都會重新載入。設為 0 時保留開機值,直到第一次 RF 初始化載入 ROM 預設值 85。Reef 未指定時自動使用 95,CMake 設定階段印出 [board] IPRO7AI Reef: CONFIG_IPRO7_XTAL_CAPCODE=95 (board default)。
數值越大,頻率越低:頻率偏高(正偏移)時調大,偏低時調小。這是板子層級的數值,量產時仍需逐顆校正。程式中也可直接呼叫 AON_Set_Xtal_CapCode() 與 AON_Get_Xtal_CapCode()(bsp/drivers/ipro7_soc/std_drv/inc/drv_aon.h)。
除錯¶
如何開啟除錯日誌?¶
在 .config 設定整數等級後重新建置:
程式讀取的是 CONFIG_LOG_DEFAULT_LEVEL 這個整數,只改 CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y 之類的選項不會生效;CONFIG_BT_DEBUG 也不會開啟 Host 日誌。執行時可用 ipro_log_set_level() 調整,見 API 參考。
當機或堆疊溢位怎麼分析?¶
韌體在 CPU 例外時會印出 MCAUSE、MEPC、出錯的任務與呼叫回溯;用工具鏈的 addr2line 對照同一次建置的 .elf,即可找到函式與原始碼行號。堆疊溢位會印出 [!] Stack overflow: <任務>,請加大 xTaskCreate() 的堆疊深度(單位為 word)。ipro7ai_reef_demo 與 ipro_reef_teach 當機後會重複印出 ==DUMP_READY:2000000==,等待未隨附的主機端工具:存下診斷後按 SW2 重置即可。本版沒有晶片上除錯器(JTAG/GDB)的設定。詳見當機分析。