【芯片测试篇】:93K测试机I2C的设置和调试

文章目录



I2C 总线配置

  • I2C 是一种双向,两线串行通讯接口,分别是串行数据线 SDA 和串行时钟线 SCL 。两根线都必须通过一个上拉电阻接到电源。

  • 总线上发送数据的器件被称作发送器,接收数据的器件被称作接收器。控制信息交换的器件被称作主器件,受主器件控制的器件则被称作从器件。主器件产生串行时钟 SCL,控制总线的访问状态,产生 START 和 STOP 条件。

  • 只有当总线处于空闲状态时才可以启动数据传输。每次数据传输均开始于 START 条件,结束于 STOP 条件,二者之间的数据字节数是没有限制的,由总线上的主器件决定。信息以字节(8位)为单位传输,第9位时由接收器产生应答。

起始和停止条件

  • 数据和时钟线都为高则称总线处在空闲状态,当 SCL 为高电平时 SDA 的下降沿(高到低)叫做起始条件(START,简写为S),SDA 的上升沿(低到高)则叫做停止条件(STOP,简写为P)。

位传输

  • 每个时钟脉冲传送一位数据。SCL 为高时 SDA 必须保持稳定,因为此时 SDA 的改变被认为是控制信号。

数据格式/应答

  • I2C 的数据字节定义为 8 位长度,每次数据传输的字节数没有限制。每个传输的字节后必须跟随一个应答(ACK)信号:应答信号的时钟由主设备生成,而接收方通过拉低 SDA 线,并在应答时钟脉冲的高电平阶段保持其低电平,来产生实际的应答信号。

  • 若从设备处于忙状态(需先完成其他任务,才能发送或接收下一个数据字节),它可将 SCL 保持在低电平,从而迫使主设备进入等待状态。当从设备准备好并释放时钟线时,正常的数据传输将恢复。

完整的 I2C 数据传输

  1. 在以起始条件(S)开始通信后,主机先发送一个7位的从机地址,随后紧跟第8位 --- 读/写位。读/写位用于指示主机是从从机接收数据,还是向从机写入数据。

  2. 接着,主机释放 SDA 线,并等待从机的应答信号(ACK)。每个传输的字节后都必须跟随一个应答位:为了应答,从机需将 SDA 线拉低,并在 SCL 线的高电平周期内保持低电平。

  3. 数据传输始终由主机以停止条件(P)终止,以此释放通信线路。不过,主机也可产生重复起始条件(Sr),无需先发送停止条件(P)就能寻址另一个从机。

  4. 停止条件的定义是:当 SCL 为高电平时,SDA 线发生从低到高的跳变 。除起始和停止条件外,SDA 线的所有电平变化都应在 SCL 为低电平时进行。

PE 结构

  1. 驱动(输入)

    • 驱动单元为被测器件(DUT)提供输入信号,从向量存储单元获取格式化逻辑信号 FDATA(仅 0 或 1 ),从参考电压源(RVS)获取 VIL/VIH 参考电平,将电平与逻辑信号结合:
      • 若 FDATA 为逻辑0,施加 VIL(DUT 识别为逻辑0的最大电压)到DUT输入引脚。
      • 若 FDATA 为逻辑1,施加 VIH(DUT 识别为逻辑1的最低电压)到DUT输入引脚。
  2. 动态负载

    • 动态负载(Active Load,又称电流负载),在功能测试时连接到 DUT 输出端充当负载,由测试程序控制提供拉电流(IOH --- DUT 输出逻辑 1时,其输出引脚必须向外提供的电流,测试系统从 DUT 引脚 "拉取" 电流)和灌电流(IOL --- DUT 输出逻辑 0时,其输出引脚必须接纳的电流,测试系统向 DUT 引脚 "灌入" 电流)。
    • 参考电压(Voltage Reference,表示为Vref)决定是 IOH 起作用还是 IOL 起作用;当待测器件的输出电压高于 Vref 时,ATE从被测器件引脚拉取电流 IOH;当待测器件的输出电压低于 Vref 时,ATE向被测器件引脚灌入电流 IOL。
  3. 电压接收

    • 若DUT输出电压 ≤ VOL → 判定为逻辑0。
    • 若DUT输出电压 ≥ VOH → 判定为逻辑1。
    • 若DUT输出电压 介于 VOL 和 VOH 之间(VOL < 电压 < VOH)→ 判定为 三态电平(高阻态)或无效输出。

93K setup

  • I2C 总线上的所有设备都使用开漏输出,并且使用时需要连接上拉1.5K,2.2K 或者 4.7K 的电阻,在 93K 测试机上可使用 vt = VCC 和 iol = VCC / pull-up_resistor 配置 Active Load 用来代替实际的电阻,term = load。

  • I2C 总线上数据的传输速率有 100kbit/s 和 400kbit/s,在 spec 文件 set timing 中的 period 可以设置为 10us 或者 2.5us。

  • 将 vth = VCC / 2.0 用来比较高低电平。

  • 按照 Topic 360281 --- 定义 I2C 协议,参考 Topic 0482073425 --- 标准I2C接口,写I2C class method。

I2C 调试

  • 硬件连接:

    • 检查电源 pin 和复位 pin 是否供电稳定,检查 dcVI 是否连接并且上电 VCC,可以用万用表确认,instrument 视图测量或者 profiling()。
    • 检查 DUT 的 SDA/SCL 引脚是否正确连接到机台的 pogo pin,loadboard 上是否存在虚焊。
    • 上拉电阻:根据 VCC 和 pull-up_resistor 求 iol。
  • 总线配置:

    • 设备地址 + 读/写位 发送是否正确。
    • 时钟频率是 100kbit/s 还是 400kbit/s,修改 period 为 10us 或者 2.5us。
    • 起始信号和停止信号时序是否正确。
    • 第9个周期的 ack 是否为低电平。
    • MCU 烧录的固件是否正确,在跑 I2C 时序前是否要加延时,有时会加到几十ms。
  • 必要时通过示波器抓取波形查看:在使用示波器连接 DUT pin 时,机台要先断开连接,也就是数字pin和电源pin的 disconnect = true; ,如果不断开的话 DUT pin 上是有电压的,而如果此时示波器设置上升沿 VCC / 2.0 电压触发,示波器探头接触到 DUT pin 时就会直接抓到波形,而这个并不是想要的。


相关推荐
brave and determined2 天前
国产MCU学习Day6——CW32F030C8T6: I2C功能详解与应用案例
单片机·eeprom·i2c·cw32f030c8t6·cw32·cw32f030·中断读取eeprom
Meraki.Zhang5 天前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
忧虑的乌龟蛋2 个月前
嵌入式Linux I2C驱动开发详解
linux·驱动开发·嵌入式·iic·i2c·读数据·写数据
爱吃程序猿的喵2 个月前
STM32硬件I2C驱动OLED屏幕
c++·stm32·单片机·嵌入式硬件·c·硬件·i2c
通信小小昕4 个月前
Verilog IIC驱动| FPGA驱动
fpga开发·iic·状态机·驱动·i2c
LaoZhangGong1235 个月前
Linux第107步_Linux之PCF8563实验
linux·c语言·stm32·嵌入式硬件·rtc·i2c·pcf8563
ShiinaKaze6 个月前
【MCU】CH591用软件 I2C 出现的 bug
mcu·bug·i2c
Y多了个想法8 个月前
RK3288 android7.1 适配 ilitek i2c接口TP
i2c·rk·tp·rk3288·ilitek
小狗爱吃黄桃罐头8 个月前
江协科技STM32学习- P31 I2C通信协议
stm32·i2c·江科大