MCU原厂是如何对例程进行自动化测试的

本文探讨了SDK自动化测试中的CICD流程,涉及Jenkins、openocd在烧录和测试中的应用,以及如何通过硬件配合如模拟开关实现多板测试,包括单对多和模拟环境固化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SDK的自动化测试离不开CICD,简单来说,测试人员手动/定时通过Jenkins向服务器发送请求,服务器通过openocd服务将编译完的程序下载到待测板和辅助板中,然后通过辅助板/待测板的打印来断言测试的结果

CICD部分的框架搭建可以参考以下文章

在一家初创企业如何快速搭建自动化测试流程(CI/CD, 测试管理系统,分布式自动化测试) - 知乎

而SDK的例程运行在开发板中,因此相较于普通的软件测试,SDK的自动化又离不开硬件的实现

SDK例程的手工测试中,我们需要将代码编译后烧录至芯片中,然后通过芯片引脚信号、打印等信息来判断例程的正确性;同一份代码往往支持多种编译方式,同一块MCU也许也支持不同的代码存放路径(flash,sdram),公司也往往是多种型号的MCU支持同一份代码,因此一份sample的代码往往会被测试N次,自动化的性价比也就变得非常高了

对于简单的代码,例如烧录后仅会打印“hello,world”至串口,那对于自动化来说也非常简单,你只需要去串口中捕获这个字符串

对于复杂的功能,譬如从引脚输出一个PWM波的例程,在手工测试中,需要外接示波器进行测试,而在自动化测试中,也就必须要通过另外一块板卡,将输出的信号通过输入捕获后计算得出周期和占空比,然后去判断是否通过

需要使用两块板卡(DUT)的自动化例程,必然面临如何区分这两块DUT的问题

这里给出两种方案:

  1. 将两块DUT接在不同的test executor下,通过软件去实现区分
  2. 如果DUT支持SN号,那么在你开启openocd服务时,指定SN号

这就是对于非回环的输入输出自动化的核心思路,往待测板内烧录待测的程序,再往辅助板内烧录辅助程序

举一个更具体的例子,HPM6200evk的GPTMR的输出比较例程,将PC08引脚初始化为GPTMR2的CMP1,例程开始后,通过PC08输出周期为1S,占空比为30%的方波;为了验证程序的有效性,在辅助板中运行的程序是对PWM周期和占空比的测量,然后在串口中打印捕获到的信息;然后,将辅助板的输入捕获和测试版的输出比较引脚(PC08)连接起来,就完成了硬件环境的构建

如果拥有足够的硬件资源,那么你可以搭建N套这样的环境,对于辅助板和待测板之间的接线,可以设计一款转接小板,两块板子插在一起即可,也没有接线的烦恼

当硬件资源受限,需要辅助板一对多的时候,又该怎么办呢

还是大体有两种方案

  1. 假设你的开发板有非常丰富的外设,且这些外设都通过引脚接了出来;根据最受限的资源(譬如你的开发本只有两个DAC输出)的数量,决定了你这块板卡可以一对N的能力;本质上还是之前一对一的方案,只不过用不同的外设分配给不同的待测板
  2. 利用模拟开关实现同一外设测试多块不同的测试板

接下来具体讲讲这第二种方案

模拟开关根据型号的不同,往往有不同的功能,例如CD4067,支持4个控制信号(ABCD),一个使能信号(INMIBIT),通过4个控制信号决定主路和0-15路支路哪一路导通;以此为基础,就可以实现1:16的测试环境搭建

在测试开始的时候,辅助板通过4个引脚控制ABCD这4个控制信号,决定COMMON IO与哪一个支路导通;这时其他支路截止,不会对测试造成干扰

对于稳定环境的搭建,也可以通过PCB的方式去固化环境,避免环境的维护性较差

可以画一块大板,满足所有需要用到的测试信号,然后待测板再接到这块大板上,这样的环境也是稳定的

也可以画几块小板,小板之间通过级联的方式传递控制信号

假设一块板上只测三个信号,不同的待测DUT接到对应的引脚上,当辅助板与DUT1导通时,三个模拟开关同时导通(因为ABCD这四个信号在不同模拟开关上是串联的);通过这种方式就可以实现,辅助板即和DUT1直连,又和DUT2直连的这种假象了

