SPI和I2C的对比 FPGA实测I2C波形

i2c是什么
在消费电子,工业电子等领域,会使用各种类型的芯片,如微控制器,电源管理,显示驱动,传感器,存储器,转换器等,他们有着不同的功能,有时需要快速的进行数据的交互,为了使用最简单的方式使这些芯片互联互通,于是i2c诞生了,i2c( inter-integrated circuit)是一种通用的总线协议。它是由philips(飞利浦)公司,现nxp(恩智浦)半导体开发的一种 简单的双向两线制总线协议标准。对于硬件设计人员来说,只需要 2个管脚,极少的连接线和面积,就可以实现芯片间的通讯,对于软件开发者来说,可以使用同一个i2c驱动库,来实现实现不同器件的驱动,大大减少了软件的开发时间。极低的工作电流,降低了系统的功耗,完善的 应答机制大大增强通讯的可靠性。
多主多从
5种速率
i2c协议可以工作在以下5种速率模式下,不同的器件可能支持不同的速率。
标准模式(standard):100kbps
快速模式(fast):400kbps
快速模式+(fast-plus):1mbps
高速模式(high-speed):3.4mbps
超快模式(ultra-fast):5mbps(单向传输)
i2c速率模式【bps:bit/s,即scl的频率】其中超快模式是 单向数据传输,通常用于led、lcd等不需要应答的器件,和正常的i2c操作时序类似,但是 只进行写数据,不需要考虑ack应答信号。
超快模式在i2c协议的官方文档 nxp_um10204_i2c-bus specification and user manual_rev.6,超快模式和其他模式在3.2和3.1章节分别进行介绍。
4种信号
i2c协议最基础的几种信号: 起始、停止、应答和非应答信号。
起始信号
i2c协议规定,scl处于高电平时,sda由高到低变化,这种信号是起始信号。
停止信号
i2c协议规定,scl处于高电平,sda由低到高变化,这种信号是停止信号。 起始和停止信号
数据有效性
i2c协议对数据的采样发生在 scl高电平期间,除了起始和停止信号,在数据传输期间,scl为高电平时,sda必须 保持稳定,不允许改变,在scl低电平时才可以进行变化。
数据有效性
应答信号
i2c最大的一个特点就是有完善的 应答机制,从机接收到主机的数据时,会回复一个应答信号来通知主机表示“ 我收到了”。应答信号出现在1个字节传输完成之后,即第9个scl时钟周期内,此时主机需要释放sda总线,把总线控制权交给从机,由于上拉电阻的作用,此时总线为高电平,如果从机正确的收到了主机发来的数据,会把sda拉低,表示应答响应。
应答信号使用mcu、fpga等控制器实现时,需要在第9个scl时钟周期把sda设置为 高阻输入状态,如果读取到sda为低电平,则表示数据被成功接收到,可以进行下一步操作。
非应答信号
当第9个scl时钟周期时,sda保持高电平,表示 非应答信号。 非应答产生非应答信号可能是主机产生也可能是从机产生,产生非应答信号的情况主要有以下几种:
i2c总线上没有主机所指定地址的从机设备
从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯
主机发送的一些控制命令,从机不支持
主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了
读写时序
向指定寄存器地址写入指定数据操作时序:
写时序从指定寄存器地址读取数据操作时序:
读时序注意,读数据时有两次起始信号。
7位和10位地址
大多数i2c器件支持 7位地址模式,有一些器件还支持 10位地址,而且两种类型的器件可以连接在同一个i2c总线上,目前10位地址的器件 还没有被广泛使用。主机发送,从机接收。使用10位地址进行写时序:
10位地址写主机接收,从机发送。使用10位地址进行读时序:
10位地址读
i2c保留字节
i2c读写时起始位之后的第一个字节,除了厂商指定的设备地址外,还有一些保留字节,主要有两组0000 xxx和1111 xxx,保留字节的含义:
保留字节上述的10位地址模式,就是使用到了最后一种 保留字节。第一种广播模式,可以通过写入第二个字节06h来 复位i2c总线上所有的从机器件。
具体操作时序可以查看文档
nxp_um10204_i2c-bus specification and user manual_rev.6 :
3.1.12 reserved addresses
章节有详细介绍。其中device id控制字(1111 1xx1),可以读取i2c器件内部的 24位器件id,通过对照nxp i2c协议器件列表可以查询到器件所属的 厂商和型号。 24位id设备id与器件厂商对应表
id与厂商对照
fpga实测i2c波形
fpga实现、、i2c等串行时序,最常用的实现方式就是 状态机大法,将各个步骤分解为各个状态,然后根据不同的状态去控制输出或读取输入,细节方面需要考虑数据的对齐、建立和保持时间、一些异常情况时状态的跳转,不能进入死循环,或卡死在某一个状态。i2c控制状态机状态定义:
//general s0_idle = 0,
s1_start1 = 1,
s2_ctrl_byte1 = 2,
s3_ack1 = 3,
s4_addr = 4,
s5_ack2 = 5, //write: 0-1-2-3-4-5-》6-7-13-14 s6w_data = 6,
s7w_ack3 = 7, //read: 0-1-2-3-4-5-》8-9-10-11-12-13-14 s8r_start2 = 8,
s9r_ctrl_byte2 = 9,
s10r_ack3 = 10,
s11r_data = 11,
s12r_nack = 12, //general s13_stop = 13,
s14_done = 14,
s15_err = 15;
注意 sda双向端口的方向控制。
output eeprom_scl,
inout eeprom_sda,
localparam dir_in = 1‘b0;
localparam dir_out = !dir_in;
reg dir;
reg i2c_sda;
reg i2c_scl;
assign eeprom_scl = i2c_scl;
assign eeprom_sda = (dir == dir_out) ? i2c_sda : 1’bz;
wire sda_in = eeprom_sda;
sda应该在 第9个scl时钟周期设置为输入状态:
sda方向控制下图的波形是使用xilinx fpga对 at24c1024的驱动,使用片上逻辑分析仪chipscope抓取的实际波形,at24c1024b存储空间为1024k bit = 131072 byte,存储单元地址位宽为17位。at24c1024b写时序:
i2c_writeat24c1024b读时序:
i2c_read
spi和i2c的对比
i2c是 半双工,是全双工。
i2c支持 多主多从模式,而 spi只能有一个主机。
从gpio占用上来看,i2c占用 更少的gpio,更节省资源。
i2c 有应答响应机制,数据可靠性更高, spi没有应答机制。
i2c速率 不会太高,最高速率3.4mbps,spi可以达到很高的速率。
i2c通过 器件地址来选择从机,从机数量的增加不会导致gpio的增加,而spi通过cs选择从机,每增加一个从机就要多占用一个gpio。
spi协议在sclk边沿进行数据采样,i2c在 scl高电平期间进行数据采样。
两者大多都应用于板内器件 短距离通讯。
官方标准文档下载
目前网上比较详细的介绍i2c文档主要有以下3个:
1. i2c官方标准文档_um10204
i2c的官方文档是原飞利浦(philips)半导体事业部,现恩智浦(nxp)半导体发布的um10204文档,全文共64页,是目前最权威最详细的i2c协议介绍文章,最新版本rev. 6发布于20140404, um10204_4 april 2014: i2c-bus specification and user manual_rev.6
2. ti:理解i2c文档_slva704
ti在2015年发布了一篇slva704文档, 全文共8页,精简的概括了i2c协议的电气特性,操作时序,读写时序等,比较适合i2c入门学习。
3. zlg:i2c总线规范中文版
这篇文档发布于2000年左右,是对飞利浦官方文档um10204_v2.1的翻译。
i2c协议文档只是最基础的文档,具体寄存器读写操作等操作,还是要结合所使用芯片的数据手册来使用。


自动驾驶技术是否成熟?
直流无刷减速电机上运用起到的高效霍尔板作用空心杯电机,按摩椅电机,停车场道闸电机
直线电机助力的立体式车库将在四海公园修建
机房网络布线光纤跳线需要满足什么标准-科兰
Belfrics正在促进比特币和区块链技术在非洲的主流采用
SPI和I2C的对比 FPGA实测I2C波形
全球首个能"深度学习"的处理器芯片在我国诞生
无刷电机控制器限速线在哪
瓷片电容漏电原因分析
缺芯引发不良商机,芯片市场假货泛滥
电容触摸屏厂家批发价格一般是多少?云上触摸屏
无人机电力行业应用解决方案
基于四方V560变频器的注塑机驱动方案
荣耀即将发布笔记本、手表和智慧屏等新品
值得关注的12家在AI芯片领域的创业公司
科技云报道:大模型的火烧到了AI服务器上
蓝牙技术在智能设备领域有哪些应用
一月前十位轿车品牌销量排名
Cave正式推出首款VR游戏《A.我是怪兽》
贸泽开售ams OSRAM TMF8820、TMF8821 和TMF8828多区飞行时间传感器