尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

RIOT OS 单 UART 设备的帧格式(Mode)自动化测试指南:基于 tests/periph/uart_mode 的完整解读

RIOT OS 单 UART 设备的帧格式(Mode)自动化测试指南:基于 tests/periph/uart_mode 的完整解读 物联网嵌入式操作系统实时系统【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址https://gitcode.com/GitHub_Trending/riot/RIOT点击查看免费下载本指南以 RIOT OS 仓库中的 tests/periph/uart_mode 测试应用为核心讲解如何在只有单个 UART 外设的开发板上自动遍历数据位、奇偶校验位与停止位的全部组合并用逻辑分析仪探头验证每种帧格式是否真实生效。读完本文你将掌握该测试的编译、烧录、观测方法理解其背后的uart_mode()驱动 API 与底层寄存器配置原理并能够据此判断一块开发板对 UART 帧格式的实际支持能力。测试背景为什么需要一个新的 UART 模式测试RIOT OS 原有的periph_uart测试依赖开发板上存在多个UART一个用于 shell 交互另一个专门用于测试收发。但对许多只有单个 UART 的 MCU例如部分 SAM R 系列、低引脚数 Cortex-M 芯片而言这种双 UART前提并不成立。为此tests/periph/uart_mode 应运而生其设计目标非常明确不需要 shell 接线无需用户交互程序上电后自动遍历所有模式组合通过把 stdoutstdio复用在同一根 UART 线上将当前模式字符串打印出来由**外部探头逻辑分析仪/示波器**抓取波形验证帧格式是否与打印一致。也就是说这是一款面向单 UART 设备的自报家门 外部校验型测试应用最终结论需要仪器确认而不是程序自说自话。测试原理40 种模式组合与三字符模式串模式空间4 × 5 × 2 40 种组合测试遍历以下三个维度的全部排列组合共计40 种模式维度取值数量数据位data bits5 / 6 / 7 / 84奇偶校验parityN无/ E偶/ O奇/ M标志/ S空号5停止位stop bits1 / 22在 main.c 中这三个维度通过宏定义#define DATA_BIT_OPTIONS (4) #define PARITY_OPTIONS (5) #define STOP_BIT_OPTIONS (2) #define TOTAL_OPTIONS (DATA_BIT_OPTIONS * PARITY_OPTIONS * STOP_BIT_OPTIONS)枚举数组分别来自 drivers/include/periph/uart.h 中定义的uart_data_bits_tUART_DATA_BITS_5~UART_DATA_BITS_8、uart_parity_tUART_PARITY_NONE/EVEN/ODD/MARK/SPACE与uart_stop_bits_tUART_STOP_BITS_1/2见 main.c。模式字符串格式数据位奇偶停止位对于每种模式程序会生成一个长度为 3 的字符串并打印到 STDOUT格式为data-bitsparity-bitsstop-bits例如7 个数据位、偶校验、2 个停止位打印为7E2。字符映射规则见 main.c 的_get_mode()数据位5、6、7、8奇偶校验N无、E偶、O奇、M标志、S空号停止位1、2只有uart_mode()返回成功UART_OK的模式才会被打印不支持的组合会被静默跳过因此探头抓到的每条模式串都代表该设备宣称支持该帧格式。测试主流程main.c 中main()的执行逻辑为三重循环遍历 40 种组合数据位 → 奇偶 → 停止位每次迭代先调用stdio_init()重新初始化 stdio保证 printf 生效调用uart_mode(_UART_DEV, data_bits, parity, stop_bits)尝试切换帧格式若返回UART_OK打印模式串然后延时DELAY_US默认 50 ms以便观测记录每种模式的成败到results[]数组全部遍历结束后stdio_init()并调用uart_mode(_UART_DEV, UART_DATA_BITS_8, UART_PARITY_NONE, UART_STOP_BITS_1)恢复默认的 8N1 模式逐条打印所有模式串及其Supported/Unsupported状态。由于测试针对单 UART 设备UART 设备号被固定为 0#define _UART_DEV (UART_DEV(0))见 main.c。模式间延迟timer 与忙等两种实现为了便于人工/仪器解析每条模式串相邻模式之间默认插入 50 ms 延时DELAY_US可通过CFLAGS-DDELAY_USus覆盖。_delay()见 main.c的实现分两种路径若启用了MODULE_XTIMER使用xtimer_usleep(DELAY_US)精确睡眠否则退化为纯 CPU 忙等循环uint32_t loops coreclk() / 20;粗略估计每次循环约 20 个 CPU 周期专门服务于尚未编写定时器驱动的全新移植板卡。局部变量声明为volatile以阻止编译器将空循环优化掉。编译与运行从 Makefile 到烧录构建配置解析tests/periph/uart_mode/Makefile 的关键配置BOARD ? samr34-xpro include ../Makefile.periph_common FEATURES_REQUIRED periph_uart FEATURES_REQUIRED periph_uart_modecfg FEATURES_OPTIONAL periph_timer # Set this to prevent welcome message from printing and confusing output CFLAGS-DLOG_LEVELLOG_NONE include $(RIOTBASE)/Makefile.includeBOARD ? samr34-xpro默认目标板为 Microchip SAM R34xpro这是一款典型的单 UART 配置平台且由 cpu/sam0_common/Makefile.features 提供periph_uart_modecfg特性FEATURES_REQUIRED periph_uart与periph_uart_modecfg两项为强制特性板卡若未提供periph_uart_modecfg即不支持运行时重配帧格式则无法编译本测试periph_uart_modecfg已列入 makefiles/features_existing.inc.mk 的既有特性清单FEATURES_OPTIONAL periph_timer可选特性配合 Makefile.board.dep 在板卡提供periph_timer时自动拉入xtimer模块从而让_delay()走定时器路径CFLAGS-DLOG_LEVELLOG_NONE关闭日志输出避免欢迎信息等额外打印混入测试输出、干扰模式串解析公共构建逻辑由tests/Makefile.periph_common同目录其他 periph 测试共用引入。编译与烧录命令在 tests/periph/uart_mode 目录下# 使用默认板卡 samr34-xpro 编译 make # 指定其他板卡须具备 periph_uart 与 periph_uart_modecfg make BOARDyour-board # 编译并烧录 make flash # 编译并烧录且直接打开串口终端 make flash term若目标板 RAM 过小可能无法运行CI 清单 Makefile.ci 将nucleo-f031k6标记为BOARD_INSUFFICIENT_MEMORY说明该板内存不足以承载本测试40 个模式字符串 40 个 bool 结果外加 printf 所需的缓冲。修改波特率测试默认波特率为115200。若需其他波特率在编译时通过 CFLAGS 覆盖 stdio 的波特率宏make CFLAGS-DSTDIO_UART_BAUDRATE9600通用写法即CFLAGS-DSTDIO_UART_BAUDRATEBAUD请确保终端与探头逻辑分析仪的波特率设置与该值一致否则观测到的波形与打印内容将无法对应。底层支撑uart_mode() API 与驱动实现驱动接口定义uart_mode()在 drivers/include/periph/uart.h 中声明int uart_mode(uart_t uart, uart_data_bits_t data_bits, uart_parity_t parity, uart_stop_bits_t stop_bits);参数uart设备号、data_bits帧内数据位长度、parity校验模式、stop_bits停止位个数返回值0表示成功-ENOTSUP表示给定配置不被支持0为其他错误。同时 uart.h 定义了测试中使用的返回码语义UART_OK成功、UART_NODEV非法设备、UART_NOBAUD波特率不支持、UART_NOMODE模式不支持、UART_INTERR其他内部错误。注意UART_NOMODE与UART_NOBAUD均映射为-ENOTSUP测试代码里只需判断是否等于UART_OK。SAM0 平台的寄存器级实现以默认板卡所在的 SAM0 平台为例cpu/sam0_common/periph/uart.c 中的uart_mode()揭示了运行时切帧格式的底层细节参数合法性检查设备号越界返回UART_NODEV停止位不是 1/2、奇偶校验不是 NONE/EVEN/ODD 时直接返回UART_NOMODE。这意味着该平台硬件SERCOM USART不支持 MARK/SPACE 校验——测试中打印结果里M/S开头的模式串必然标记为Unsupported这与uart_parity_t枚举中定义了 5 种校验、但硬件未必全部支持的情况相符解除写保护SERCOM 的CTRLB寄存器在使能状态下受写保护因此实现先清除CTRLA.ENABLE位并等待同步_syncbusy重新编排控制寄存器无校验时清掉CTRLA.FORM字段有校验时设置FORM(1)并通过CTRLB.PMODE区分奇/偶校验恢复使能重新置位ENABLE并等待同步清空 RX 缓冲_drain_rxbuf防止残留字节干扰后续接收重挂 RX 中断若此前注册过接收回调则重新使能RXC中断。可见uart_mode()的支持/不支持结论本质上取决于两点驱动代码的预检以及硬件控制寄存器对某种帧格式的组合能力。这也解释了为什么测试要求最终必须用探头验证——UART_OK只代表驱动认为配置可写不代表示波器上的电平时序一定符合预期。结果解读与硬件验证运行观察将逻辑分析仪或示波器的通道接在测试板的 UART TX 引脚上按测试的波特率默认 115200解码上电后应看到一串模式串依次出现例如8N1 8E1 8O1 7N1 ...随后是总结列表8N1: Supported 8E1: Supported 8O1: Supported ... 5S2: Unsupported其中被打印过的模式串应与总结列表中的Supported条目一一对应。人工核对帧格式对每一条模式串结合示波器/逻辑分析仪捕获的实际波形核对数据位个数起始位后到可能的校验位/停止位之前的数据位数量是否为模式串第一位的数字校验位电平若为E数据位加校验位中1的总数应为偶数O则为奇数N表示校验位位置不存在波形上该位置直接是停止位M/S分别表示校验位恒为高/恒为低停止位个数帧尾高电平持续 1 或 2 个位宽对应模式串第三位。测试末尾自动恢复默认的8N1模式见 main.c因此测试结束后串口依然可以正常交互不会把开发板留在某个奇怪的非默认帧格式上。适用范围与使用建议适用对象只有单个 UART、无法同时兼顾 shell 与测试 UART 的开发板亦可用于任何想快速验证periph_uart_modecfg帧格式支持矩阵的板卡前置条件板卡必须同时满足periph_uart与periph_uart_modecfg两项特性可在 makefiles/features_existing.inc.mk 查看该系列特性的完整清单内存过小的板卡如nucleo-f031k6会被 CI 排除验证手段测试的输出与总结只能说明驱动层的成功/失败帧格式是否真正按声明生效必须依赖逻辑分析仪/示波器这也是本测试命名为Expected result而非自断言测试的原因参数裁剪通过CFLAGS-DSTDIO_UART_BAUDRATEBAUD调整波特率通过CFLAGS-DDELAY_USus调整模式间间隔以适应不同探头的解码能力。简而言之tests/periph/uart_mode 是一份面向单 UART 板卡的 UART 帧格式能力自检工具读懂它的输出格式、构建参数与uart_mode()底层实现你就能在任何支持模式重配的 RIOT 板卡上快速完成 UART 帧格式的兼容性摸底并把仪器观测与驱动返回码一一对应起来。赞分享物联网嵌入式操作系统实时系统【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址https://gitcode.com/GitHub_Trending/riot/RIOT点击查看免费下载相关推荐科学论文摘要关键词提取keyphrase-extraction-kbir-semeval2017 终极性能评测报告科学论文摘要关键词提取keyphrase extraction kbir semeval2017 终极性能评测报告 在当今信息爆炸的时代 关键词提取技术 已物联网嵌入式操作系统实时系统RIOT OS 定时器负载基准测试解读 tests/bench/xtimer_load 的 drift/jitter 测量原理与实战RIOT OS 定时器负载基准测试解读 tests/bench/xtimer_load 的 drift/jitter 测量原理与实战 RIOT OS 的 te物联网嵌入式操作系统实时系统RIOT 备份电池电压监测tests/periph/vbat 测试应用的构建、运行与实现原理RIOT 备份电池电压监测tests/periph/vbat 测试应用的构建、运行与实现原理 导读 在 RIOT 操作系统中很多 MCU尤其是带备份域与物联网嵌入式操作系统实时系统上一篇提升.NET Core开发效率Aspose.Words.dll资源下载推荐下一篇Video2X完整指南用AI免费实现视频超分辨率与帧率提升创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表