新闻详情

新闻详情

首页 / 资讯中心 / 详情

RIOT OS 测试应用深度解析:Atmel IO1 Xplained 扩展板的驱动测试程序

发布时间:2026/9/19 13:51:34来源:尧图网络
RIOT OS 测试应用深度解析:Atmel IO1 Xplained 扩展板的驱动测试程序
物联网嵌入式操作系统实时系统【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址https://gitcode.com/GitHub_Trending/riot/RIOT点击查看免费下载IO1 Xplained 是 Atmel Xplained Pro 评估平台的一款扩展板板载温度传感器、光照传感器、microSD 卡槽、LED 与 GPIO 引脚是验证 RIOT OS 传感器/外设驱动栈的理想载体。本文以 tests/drivers/io1_xplained 目录下的测试应用为主体结合 drivers/io1_xplained 驱动源码完整讲解该测试程序的构建方式、初始化流程、各外设测试逻辑以及底层实现原理帮助读者掌握在 RIOT OS 中为多外设扩展板编写集成测试的完整方法。IO1 Xplained 扩展板与测试应用概览Atmel IO1 Xplained 是 Atmel Xplained Pro 评估平台的扩展板通过标准的 Xplained Pro 扩展接口与主机板相连。从 drivers/include/io1_xplained.h 的驱动接口注释可以看到这块扩展板集成了以下资源AT30TSE75x 温度传感器通过 I2C 接口访问复用 drivers/at30tse75x 驱动TEMT6000 光照传感器通过 ADC 采样驱动内直接使用periph/adc实现microSD 卡连接器通过 SPI 接口访问复用 drivers/sdcard_spi 驱动一颗黄色 LED2 个可扩展 GPIO 引脚。官方驱动注释指出该扩展板可搭配 samr21-xpro、samd21-xpro、saml21-xpro 等 Atmel Xplained Pro 系列评估板使用而这些板卡在 RIOT OS 中均有对应的 boards 定义。tests/drivers/io1_xplained下的测试应用main.c正是为了验证这一整套板载外设在 RIOT OS 下的可用性它依次检查温度读取、SD 卡 CID 信息读取、光照强度采样以及 LED 的置位/清零/翻转操作并通过串口持续打印测试结果。构建配置最小依赖的 Makefile测试应用的构建文件非常精简tests/drivers/io1_xplained/Makefile 全文如下include ../Makefile.drivers_common USEMODULE io1_xplained USEMODULE ztimer_msec include $(RIOTBASE)/Makefile.include../Makefile.drivers_common是 tests 下驱动类测试的公共构建片段负责引入测试所需的通用模块与打印设施USEMODULE io1_xplained引入扩展板驱动USEMODULE ztimer_msec引入毫秒级 ztimer 定时器测试主循环中的ztimer_sleep(ZTIMER_MSEC, DELAY_1S)即依赖该模块。值得注意的是io1_xplained驱动的依赖并非手动罗列而是由 drivers/io1_xplained/Makefile.dep 自动解析FEATURES_REQUIRED periph_gpio FEATURES_REQUIRED periph_adc USEMODULE at30tse75x USEMODULE sdcard_spi即启用io1_xplained模块后构建系统会自动要求目标板卡具备 GPIO 与 ADC 外设特性FEATURES_REQUIRED并自动拉入at30tse75x与sdcard_spi两个底层驱动模块。这正是 RIOT OS 模块化依赖管理Makefile.dep 体系的典型体现上层模块只需声明自身需求下层依赖由构建系统递归补齐。此外tests/drivers/io1_xplained/Makefile.ci 将atmega8、nucleo-l011k4、samd10-xmini列为BOARD_INSUFFICIENT_MEMORY即这些板卡因 Flash/RAM 容量不足无法在 CI 中运行本测试。初始化流程逐外设检查的 io1_xplained_init测试程序首先调用驱动核心 API 完成扩展板初始化static io1_xplained_t dev; if (io1_xplained_init(dev, io1_xplained_params[0]) ! IO1_XPLAINED_OK) { puts([Error] Cannot initialize the IO1 Xplained extension\n); return 1; }其中io1_xplained_params[]来自 drivers/io1_xplained/include/io1_xplained_params.h默认参数为#ifndef IO1_XPLAINED_PARAM_ADDR #define IO1_XPLAINED_PARAM_ADDR (0x07) #endif #ifndef IO1_XPLAINED_PARAMS #define IO1_XPLAINED_PARAMS { .addr IO1_XPLAINED_PARAM_ADDR } #endif唯一的配置项addr是温度传感器 AT30TSE75x 的地址偏移。驱动内部见 drivers/io1_xplained/io1_xplained.c将其与基础地址组合#define IO1_TEMPERATURE_BASE_ADDR (0x48) #define IO1_TEMPERATURE_DEFAULT_ADDR (0x07)即实际 I2C 地址为0x48 | 0x07 0x4F。初始化成功后驱动还会调用at30tse75x_set_resolution(dev-temp, AT30TSE75X_RESOLUTION_12BIT)将温度传感器设置为最高 12 位分辨率。io1_xplained_init的完整流程在 drivers/io1_xplained/io1_xplained.c 中实现依次为保存参数到设备描述符通过 I2C 初始化 AT30TSE75x 温度传感器失败返回-IO1_XPLAINED_NOTEMP初始化 SD 卡检测引脚GPIO_IN检测引脚为反逻辑低电平表示卡已插入插入时构造sdcard_spi_params_t并调用sdcard_spi_init失败返回-IO1_XPLAINED_NOSDCARD初始化光照传感器所用 ADC 通道失败返回-IO1_XPLAINED_NOLIGHT依次初始化 LED、GPIO1、GPIO2 为输出分别对应-IO1_XPLAINED_NOLED、-IO1_XPLAINED_NOGPIO1、-IO1_XPLAINED_NOGPIO2。全部成功后返回IO1_XPLAINED_OK。这些返回值在 drivers/include/io1_xplained.h 中以枚举定义测试程序只需比较返回值即可精确定位失败外设这种逐外设上报错误码的设计让板卡调试非常直观。测试主循环温度、SD 卡、光照与 LED 轮询验证main()在完成初始化后进入一个无限循环tests/drivers/io1_xplained/main.c每个外设测试之间通过ztimer_sleep(ZTIMER_MSEC, DELAY_1S)DELAY_1S 1U * MS_PER_SEC间隔 1 秒便于肉眼观察 LED 状态与串口输出。温度读取at30tse75x_get_temperature(dev.temp, temperature); printf(Temperature [°C]: %i.%03u\n, (int)temperature, (unsigned)((temperature - (int)temperature) * 1000));温度直接取自驱动描述符中的dev.tempat30tse75x_t类型见 drivers/include/io1_xplained.h将浮点温度拆分为整数部分与千分位小数打印输出形如Temperature [°C]: 24.500。SD 卡 CID 信息读取if (!gpio_read(IO1_SDCARD_SPI_PARAM_DETECT)) { _sd_card_cid(); ... }由于卡检测引脚反逻辑插入时读到低电平因此取反后为真才执行。_sd_card_cid()直接读取dev.sdcard.cid结构体字段并逐项打印 MID厂商 ID、OIDOEM/应用 ID、PNM产品名最多 5 字符、PRV产品版本、PSN序列号PRIu32格式化、MDT制造日期与 CID_CRC。这些字段来自 drivers/sdcard_spi 驱动解析出的 CID 寄存器内容。若未插入 SD 卡则该分支被跳过。光照强度读取uint16_t light; io1_xplained_read_light_level(light); printf(Light level: %i\n, light);io1_xplained_read_light_level在 drivers/io1_xplained/io1_xplained.c 中实现以 10 位分辨率对IO1_LIGHT_ADC_LINEADC_LINE(0)采样随后取反得到光照值*light (1023 - sample)——数值越大表示环境越亮输出范围 01023。若 ADC 采样失败则返回-IO1_XPLAINED_READ_ERR。LED 状态机验证gpio_set(IO1_LED_PIN); /* 点亮 */ ztimer_sleep(...); gpio_clear(IO1_LED_PIN); /* 熄灭 */ ztimer_sleep(...); gpio_toggle(IO1_LED_PIN); /* 翻转 */ ztimer_sleep(...); gpio_toggle(IO1_LED_PIN); /* 再次翻转 */通过periph/gpio的gpio_set/gpio_clear/gpio_toggle三种操作完整验证 LED 输出引脚行为每个状态保持 1 秒串口侧可直接目视确认硬件工作正常。引脚映射与硬件布局细节测试与驱动使用的全部引脚宏定义集中在 drivers/io1_xplained/include/io1_xplained_internals.h它们与 Xplained Pro 扩展接口的固定布局一一对应资源宏定义引脚/通道温度传感器 I2C 基址IO1_TEMPERATURE_BASE_ADDR0x48温度传感器地址偏移IO1_TEMPERATURE_DEFAULT_ADDR0x07SD 卡 SPI 设备IO1_SDCARD_SPI_PARAM_SPISPI_DEV(1)SD 卡片选IO1_SDCARD_SPI_PARAM_CSGPIO_PIN(1, 3)SD 卡时钟IO1_SDCARD_SPI_PARAM_CLKGPIO_PIN(1, 23)SD 卡 MOSIIO1_SDCARD_SPI_PARAM_MOSIGPIO_PIN(1, 22)SD 卡 MISOIO1_SDCARD_SPI_PARAM_MISOGPIO_PIN(1, 2)SD 卡电源IO1_SDCARD_SPI_PARAM_POWERGPIO_UNDEF未接线SD 卡检测IO1_SDCARD_SPI_PARAM_DETECTGPIO_PIN(0, 23)低有效光照 ADC 通道IO1_LIGHT_ADC_LINEADC_LINE(0)光照 ADC 分辨率IO1_LIGHT_ADC_RESADC_RES_10BITLEDIO1_LED_PINGPIO_PIN(0, 18)GPIO1IO1_GPIO1_PINGPIO_PIN(0, 13)GPIO2IO1_GPIO2_PINGPIO_PIN(0, 28)这些宏在初始化阶段被逐个用于gpio_init、adc_init与 SPI 参数构造是理解板级适配与驱动移植的入口。若读者需要将 IO1 Xplained 适配到新的 Xplained Pro 主机板只需核对新板卡的引脚映射并覆盖这些宏或通过 board 目录下的头文件重定义即可。SAUL 集成传感器数据进入统一注册表除测试应用外该驱动还提供 SAULSensor Actuator Uber Layer适配层见 drivers/io1_xplained/io1_xplained_saul.c温度读取回调把浮点温度放大 100 倍并以UNIT_TEMP_C、scale -2的物理量格式上报即phydat_t表示摄氏度精度到百分之一度。SAUL 条目名称在 drivers/io1_xplained/include/io1_xplained_params.h 中注册为#define IO1_XPLAINED_SAUL_INFO {{ .name Temperature (IO1 Xplained) }, \ { .name LED (IO1 Xplained) }, \ { .name GPIO1 (IO1 Xplained) }, \ { .name GPIO2 (IO1 Xplained) }}同时在启用MODULE_SAUL_GPIO时LED、GPIO1、GPIO2 三个引脚会注册为saul_gpio_params_t输出条目其中 LED 带SAUL_GPIO_INVERTED标志表示板载 LED 低电平点亮。这意味着温度数据可以通过saul命令行工具或auto_init机制被上层应用直接消费无需编写额外胶水代码。编译、烧录与运行在 RIOT OS 中运行本测试的标准流程如下# 以 samr21-xpro 为例IO1 Xplained 官方支持的评估板之一 make -C tests/drivers/io1_xplained BOARDsamr21-xpro flash termmake会依据Makefile.dep自动解析io1_xplained→at30tse75x/sdcard_spi→periph_gpio/periph_adc的完整依赖链flash目标烧录固件term打开串口终端观察输出将 IO1 Xplained 扩展板插入 Xplained Pro 扩展接口后复位板卡即可看到初始化成功提示与周期性的外设测试输出。典型的串口输出序列如下IO1 Xplained extension test application -------------Initializing------------ Initialization successful --------Starting tests -------- Temperature [°C]: 24.500 ------------------------------------- Light level: 512 -------------------------------------若初始化失败程序会在串口打印[Error] Cannot initialize the IO1 Xplained extension并以退出码 1 结束此时可结合上文所述错误码枚举定位具体失败外设温度传感器、SD 卡、ADC、LED 或 GPIO。小结本文以 tests/drivers/io1_xplained/README.md 所描述的测试应用为线索串联起 RIOT OS 中多外设扩展板驱动测试的完整链路从 Makefile 的最小依赖声明、Makefile.dep 的自动依赖解析到 io1_xplained.c 的逐外设初始化、main.c 的轮询测试逻辑再到 io1_xplained_saul.c 的 SAUL 数据上报。这套驱动 参数头文件 SAUL 适配 集成测试的完整结构也是 RIOT OS 所有传感器/执行器驱动共用的开发范式可作为编写新扩展板驱动与测试的参考模板。赞分享物联网嵌入式操作系统实时系统【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址https://gitcode.com/GitHub_Trending/riot/RIOT点击查看免费下载相关推荐RIOT OS 板级支持解析Atmel SAM L21 Xplained Prosaml21-xpro开发板使用指南RIOT OS 板级支持解析Atmel SAM L21 Xplained Prosaml21 xpro开发板使用指南 导读 本文围绕 RIOT OS 仓库物联网嵌入式操作系统实时系统RIOT OS 板卡支持Atmel SAM D10 Xplained Minisamd10-xmini开发板使用指南RIOT OS 板卡支持Atmel SAM D10 Xplained Minisamd10 xmini开发板使用指南 本文以 RIOT OS 仓库中 bo物联网嵌入式操作系统实时系统RIOT OS 中的 Atmel SAM R21 Xplained Pro 板卡支持指南硬件资源、外设配置与烧录调试实战RIOT OS 中的 Atmel SAM R21 Xplained Pro 板卡支持指南硬件资源、外设配置与烧录调试实战 本篇技术指南围绕 RIOT OS 对物联网嵌入式操作系统实时系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

