時鐘與 UF2 燒錄實戰(zhàn))
基于 Zephyr RTOS 的 Seeeduino XIAO 板級支持詳解硬件接口、系統(tǒng)時鐘與 UF2 燒錄實戰(zhàn)【免費下載鏈接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.項目地址: https://gitcode.com/GitHub_Trending/ze/zephyr導讀Seeeduino XIAO 是一塊僅 20 mm × 17.5 mm 的超小型 ARM 開發(fā)板本文以 Zephyr 倉庫中該板卡的板級支持文檔boards/seeed/seeeduino_xiao/doc/index.rst為主線結(jié)合其設(shè)備樹.dts、引腳復用配置、Kconfig 默認配置與板級 CMake 腳本系統(tǒng)講解 XIAO 在 Zephyr 下的硬件規(guī)格、六大外設(shè)接口SPI / I2C / 串口 / USB / DAC / GPIO的引腳分配、48 MHz 系統(tǒng)時鐘的生成方式以及基于 BOSSA 兼容 UF2 引導程序的完整燒錄與調(diào)試流程。讀完本文你將能夠獨立完成 XIAO 上 Zephyr 應用的編譯、燒錄、串口觀測與接口開發(fā)。Seeeduino XIAO 開發(fā)板外觀板卡概覽Seeeduino XIAO 由 Seeed Studio 出品是一塊面向可穿戴、傳感器節(jié)點與空間受限場景設(shè)計的極小板卡。在 Zephyr 中該板卡的標識符identifier為seeeduino_xiao定義于 boards/seeed/seeeduino_xiao/board.yml其 SoC 為samd21g18a屬于 Atmel/Microchip SAMD21 系列。從 boards/seeed/seeeduino_xiao/seeeduino_xiao.yaml 可以看到 Zephyr 對該板卡的能力聲明架構(gòu)ARMCortex-M0Flash / RAM256 KiB / 32 KiB可用工具鏈zephyr與gnuarmemb官方支持的設(shè)備驅(qū)動類別dma、dac、gpio、hwinfo、i2c、spi、uart、usb_device、watchdogXIAO 兼容接口xiao_adc、xiao_gpio、xiao_i2c、xiao_serial、xiao_spi、xiao_dac對應下方的 XIAO 擴展連接器其中xiao_*系列接口通過 boards/seeed/seeeduino_xiao/seeed_xiao_connector.dtsi 中的seeed,xiao-gpio連接器節(jié)點對外暴露使得依賴XIAO 引腳語義的通用 Shield/擴展板可以在不同 XIAO 兼容板卡間復用。硬件規(guī)格板級文檔列出的核心硬件特性如下項目規(guī)格處理器ATSAMD21G18AARM Cortex-M048 MHz存儲256 KiB Flash、32 KiB RAM指示燈三個用戶 LED一個電源/狀態(tài) LED RX/TX 串口指示 LEDUSB原生 USB 設(shè)備端口USB-C 接口尺寸20 mm × 17.5 mm引腳14 個引出引腳含電源與模擬/數(shù)字復用引腳在 seeeduino_xiao.dts 中三個 LED 被分別映射到porta的 17、18、19 號引腳且均為GPIO_ACTIVE_LOW低電平點亮并提供了led0/led1/led2別名以便示例程序直接使用leds { compatible gpio-leds; led: led_0 { gpios porta 17 GPIO_ACTIVE_LOW; label LED; }; rx_led: led_1 { gpios porta 18 GPIO_ACTIVE_LOW; label RX_LED; }; tx_led: led_2 { gpios porta 19 GPIO_ACTIVE_LOW; label TX_LED; }; }; aliases { led0 led; led1 rx_led; led2 tx_led; };系統(tǒng)時鐘32 kHz 外部晶振 片上 PLLSAMD21 內(nèi)部集成了可配置的 Generic ClockGCLK與 APB 時鐘分配單元。XIAO 板級文檔明確指出MCU 使用 32 kHz 外部晶振XOSC32K作為時鐘源由片上 PLL 倍頻產(chǎn)生 48 MHz 系統(tǒng)時鐘內(nèi)部 APB 與 GCLK 的初始化方式與上游 Arduino 庫保持一致。這一配置在默認 defconfig 中得到印證見 seeeduino_xiao_defconfigCONFIG_SOC_ATMEL_SAMD_XOSC32Ky CONFIG_SOC_ATMEL_SAMD_XOSC32K_AS_MAINy同時設(shè)備樹中將 CPU 時鐘頻率顯式聲明為 48 MHzseeeduino_xiao.dtscpu0 { clock-frequency 48000000; };這意味著在 XIAO 上編寫應用時默認即獲得 48 MHz 主頻無需額外配置若你的設(shè)計需要對時鐘樹做定制例如改用內(nèi)部 OSC 以省去晶振依賴需要修改上述 Kconfig 項與對應 SoC 時鐘驅(qū)動配置。外設(shè)接口與引腳連接板級文檔按 SERCOM 外設(shè)逐項說明了 XIAO 的接口分配。SAMD21 內(nèi)部共有 6 個 SERCOM 外設(shè)每個 SERCOM 均可獨立配置為 USART、SPI 或 I2C。XIAO 上啟用了 SERCOM0/2/4 三個具體分配如下接口SERCOM引腳說明SPISERCOM0pin 9 (MISO)、pin 10 (MOSI)、pin 8 (SCK)連接 SPI 設(shè)備I2CSERCOM2pin 4 (SDA)、pin 5 (SCL)連接 I2C 傳感器/設(shè)備串口Zephyr 控制臺SERCOM4pin 7 (RX)、pin 6 (TX)默認 115200-8-N-1USB 設(shè)備原生 USB——與主機 PC 通信DAC片上 DACpin 010 位分辨率單通道SPISERCOM0設(shè)備樹中 SERCOM0 被配置為atmel,sam0-spi模式seeeduino_xiao.dtssercom0 { status okay; compatible atmel,sam0-spi; dipo 1; dopo 1; ... pinctrl-0 sercom0_spi_default; pinctrl-names default; };對應引腳復用見 seeeduino_xiao-pinctrl.dtsisercom0_spi_default: sercom0_spi_default { group1 { pinmux PA5D_SERCOM0_PAD1, /* D9 MISO */ PA6D_SERCOM0_PAD2, /* D10 MOSI */ PA7D_SERCOM0_PAD3; /* D8 SCK */ }; };引腳編號與文檔一致D9 對應 MISO、D10 對應 MOSI、D8 對應 SCK。I2CSERCOM2sercom2 { status okay; compatible atmel,sam0-i2c; clock-frequency I2C_BITRATE_FAST; ... };I2C 時鐘頻率配置為I2C_BITRATE_FAST400 kHz。引腳映射為 PA8/PA9D4SDA、D5SCLsercom2_i2c_default: sercom2_i2c_default { group1 { pinmux PA8D_SERCOM2_PAD0, /* D4 SDA */ PA9D_SERCOM2_PAD1; /* D5 SCL */ }; };串口SERCOM4Zephyr 控制臺SERCOM4 承擔 Zephyr console 與 shell 的角色設(shè)備樹chosen節(jié)點指定chosen { zephyr,console sercom4; zephyr,shell-uart sercom4; ... };串口默認波特率 115200current-speed 115200引腳映射為 PB9D7RX、PB8D6TXsercom4_uart_default: sercom4_uart_default { group1 { pinmux PB9D_SERCOM4_PAD1, /* D7 RX */ PB8D_SERCOM4_PAD0; /* D6 TX */ }; };默認 defconfig 中已啟用串口控制臺與中斷驅(qū)動模式CONFIG_CONSOLEy CONFIG_SERIALy CONFIG_UART_CONSOLEy CONFIG_UART_INTERRUPT_DRIVENyUSB 設(shè)備端口SAMD21 原生 USB 控制器usb0在設(shè)備樹中被啟用并作為 Zephyr USB 設(shè)備控制器zephyr_udc0zephyr_udc0: usb0 { status okay; pinctrl-0 usb_dc_default; pinctrl-names default; };usb_dc_default: usb_dc_default { group1 { pinmux PA25G_USB_DP, /* USB D */ PA24G_USB_DM; /* USB D- */ }; };USB 設(shè)備端口可用于與主機 PC 通信典型用例是 Zephyr 的usb系列示例其中 usb-cdc-acm 示例會建立虛擬串口并回顯字符——它也是板級文檔明確推薦參考的示例。CONFIG_USB_CDC_ACM的啟用還直接影響燒錄體驗見下文編程與調(diào)試。DACpin 0SAMD21 內(nèi)置 10 位分辨率單通道 DACXIAO 上輸出引腳為pin 0PA2dac0 { status okay; pinctrl-0 dac_default; pinctrl-names default; };dac_default: dac_default { group1 { pinmux PA2B_DAC_VOUT; }; };GPIO 與 XIAO 連接器除上述接口外XIAO 的 14 個引腳還通過 seeed_xiao_connector.dtsi 中的xiao_d連接器節(jié)點建立了 D0–D10 與 MCU GPIO 的映射XIAO 引腳MCU 引腳備注D0PA2兼 DAC 輸出D1PA4兼 ADC 輸入D2PA10兼 ADC 輸入D3PA11兼 ADC 輸入D4PA8兼 I2C SDAD5PA9兼 I2C SCLD6PB8兼 UART TXD7PB9兼 UART RXD8PA7兼 SPI SCKD9PA5兼 SPI MISOD10PA6兼 SPI MOSI該連接器同時為xiao_spi、xiao_i2c、xiao_serial、xiao_dac、xiao_adc提供了別名節(jié)點分別指向 SERCOM0、SERCOM2、SERCOM4、DAC0 與 ADC方便應用按XIAO 語義而非具體 MCU 外設(shè)來引用。Flash 分區(qū)與 UF2 引導seeeduino_xiao.dts 將 256 KiB Flash 劃分為三個分區(qū)分區(qū)起始地址大小標簽說明boot_partition0x000000008 KiBuf2只讀UF2 引導程序所在區(qū)域code_partition0x00002000232 KiB256-8-16code應用代碼分區(qū)chosen中的zephyr,code-partitionstorage_partition0x0003c00016 KiBstorage保留給應用可用于 FCB 或 LittleFS 等存儲方案boot_partition: partition0 { compatible zephyr,mapped-partition; label uf2; reg 0x00000000 DT_SIZE_K(8); read-only; }; code_partition: partition2000 { compatible zephyr,mapped-partition; label code; reg 0x2000 DT_SIZE_K(256-8-16); read-only; }; storage_partition: partition3c000 { compatible zephyr,mapped-partition; label storage; reg 0x0003c000 DT_SIZE_K(16); };這一布局與 XIAO 出廠自帶的 BOSSA 兼容 UF2 引導程序嚴格對應引導程序占據(jù)頭部 8 KiB應用固件從 0x2000 開始存放。默認 defconfig 也啟用了 UF2 與 BOSSA 相關(guān)選項CONFIG_BUILD_OUTPUT_HEXy CONFIG_BUILD_OUTPUT_UF2y CONFIG_BOOTLOADER_BOSSAy CONFIG_BOOTLOADER_BOSSA_ADAFRUIT_UF2y即構(gòu)建 Zephyr 應用時除了生成標準的.hex固件外還會同時生成.uf2格式鏡像可直接拖入 XIAO 的 UF2 燒錄盤。編程與調(diào)試XIAO 出廠自帶BOSSA 兼容的 UF2 引導程序。板級支持腳本 board.cmake 注冊了兩個燒錄 runnerinclude(${ZEPHYR_BASE}/boards/common/bossac.board.cmake) include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)bossac通過bossac工具走 BOSSA 協(xié)議燒錄配合 UF2 引導的批量設(shè)備openocd通過 OpenOCD 走 SWD 調(diào)試接口燒錄配合 support/openocd.cfg 配置文件需要外接調(diào)試器兩種方式均可通過west flash調(diào)用。進入引導程序模式XIAO 的 UF2 引導程序有兩種進入方式手動方式快速短接RST 與 GND 焊盤兩次。此時 XIAO 會以 UF2 大容量存儲設(shè)備燒錄盤形式出現(xiàn)在主機上將.uf2文件拖入即完成燒錄。自動方式如果固件啟用了CONFIG_USB_CDC_ACM那么執(zhí)行west flash時Zephyr 會通過 USB CDC ACM 虛擬串口發(fā)送 BOSSA 命令引導程序?qū)⒆詣舆M入無需手動短接。注意自動方式依賴當前固件已啟用CONFIG_USB_CDC_ACM若固件未啟用該配置則需使用手動短接 RST/GND 兩次的方式進入引導模式。實戰(zhàn)編譯并燒錄 hello_world以下完整流程對應板級文檔中的 Flashing 章節(jié)可直接在終端中復現(xiàn)。1. 構(gòu)建 hello_world在 Zephyr 環(huán)境中執(zhí)行板卡目標為seeeduino_xiao源文件位于 samples/hello_world$ west build -b seeeduino_xiao samples/hello_world構(gòu)建完成后輸出目錄build/zephyr/下會同時生成zephyr.hex與zephyr.uf2由CONFIG_BUILD_OUTPUT_UF2y保證。2. 連接硬件使用 USB 線將 XIAO 連接到主機供電 燒錄通道準備一個3.3 V USB 轉(zhuǎn)串口適配器按上文串口SERCOM4一節(jié)連接適配器 TX → XIAO pin 7 (RX)適配器 RX → XIAO pin 6 (TX)共地。3. 打開串口終端在 Linux 下XIAO 的串口通常枚舉為/dev/ttyUSB0。使用 minicom 監(jiān)聽$ minicom -D /dev/ttyUSB0 -o-o選項告訴 minicom 不要發(fā)送調(diào)制解調(diào)器初始化字符串。連接參數(shù)必須與 SERCOM4 的配置一致seeeduino_xiao.dts 中current-speed 115200參數(shù)值速度Speed115200數(shù)據(jù)位Data8校驗ParityNone停止位Stop bits14. 進入引導模式并燒錄快速短接 RST 與 GND 焊盤兩次進入 UF2 引導模式然后執(zhí)行$ west flash -b seeeduino_xiao若此前固件啟用了CONFIG_USB_CDC_ACM則此命令會自動觸發(fā)引導程序進入無需手動短接。5. 驗證輸出燒錄完成后串口終端應打印Hello World! seeeduino_xiao這同時驗證了編譯鏈路、UF2/BOSSA 燒錄鏈路、SERCOM4 串口驅(qū)動與控制臺輸出均工作正常。參考與進一步探索板級支持文檔boards/seeed/seeeduino_xiao/doc/index.rst板卡設(shè)備樹seeeduino_xiao.dts引腳復用配置seeeduino_xiao-pinctrl.dtsiXIAO 連接器映射seeed_xiao_connector.dtsi默認 Kconfig 配置seeeduino_xiao_defconfig燒錄 runner 聲明board.cmake官方示例hello_world 位于 samples/hello_worldUSB CDC ACM 虛擬串口示例位于 samples/subsys/usb/cdc-acm若需了解 XIAO 的詳細引腳功能定義、完整引腳圖與原理圖可參閱 Seeed 官方 Seeeduino XIAO Wiki外部資料板級文檔 References 一節(jié)已給出鏈接。在 Zephyr 側(cè)以上倉庫文件已足以支撐你完成從編譯到燒錄、再到各 SERCOM 接口開發(fā)的完整閉環(huán)?!久赓M下載鏈接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.項目地址: https://gitcode.com/GitHub_Trending/ze/zephyr創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考