文章目录
- [I2C 总线配置](#I2C 总线配置)
- [PE 结构](#PE 结构)
- [93K setup](#93K setup)
- [I2C 调试](#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 数据传输

-
在以起始条件(S)开始通信后,主机先发送一个7位的从机地址,随后紧跟第8位 --- 读/写位。读/写位用于指示主机是从从机接收数据,还是向从机写入数据。
-
接着,主机释放 SDA 线,并等待从机的应答信号(ACK)。每个传输的字节后都必须跟随一个应答位:为了应答,从机需将 SDA 线拉低,并在 SCL 线的高电平周期内保持低电平。
-
数据传输始终由主机以停止条件(P)终止,以此释放通信线路。不过,主机也可产生重复起始条件(Sr),无需先发送停止条件(P)就能寻址另一个从机。
-
停止条件的定义是:当 SCL 为高电平时,SDA 线发生从低到高的跳变 。除起始和停止条件外,SDA 线的所有电平变化都应在 SCL 为低电平时进行。
PE 结构

-
驱动(输入)
- 驱动单元为被测器件(DUT)提供输入信号,从向量存储单元获取格式化逻辑信号 FDATA(仅 0 或 1 ),从参考电压源(RVS)获取 VIL/VIH 参考电平,将电平与逻辑信号结合:
- 若 FDATA 为逻辑0,施加 VIL(DUT 识别为逻辑0的最大电压)到DUT输入引脚。
- 若 FDATA 为逻辑1,施加 VIH(DUT 识别为逻辑1的最低电压)到DUT输入引脚。
- 驱动单元为被测器件(DUT)提供输入信号,从向量存储单元获取格式化逻辑信号 FDATA(仅 0 或 1 ),从参考电压源(RVS)获取 VIL/VIH 参考电平,将电平与逻辑信号结合:
-
动态负载
- 动态负载(Active Load,又称电流负载),在功能测试时连接到 DUT 输出端充当负载,由测试程序控制提供拉电流(IOH --- DUT 输出逻辑 1时,其输出引脚必须向外提供的电流,测试系统从 DUT 引脚 "拉取" 电流)和灌电流(IOL --- DUT 输出逻辑 0时,其输出引脚必须接纳的电流,测试系统向 DUT 引脚 "灌入" 电流)。
- 参考电压(Voltage Reference,表示为Vref)决定是 IOH 起作用还是 IOL 起作用;当待测器件的输出电压高于 Vref 时,ATE从被测器件引脚拉取电流 IOH;当待测器件的输出电压低于 Vref 时,ATE向被测器件引脚灌入电流 IOL。
-
电压接收
- 若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 时就会直接抓到波形,而这个并不是想要的。