010 Editor 安装注册与模板使用完整教程:从二进制分析到脚本实战 2026/9/19 14:36:41

010 Editor 安装注册与模板使用完整教程:从二进制分析到脚本实战

1. 为什么一个十六进制编辑器值得单独写一篇安装注册教程如果你平时的工作跟二进制文件、磁盘镜像、游戏存档、嵌入式固件或者逆向分析沾边,那 010 Editor 这个名字大概率不会陌生。它跟市面上那些轻量级十六进制工具最大的区别在于:它有一套叫 Binary T…

阅读更多 →
BrewUI使用指南:为Homebrew打造可视化包管理界面 2026/9/19 14:36:41

BrewUI使用指南:为Homebrew打造可视化包管理界面

1. 为什么突然想给Homebrew配个界面:BrewUI到底做了什么如果你一直用Mac做开发,大概率对Homebrew不陌生。brew install、brew update、brew upgrade这一串命令,我们几乎天天在终端里敲,已经熟到条件反射。但用久了总会遇到几个让人…

阅读更多 →
Intel Mac上Homebrew安装失败?用BrewUI图形界面轻松管理 2026/9/19 14:36:41

Intel Mac上Homebrew安装失败?用BrewUI图形界面轻松管理

1. 一台Intel Mac把Homebrew装崩之后,我开始找图形界面1.1 那几行让人血压升高的报错我手头有一台2019年的Intel款MacBook Pro,平时跑一些老的自动化脚本,环境一直靠Homebrew维护。前段时间系统升级了一回,终端里敲brew&#xff0…