当然,模拟开关对于高频信号没有直连那么优秀,如果是10MHZ以上的信号,就要考虑别的方案了

### STM32F103C8T6 连接 IPS 屏幕教程 #### 一、硬件准备与连接 为了使STM32F103C8T6能够成功驱动IPS屏幕,需先准备好相应的硬件组件并完成基本的电气连接。通常情况下,IPS屏幕会配备特定的数据线和控制信号线用于接收来自MCU(微控制器单元)的数据输入以及同步指令。 对于采用SPI协议作为主要通讯方式的情况而言,应当注意以下几点: - MOSI (Master Out Slave In): 主设备数据输出到从设备 - MISO (Master In Slave Out): 主设备数据输入自于从设备;然而,在大多数显示应用中并不需要用到此线路因为显示器一般只接受而不发送信息给处理器。 - SCLK (Serial Clock): SPI串行时钟由主机产生用来协调双方之间的位传输速率。 - CS/SS (Chip Select / Slave Select): 片选信号低电平有效当拉低时表示选定当前外设开始通信。 - RST (Reset): 复位引脚可选, 如果存在则可以初始化LCD模块。 - DC (Data Command): 数据命令选择器高电平时表示接下来的是图像像素值而低电平时代表即将传送的是寄存器地址或其它控制参数。 - BLK (Backlight Control): 背光亮度调节端子可通过PWM波形调整发光强度[^1]。 具体的引脚映射关系如下表所示: | STM32 Pin | Function | |-----------|----------------| | PA4 | NCS | | PA5 | CLK/SCK | | PA6 | MOSI | | PB0 | RESET | | PB1 | D/CX | 请注意实际产品可能有所差异因此务必参照具体型号的手册来进行连线操作[^4]。 #### 二、软件设置 ##### CubeMX 初始配置 通过STM32CubeMX工具简化项目创建过程中的繁杂工作量,比如自动配置RCC时钟树结构以及时序参数优化等重要环节。针对本案例来说重点在于开启SPI功能并将它设定为主模式同时指定好对应的GPIO管脚分配方案以便后续编程调用方便快捷。 ```cpp // 初始化SPI接口函数模板 void MX_SPI1_Init(void) { hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; // 设置为主控模式 hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; HAL_SPI_Init(&hspi1); } ``` 以上代码片段展示了如何基于HAL库来启动SPI总线服务,并且指定了必要的属性选项如波特率分频系数、极性和相位特性等等。 ##### 编写驱动程序 编写专门面向目标显示屏特性的驱动例程负责处理诸如帧缓冲区管理、色彩空间转换等一系列底层细节问题。这部分逻辑往往依赖于制造商提供的技术文档说明书中给出的相关API定义或者是开源社区内已有的成熟解决方案。 ```c #include "lcd.h" #define LCD_WIDTH 135 #define LCD_HEIGHT 240 static void lcd_write_command(uint8_t cmd){ GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, Bit_RESET); /* Set as command */ spi_send_byte(cmd); } static void lcd_write_data(uint8_t data){ GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, Bit_SET); /* Set as data */ spi_send_byte(data); } /* 更多辅助方法... */ void lcd_init(){ delay_ms(100); lcd_reset(); // 发送一系列初始化序列... lcd_write_command(ST77XX_SWRESET); delay_ms(120); lcd_write_command(ST77XX_SLPOUT ); delay_ms(120); ... } ``` 上述源码节选部分实现了向液晶面板发出控制字节的功能,同时也包含了简单的重置流程示例。 #### 三、注意事项 - **电源供应**:确保为所有元件提供稳定的工作电压范围内的电力支持,特别是对于敏感型电子器件更要注意防止过压损坏风险。 - **静电防护措施**:在整个装配调试期间都要严格遵循ESD保护原则以免造成不必要的损害事故。 - **验证固件版本兼容性**:确认使用的开发环境及其配套资源包是最新的或是经过充分测试证明可靠的组合形式从而减少潜在冲突隐患。 - **查阅官方资料**:遇到不确定之处应及时查询原厂发布的指导手册获取最权威解释而不是盲目猜测尝试[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值