FPGA 编程I2C 接口总结

eeleader   2011-2-23 16:11 楼主
1.模拟I2C协议需要熟读数据手册掌握时序

2.I2C协议对时序的要求比SPI更严格,具体表现在时钟SCL处于高电平时,SDA线上传输的数据必须稳定,否则将被视为开始或截止传输的信号。

如何保证信号稳定?这个问题困扰了我几天,后来用double时钟的方法解决

具体解决方法如下:

输入信号为CLK,SCL信号为CLK的2分频,即采用两个周期来处理一个SCL信号

当送START信号或者送STOP信号时,在第二个时钟的下降沿改变SDA信号,此时可以保证SCL为高电平

当送普通数据时,在第一个时钟周期的下降沿改变SDA信号,可保证SCL为高时,数据不变。

具体可以参考以下时序图




3.sda口为双向inout口线,在FPGA中处理起来比较麻烦,其实搞懂了还是很简单的

对inout口线类型要选择为bidir,刚开始设置成output,能收到数据就怪了

双向总线总结:

一般用高阻态来控制信号的进出,需要上拉电阻!归纳为一句话“当需要输入的时候将输出置为高阻态”。

使用时,输出数据时可以任意置数,输入数据时将首先将 sda <= 1'bz,然后才可以读取sda。

回复评论 (2)

。。。之前也写了一下I2C。。。仿真通过了,事情太多了,没有继续往下,后来准备用来控制一个D类功放的,结果发现,我写漏了。。。
我是完全按照协议手册写的,结果没有考虑到器件的地址。只是考虑到了操作的寄存器的地址。。。悲剧。。。等没事了,再来搞这个
点赞  2011-2-23 21:35

期待你的大作, 等待中!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-3-26 16:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复