3、核心芯片测试:MCU/CPU功能测试、Flash/RAM读写测试、加密芯片验证

好,咱们进入核心芯片测试这一块。说实话,门禁产品能不能稳定跑起来,全看这几颗芯片给不给力。我这些年经手的项目,至少有一半的返修问题,追根溯源都是芯片测试没做到位。你想想看,MCU死机、Flash数据错乱、加密芯片被破解——任何一个坑踩进去,量产交付就得翻车。

我个人习惯把核心芯片测试分成三大块:MCU/CPU功能测试Flash/RAM读写测试加密芯片验证。咱们一个一个来拆解。

3.1 MCU/CPU功能测试

MCU是门禁的大脑。它要是出问题,整个系统就瘫痪了。我建议测试分两步走:基础供电与时钟验证,然后是核心指令与外设功能测试

3.1.1 供电与时钟

先测供电。用万用表量核心电压,比如1.8V或3.3V,偏差不能超过±5%。然后看时钟——用示波器抓晶振输出波形。我记得有一次,一批MCU死活起振不了,查了半天发现是晶振负载电容焊错了。嗯,这里要注意:时钟频率必须稳定,抖动不能超过±100ppm

3.1.2 核心指令测试

说白了就是让MCU跑一段自检程序。我一般写一个简单的循环,执行加减乘除、逻辑运算、跳转指令。如果结果不对,那这颗芯片基本可以判死刑了。

测试要点:

  • 跑满所有核心指令集(ARM、RISC-V、8051等)
  • 连续运行至少10分钟,监控温度
  • 记录异常中断次数,超过3次直接标记不良

3.1.3 外设功能测试

门禁常用的外设:GPIO、UART、I2C、SPI、定时器。我建议用回环测试法——比如UART自发自收,发一串0x55、0xAA,看接收端能不能原样返回。GPIO就简单了,拉高拉低,用逻辑分析仪看波形。

我的小技巧: 写一个外设遍历测试脚本,自动切换每个外设模式。我在项目中遇到过,某批次MCU的SPI时钟极性反了,导致读卡器数据全乱码。后来加了极性自动校准,再没出过问题。

3.2 Flash/RAM读写测试

Flash和RAM是门禁的“记忆体”。Flash存固件和用户数据,RAM跑临时变量。测试核心就两个字:可靠

3.2.1 Flash读写测试

Flash有擦写寿命,一般10万次。量产测试不用测到寿命极限,但必须验证每个扇区都能正常读写。我常用的方法:

  1. 全片擦除:先擦除所有扇区,读回全0xFF
  2. 写入模式:写入0x55、0xAA、0x00、0xFF等边界值
  3. 读回校验:逐字节比对,不一致就报错

注意: 我曾经遇到Flash写入后读回正确,但掉电后数据丢失。原因是电源纹波太大,导致写入电压不足。所以测试时一定要模拟真实供电环境,最好加一个掉电保持测试。

3.2.2 RAM读写测试

RAM测试更简单,但坑更多。我建议用March C算法,它能检测出地址线短路、数据线粘连等问题。代码示例:

// March C算法伪代码
for (addr = 0; addr < RAM_SIZE; addr++) {
    write(addr, 0x00);  // 写0
}
for (addr = 0; addr < RAM_SIZE; addr++) {
    if (read(addr) != 0x00) error();  // 读0
    write(addr, 0xFF);  // 写1
}
for (addr = RAM_SIZE-1; addr >= 0; addr--) {
    if (read(addr) != 0xFF) error();  // 读1
    write(addr, 0x00);  // 写0
}
// 重复反向遍历,覆盖所有地址

你想想看,如果RAM地址线A0和A1短路,写地址0的数据会同时写到地址1。March C算法能100%检测出这类故障。我建议测试时间控制在2秒以内,毕竟量产要效率。

3.3 加密芯片验证

门禁的加密芯片,说白了就是防破解的。常见的有ATECC608A、SE050等。测试分三步:通信验证密钥存储检查加解密功能测试

3.3.1 通信验证

加密芯片通常走I2C或SPI。先发一个WHO_AM_I命令,读回设备ID。比如ATECC608A的ID是0x6A。如果读不到,检查焊接和上拉电阻。我记得有一次,加密芯片I2C地址被拉偏了,原因是PCB走线太长导致信号衰减。后来加了总线中继器才解决。

3.3.2 密钥存储检查

加密芯片的密钥是出厂烧录的,量产时不能读出来。但可以验证密钥槽是否被正确锁定。我建议:

  • 尝试写入一个无效密钥,看芯片是否拒绝
  • 读取密钥槽状态寄存器,确认锁定位为1
  • 用已知密钥做一次签名,验证签名结果

关键点: 加密芯片的密钥一旦锁定,永远不能修改。所以量产测试中,千万不要执行锁定操作,否则整批芯片就废了。我建议在测试固件里加一个“测试模式”标志,跳过锁定步骤。

3.3.3 加解密功能测试

这是最后一步。发一个随机数给加密芯片,让它用内部密钥加密,然后MCU用预置的公钥解密。如果解密结果和原随机数一致,说明加解密链路正常。

避坑指南: 我曾经遇到加密芯片加密结果正确,但解密时MCU的算法库有bug,导致比对失败。后来我改成双向验证——MCU加密、芯片解密,芯片加密、MCU解密。两边都通过才算合格。

测试流程总结

我把这三块测试整合成一个流水线:

测试项 测试时间 通过标准 常见故障
MCU供电/时钟 5秒 电压±5%,频率±100ppm 晶振不起振、电容错
MCU指令测试 10秒 所有指令结果正确 ALU逻辑错误
Flash读写 15秒 全扇区读写一致 掉电丢失、坏块
RAM March C 2秒 无地址/数据线故障 地址短路、数据粘连
加密芯片通信 3秒 设备ID正确 I2C信号衰减
加密功能验证 5秒 双向加解密一致 算法库不匹配

总时间控制在40秒以内,配合自动化测试夹具,每小时能测90片。嗯,这就是我这些年总结出来的核心芯片测试方案。你按这个流程走,量产良率至少能稳定在98%以上。