阅读更多 →
BrewUI体验:给Homebrew套上图形界面,告别命令行包管理焦虑 2026/9/19 14:36:41

BrewUI体验:给Homebrew套上图形界面,告别命令行包管理焦虑

最近我一直在折腾 macOS 下的开发环境,越折腾越发现一个很有意思的现象:很多人天天用 Homebrew 装包,却从来没意识到自己其实是在"裸奔"。什么裸奔?就是全靠命令行去管理那几百个软件包。brew list 一刷一大屏&#xff…

阅读更多 →
GMSK调制解调MATLAB实现:从原理到误码率分析 2026/9/19 14:36:41

GMSK调制解调MATLAB实现:从原理到误码率分析

简介:这是一份基于MATLAB的GMSK调制解调实验课程设计文档,面向通信工程专业本科生及需要完成同类课题的开发者,系统讲解了高斯滤波最小频移键控的调制解调原理、Simulink模型搭建与瑞利信道下的仿真验证。文档共1个docx文件,压缩包…

阅读更多 →
SAP SD定价过程详解:从条件类型到存取顺序的配置与排错 2026/9/19 14:33:41

SAP SD定价过程详解:从条件类型到存取顺序的配置与排错

简介:这是一份深入讲解SAP SD模块定价逻辑的Word文档,适合SAP SD顾问、实施人员及需要理解销售订单价格计算原理的ERP从业者。文档从R/3系统如何根据物料金额计算净价值与总金额切入,完整梳理了定价过程的确定框架、客户定价过程与单据定价过…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