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