Files
kunlun/dtest/dtest3/kl3_efuse_test
2024-09-28 14:24:04 +08:00
..
2024-09-28 14:24:04 +08:00
2024-09-28 14:24:04 +08:00
2024-09-28 14:24:04 +08:00
2024-09-28 14:24:04 +08:00

efuse controller测试说明文档

efuse简介

efuse是一种一次性可编程存储器。是利用电子迁移(EM)特性来生成的一种小型的熔丝结构。

EM熔丝可以在芯片上编程采用I/O电路的片上电压(通常为2.5V)一个持续200微秒的10毫安直流脉冲就足以编程单根熔丝该特性决定了efuse存储器每个bit仅支持一次编程常见的是方法是从0编程为1无法从1编程为0。

efuse controller简介

efuse controller是kl3芯片内部封装的用于控制芯片内部efuse存储器的功能模块其简化了软件访问efuse的复杂度软件只需要配置少量寄存器即可实现efuse的读写操作。

目前的测试程序需要注意以下几点:

  • 目前fpga中并没有真实的efuse存在测试efuse controller时是asic将内部ram模拟成efuse用于测试读写功能是否正常因此FPGA重新上电时ram数据会被清零按键重启不会。
  • kl3取消了efuse保护寄存器。
  • kl3 efuse驱动有改动更改为上电之后读取efuse所有数据并保存在ram中后续的读操作直接返回ram中的数据写操作也先检查ram数据判定是否需要真实的写入efuse。考虑到多核之间的数据同步问题目前仅允许plccore1访问efuse。
  • 需要重新整理efuse驱动做好分层设计和适配之前的程序。

在2021-11-9之后的image版本中efuse controller内部增加了1k bits寄存器用于备份efuse数据减少对efuse的实际操作kl3采用的efuse存在读寿命约400万次并且支持上电后硬件自动加载efuse数据到寄存器中。

测试例程说明

efuse测试例程使用到的外设包含efuse controller、uart。

  • efuse controller测试对象用于测试对外部efuse存储器的访问和控制。
  • uart使用uart0实现调试信息打印接收case配置信息等与PC的交互功能。

sfc测试例程遵循自动化测试框架在例程执行之后初始化串口0通过串口发送“start”字段到PC并等待PC发送“config”字段来获取本次需要执行的测试case。

在获取到case组合之后初始化efuse controller并根据case组合开始执行测试case。

这里的测试在软件上对读写做了一定限制例如将已经置1的bit置1时不会发生写操作而是直接返回对已经置1的bit置0时将直接返回错误。以上限制都是基于存在efuse数据备份的基础上完成efuse数据备份分两种方案

  1. 使用纯软件备份efuse数据方案上电之后主动将efuse数据读取出来保存在ram中优先从ram中读取数据。
  2. 使用efuse controller 寄存器备份方案上电后将efuse数据读取到寄存器中优先从寄存器中读取数据。

case:0efuse data dump测试

data dump测试极其简单在efuse初始化之后将efuse所有数据读取到指定的结构体中并将所有数据打印出来即可。

该测试固定判定执行成功。

在设想中该结构体和efuse中数据一一对应并且可根据该结构体限制用户对efuse的操作

case1efuse写、读测试

本case用于测试efuse controller对于efusefpga中实际为ram的读写功能。测试流程如下

  1. 对efuse指定偏移offset的地址写入数据A按字节写入。

    这里软件会判断写入的数据与efuse中现有的数据是否一致根据判断结果会产生以下行为

    • 如果写入的数据中存在bit试图将1更改为0则会返回错误此时所有bit都未写入到efuse中。
    • 相同的bit将不会更改直接判断其他bit。
    • 0更改为1会执行写入操作将efuse中指定地址的对应bit更新为1同时更新ram中备份的efuse数据。

    也可以直接调用更改bit的api来修改efuse数据

  2. 使用读api读取数据B此时返回的是ram中保存的数据。

  3. 读取efuse中的数据C。

  4. 对比数据B、数据C是否与数据A相等不等则判定失败。

测试结果通过能正常的更改efusefpga版本为ram数据。