ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

RIOT 中的 SODAQ SARA AFF 开发板:构建烧录、STDIO 与外设配置实战指南

RIOT 中的 SODAQ SARA AFF 开发板:构建烧录、STDIO 与外设配置实战指南 RIOT 中的 SODAQ SARA AFF 开发板构建烧录、STDIO 与外设配置实战指南【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOTSODAQ SARA AFF 是一块面向 NB-IoT / LTE-M 蜂窝物联网与 GPS 定位场景的 Arduino 兼容开发板。本文以 RIOT 仓库中 boards/sodaq-sara-aff/doc.md 为骨架结合该板卡目录下的构建脚本、外设配置与板级初始化源码系统讲解如何在 RIOT 中完成 SARA AFF 的应用构建、USB 烧录、串口调试并深入剖析其 UART/ADC/I2C/USB、板载 NB-IoT 与 GPS 电源管理、Arduino 引脚映射等底层实现帮助读者直接上手并用好这块板卡。板卡概览SODAQ SARA AFF 在 RIOT 中的定位SODAQ SARA AFFSARA AFF是 SODAQ 面向蜂窝物联网应用推出的开发板核心特性集中在板载的 NB-IoT 蜂窝模块SODAQ SARA R410M 系列与 GPS 接收器上特别适合远程遥测、资产追踪、环境监测等低功耗联网场景。RIOT 将其作为官方支持板卡收录于 boards/ 目录下文档定义于 boards/sodaq-sara-aff/doc.md板级实现代码则分布在 boards/sodaq-sara-aff/ 的board.c、Makefile*与include/头文件中。硬件平台与核心特性从 boards/sodaq-sara-aff/Makefile.features 可以看到该板卡采用的 MCU 型号为CPU_MODEL samd21j18a并继承了boards/common/sodaq/Makefile.features中定义的公共特性集合。汇总下来SARA AFF 在 RIOT 中提供的外设能力包括特性说明periph_adc模拟量采集板载 11 路 ADC 通道periph_i2cI2C 总线默认挂载于 SERCOM1periph_rtc/periph_rtt实时时钟与低功耗定时器periph_spiSPI 总线注意与板载 LED 引脚复用periph_timer硬件定时器periph_uart两路 UARTUSB 串口与 Serial1periph_usbdevUSB 设备用于烧录与 STDIOarduino_pinsArduino 兼容引脚映射highlevel_stdio高层级标准 I/O 支持板级外设亮点包括RGB 三色 LED红/绿/蓝、NB-IoT 模块SARA R410M的使能/复位/发射使能/模式切换控制引脚以及 GPS 模块的使能与时间脉冲TimePulse引脚这些引脚定义均可在 boards/sodaq-sara-aff/include/board.h 中查到。构建与烧录用make BOARDsodaq-sara-aff一键完成SODAQ SARA AFF 与其他 RIOT 板卡一样使用统一的make构建流程。板卡文档给出的最小烧录示例如下make BOARDsodaq-sara-aff -C examples/basic/hello-world flash该命令以hello-world示例应用为例指定BOARDsodaq-sara-aff完成编译并烧录到板卡。-C examples/basic/hello-world表示进入该示例目录执行构建。USB 烧录背后的机制bossac 引导加载程序SARA AFF 的烧录并不需要 JTAG/SWD 调试器而是通过板载的 USB 引导加载程序完成。boards/sodaq-sara-aff/Makefile.include 揭示了这一机制# Add board common includes INCLUDES -I$(RIOTBOARD)/common/sodaq/include # Include all definitions for flashing with bossa over USB include $(RIOTBOARD)/common/samdx1-arduino-bootloader/Makefile.include该板卡复用了boards/common/samdx1-arduino-bootloader/提供的烧录基础设施即通过 Atmel 的 bossac 工具经 USB 写入固件与 Arduino Zero 系列的引导方式一致。因此正常状态下插入 USB 即可直接执行make flash完成烧录若应用崩溃或引导失败USB 自动重烧可能失效此时需要双击复位按钮让板卡进入引导加载程序模式再重新执行烧录命令文档note中特别强调了这一点。烧录相关的构建细节boards/sodaq-sara-aff/Makefile 还体现了模块化的依赖处理当应用启用了 Arduino 引导加载程序模块boards_common_samdx1-arduino-bootloader时会将对应目录加入构建路径ifneq (,$(filter boards_common_samdx1-arduino-bootloader,$(USEMODULE))) # Add the samdx1-arduino-bootloader directory to the build DIRS $(RIOTBOARD)/common/samdx1-arduino-bootloader endif通过 USB 访问 STDIOUART 调试与TERM_DELAYSODAQ SARA AFF 的 STDIO标准输入输出直接通过 USB 端口提供给开发者无需额外串口转 USB 芯片接线。当应用启动后RIOT 的printf、puts等标准输出会经 USB CDC通过cfg_usbdev_default.h中定义的 USB 设备配置转发到主机串口终端。TERM_DELAY串口终端打开前的延时控制由于 USB 枚举需要时间RIOT 提供TERM_DELAY环境变量用于在打开串口终端前插入一段延时单位为秒确保终端工具能够稳定附着到 USB 串口设备上TERM_DELAY3 make BOARDsodaq-sara-aff -C examples/basic/hello-world term文档明确指出该变量的默认值为 2 秒在大多数情况下足够完成设备枚举。若在部分主机上遇到终端打开失败、输出丢失等问题可适当调大该值例如TERM_DELAY5重试。板载 USB 外设配置SODAQ 公共板级目录 boards/common/sodaq/include/cfg_usbdev_default.h 定义了 USB 数据引脚static const sam0_common_usb_config_t sam_usbdev_config[] { { .dm GPIO_PIN(PA, 24), .dp GPIO_PIN(PA, 25), .d_mux GPIO_MUX_G, .device USB-DEVICE, .gclk_src SAM0_GCLK_MAIN, } };即 USB D-/D 分别位于 PA24/PA25由periph_usbdev驱动管理为烧录与 STDIO 提供底层通道。外设配置深度解析UART、ADC、I2C板级外设的具体引脚与参数全部集中在 boards/sodaq-sara-aff/include/periph_conf.h它引用了boards/common/sodaq/include/下的默认时钟、RTC、RTT、SPI、Timer 与 USB 配置并自行定义了 UART、ADC 与 I2C。双 UARTUSB 串口D0/D1与 Serial1SARA AFF 配置了两路 UARTUART_NUMOF为 2通道SERCOMRXTX说明UART(0)SERCOM5PB30D0PB31D1与 USB 虚拟串口关联的主调试口UART(1)SERCOM0PA5PA6对应 Arduino 的 Serial1两路均采用GPIO_MUX_D复用、时钟源为SAM0_GCLK_MAIN且当启用MODULE_PERIPH_UART_HW_FC硬件流控时RTS/CTS 引脚被配置为GPIO_UNDEF即默认不使能硬件流控。对应中断映射为isr_sercom5/isr_sercom0。ADC从 A0 到电池电压检测periph_conf.h中定义了 11 路 ADC 通道ADC_NUMOF 11覆盖模拟输入与板载传感点ADC 索引MUXPOS板载丝印/用途0–3PB00–PB03A0–A34–5PA08–PA09A4–A56–7PA10–PA11GROVE1/A6、GROVE2/A78PB05BAT_VOLT/A8电池电压9PA02D2/DAC数模转换10PA03AREF参考电压ADC 默认参数为分频ADC_PRESCALER_DIV512、负输入接 GND、增益GAIN_DIV2、参考电压INTVCC1。这意味着采样前无需额外配置即可直接通过 RIOT 的adc驱动读取模拟量。I2C单总线挂载于 SERCOM1I2C 总线复用 SERCOM1 外设SCL/SDA 位于 PA17/PA16默认速率I2C_SPEED_NORMAL100 kbit/s引脚复用为GPIO_MUX_C。这为外接温湿度、气压等 I2C 传感器提供了标准挂载点。板载电源管理NB-IoT 与 GPS 默认关闭SODAQ SARA AFF 面向蜂窝物联网场景但 NB-IoT 模块与 GPS 接收器都属于高功耗外设。因此 boards/sodaq-sara-aff/board.c 中的board_init()在系统启动时默认将两者断电以降低空闲功耗void board_init(void) { /* set NB-IoT device off by default */ NB_IOT_DISABLE; gpio_init(NB_IOT_ENABLE_PIN, GPIO_OUT); NB_IOT_TX_EN_OFF; gpio_init(NB_IOT_TX_EN_PIN, GPIO_OUT); NB_IOT_TOGGLE_ON; gpio_init(NB_IOT_TOGGLE_PIN, GPIO_OUT); /* set GPS off by default */ GPS_ENABLE_OFF; gpio_init(GPS_ENABLE_PIN, GPIO_OUT); }结合 boards/sodaq-sara-aff/include/board.h 的引脚定义板载外设控制引脚归纳如下功能引脚宏定义NB-IoT 使能PA27NB_IOT_ENABLE_PIN/NB_IOT_ENABLE/NB_IOT_DISABLENB-IoT 复位PB14NB_IOT_RESET_PIN/NB_IOT_RESET_ON/NB_IOT_RESET_OFFNB-IoT 发射使能PB13NB_IOT_TX_EN_PIN/NB_IOT_TX_EN_ON/NB_IOT_TX_EN_OFFNB-IoT 模式切换PB17NB_IOT_TOGGLE_PIN/NB_IOT_TOGGLE_ON/NB_IOT_TOGGLE_OFFGPS 使能PA28GPS_ENABLE_PIN/GPS_ENABLE_ON/GPS_ENABLE_OFFGPS 时间脉冲PA7输入GPS_TIMEPULSE_PIN/GPS_TIMEPULSE_MODE应用层需要启用蜂窝通信或 GPS 时可直接调用gpio_set(NB_IOT_ENABLE_PIN)、gpio_set(GPS_ENABLE_PIN)等接口按需上电。板载 RGB LED 与 SPI 的引脚复用板卡提供 4 颗可控 LED含一颗 RGB 三色灯其引脚定义同样位于board.hLED引脚极性LED0内置PA21高电平点亮LED1红PA12低电平点亮LED2绿PB15低电平点亮LED3蓝PA13低电平点亮注意一个关键约束boards/sodaq-sara-aff/Makefile.dep 指出 LED0 引脚PA21同时被 SPI 时钟SCK复用ifneq (,$(filter periph_spi,$(USEMODULE))) # The LED pin is also used for SPI DISABLE_MODULE periph_init_led0 endif因此在启用periph_spi的应用中系统会自动禁用periph_init_led0模块避免 LED 初始化干扰 SPI 通信——这也是 boards/sodaq-sara-aff/include/arduino_iomap.h 中 D48SCK与 LED_BUILTIN 共用 PA21 的由来。Arduino 兼容D0–D54 完整引脚映射SODAQ SARA AFF 提供arduino_pins特性使 RIOT 的 Arduino API如arduino_api包可以直接运行。完整的引脚映射定义于 boards/sodaq-sara-aff/include/arduino_iomap.h共 54 个数字引脚ARDUINO_PIN_LAST 54分组如下D0–D1SERCOM/UARTSerialPB31/PB30D2–D15数字 I/OD16–D18RGB LEDPA12/PB15/PA13D19–D25板载外设输入含 PA7 GPS TimePulse 等D26–D30板载外设输出PA28 GPS 使能、PA27 NB-IoT 使能、PB14 复位、PB13 TX_EN、PB12D31–D36模拟输入 A0–A5D37–D40其他模拟输入含 BAT_VOLTD41–D42Serial1PA6/PA5D43–D44I2CSDA PA16 / SCL PA17D45–D48SPIICSPMISO PA22、SS PA23、MOSI PA20、SCK PA21D49–D50USB D-/DD51–D52DACPA2与 SARA_R4XX_TOGGLEPB17D53–D54第二路 I2CPA8/PA9。同时提供了模拟引脚别名ARDUINO_PIN_A0~ARDUINO_PIN_A5以及 ADC 线路映射ARDUINO_A0~ARDUINO_A8与periph_conf.h中的 ADC 通道一一对应。ARDUINO_LED被定义为 17即 RGB 灯的绿色通道作为 Arduino 内建 LED。SAUL GPIO 支持LED 直接暴露给 RIOT 设备模型SODAQ SARA AFF 还将板载 LED 注册到了 RIOT 的 SAULSensor Actuator Ubiquitous Language设备模型中定义于 boards/sodaq-sara-aff/include/gpio_params.hSAUL 名称引脚标志LED BuiltinLED0_PINPA21无LED RedLED1_PINPA12SAUL_GPIO_INVERTED \| SAUL_GPIO_INIT_CLEARLED GreenLED2_PINPB15SAUL_GPIO_INVERTED \| SAUL_GPIO_INIT_CLEARLED BlueLED3_PINPA13SAUL_GPIO_INVERTED \| SAUL_GPIO_INIT_CLEAR红/绿/蓝三色 LED 均标记为反相输出低电平点亮并在初始化时清零与board.h中的极性定义一致。启用saul_gpio模块后即可通过 SAUL registry 以统一的设备接口开关这些 LED方便上层应用与命令行工具交互。Kconfig 集成与构建系统支持在启用 Kconfig 配置系统的构建中boards/sodaq-sara-aff/Kconfig 将板卡接入配置树config BOARD_SODAQ_SARA_AFF bool default y select BOARD_COMMON_SODAQ select CPU_MODEL_SAMD21J18ABOARD_SODAQ_SARA_AFF会自动选中公共板级配置BOARD_COMMON_SODAQ与 CPU 型号CPU_MODEL_SAMD21J18A并引入boards/common/sodaq/Kconfig中定义的公共选项。这意味着无论使用传统Makefile还是 Kconfig 配置流程BOARDsodaq-sara-aff都能得到一致的板级支持。快速上手三步走综合以上内容从拿到一块 SODAQ SARA AFF 到跑通第一个 RIOT 应用只需三步构建并烧录连接 USB执行make BOARDsodaq-sara-aff -C examples/basic/hello-world flash打开串口终端执行make BOARDsodaq-sara-aff -C examples/basic/hello-world term观察 STDIO 输出若终端附着失败用TERM_DELAY默认 2 秒增大延时异常恢复若应用崩溃导致 USB 无法自动重烧双击板载复位按钮进入引导加载程序模式后重试烧录。在此基础上开发者可参考 boards/sodaq-sara-aff/include/periph_conf.h 使用 UART/ADC/I2C 外设参考 boards/sodaq-sara-aff/include/arduino_iomap.h 编写 Arduino 兼容代码并通过 boards/sodaq-sara-aff/board.c 中暴露的 GPIO 宏按需控制 NB-IoT 与 GPS 的电源进而构建完整的蜂窝物联网应用。【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表